FLOSS Manuals

 English |  Español |  Français |  Italiano |  Português |  Русский |  Shqip

Komentorivin perusteet

Komentohistoria

Komentohistorian oikopolut

Komentotulkki antaa sinun hakea vanhoja komentoja ja syöttää ne uudelleen, voit myös muuttaa niitä tarvittaessa. Tämä on yksi helpoimmista ja tehokkaimmista tavoista vähentää kirjoittamista, sillä toistuvat komentojaksot ovat hyvin yleisiä. Esimerkiksi seuraavassa komentojaksossa käymme läpi eri hakemistoja, listaamme niiden sisällön, poistamme tarpeettomat tiedostot ja tallennamme tiedostoja eri nimillä:

cd Kuvat/                              
ls -l status.log.*
rm status.log.[3-5]
mv status.log.1 status.log.bak

cd ../Asiakirjat/
ls -l status.log*                                                            
rm status.log.[2-4]
mv status.log.1 status.log.bak

cd ../Videot/
ls -l status.log*
rm status.log.[2-5]
mv status.log.1 status.log.bak

Jos joudut tekemään tällaista siivoamista usein, tahdot ehkä kirjoittaa skriptin, joka automatisoi sen, ja ehkä käyttää "cron"-tehtävää ajamaan sen säännöllisin väliajoin. Mutta toistaiseksi katsomme vain, kuinka voit suuresti vähentää kirjoittamisen määrää syöttäessäsi komentoja käsin.

Edellisessä luvussa katsoimme, kuinka nuolinäppäimiä käytetään liikuttaessa ympäri komentohistoriaa aivan kuin olisit editoimassa tiedostoa. Tässä luvussa tarkastelemme monimutkaisempaa ja vanhempaa tapaa manipuloida komentohistoriaa. Joskus tämän luvun menetelmät tuntuvat helpommilta, joten on vaivan arvoista harjoitella niitä. Oleta esimerkiksi, että kirjoitit tunti sitten komennon "mv" ja tarvitset sitä nyt. On vaikeampaa painaa paluunuolta monta kertaa kuin käyttää tässä luvussa esiteltyä tekniikkaa. 

Komennon palauttaminen merkkijonolla

Huutomerkkioperaattori on nimetty huutomerkin "!" mukaan ja se antaa sinun toistaa tiedostohistoriassa olevia komentoja.

"!merkkijono" suorittaa viimeisimmän komennon, joka alkaa merkkijonolla. Niinpä täsmälleen saman "mv"-komennon suorittamiseksi voit kirjoittaa:

!mv

Ehkä et tahdo täsmälleen samaa komentoa? Jos tahdot muuttaa sitä hieman ennen sen suorittamista? Tai ehkä tahdot vain katsoa, mitä huutomerkkioperaattori palauttaa, jotta voit varmistaa, että se on oikea komento? Voit palauttaa sen ilman sen suorittamista lisäämällä valitsimen ":p" (joka tarkoittaa tulostamista):

!mv:p

Näytämme kohta komentojen editoinnin.

Ehkä olet antanut paljon "mv"-komentoja, mutta tiedät, että komennon keskellä on ainutlaatuinen merkkijono, jonka tahdot? Ympäröi merkkijono kysymysmerkeillä, kuten seuraavassa: 

!?log?

Kaksi huutomerkkiä peräkkäin toistaa viimeksi ajetun komennon. Erittäin hyödyllinen komentohistoriatekniikka on viimeisen komennon ajaminen pääkäyttäjän oikeuksilla: 

sudo !!

sillä kirjoittelemme usein komentoja ilman oikeita käyttöoikeuksia.

Viimeisimmän komennon ajaminen voi vaikuttaa melko hyödyttömältä, mutta tätä menetelmää voidaan muuttaa ajamaan vain osia viimeisestä komennostasi, kuten näemme myöhemmin.

 

Komennon palauttaminen numeron perusteella

Komentorivi numeroi jokaisen suoritetun komennon järjestyksessä. Jos tahdot palauttaa komentoja numeron perusteella, voit muuttaa komentokehotettasi sisältämään numeron (myöhempi luku näyttää tämän). Voit myös katsoa komentojen listaa ajamalla komennon "history":

$ history                                                       
...
  502  cd Kuvat/
  503  ls -l status.log*
  504  rm status.log.[3-5]
  505  mv status.log.1 status.log.bak
  506  cd ../Asiakirjat/
  507  history                                      
$

Tässä olemme näyttäneet vain ulostulon viimeiset muutamat rivit. Jos tahdot suorittaa uudestaan viimeisimmän "rm"-komennon (komento numero 504), voit tehdä sen syöttämällä komennon: 

!504

Mutta numerot ovat luultavasti käyttökelpoisempia, kun ajattelet takaperin. Jos esimerkiksi muistat antaneesi "rm"-komennon, jota seurasi kolme muuta komentoa, voit ajaa "rm"-komennon seuraavasti: 

!-4

Tämä käskee komentotulkin aloittaa nykyisestä sijainnista, laskea taaksepäin neljä komentoa ja suorittaa siinä sijaitsevan komennon.

Parametrien toistaminen

 

Usein tahdot suorittaa edellisen komennon osia, joko tehtyäsi kirjoitusvirheen, tai koska ajat komentojen sarjaa tiettyä tehtävää varten. Me saamme tämän aikaan käyttämällä huutomerkkioperaattoria valitsimilla.

Kolme hyödyllisintä valitsinta ovat: "*", "!^", ja "!$", jotka ovat oikotiet kaikkiin, ensimmäiseen ja viimeiseen parametriin. Katsotaan näitä järjestyksessä.

"komennonNimi *" suorittaa komennon "komennonNimi" millä tahansa parametreillä, joita käytit viimeisessä komennossasi. Tämä voi olla hyödyllistä, jos teit kirjoitusvirheen. Esimerkiksi kirjoitettuasi "emasc" sen sijaan, että olisit kirjoittanut "emacs":  

emasc /home/fred/mywork.java /tmp/testme.java

Tämä epäonnistuu selvästi. Nyt voit kirjoittaa:

emacs !*

Tämä ajaa komennon "emacs" viimeksi kirjoittamillasi parametreillä. Se on sama, kuin jos kirjoittaisit:

emacs /home/fred/mywork.java /tmp/testme.java

"komennonNimi !^" toistaa ensimmäisen parametrin.

emacs /home/fred/mywork.java /tmp/testme.java
svn commit !^    # vastaa komentoa: svn commit /home/fred/mywork.java

"komennonNimi !$" toistaa viimeisen parametrin.

mv /home/fred/downloads/sample_screen_config /home/fred/.screenrc
emacs !$     # vastaa komentoa: emacs /home/fred/.screenrc

Voit käyttää näitä myös yhdistettynä. Ehkä kirjoitit:

mv mywork.java mywork.java.backup

kun tahdoit oikeastaan tehdä kopion. Voit korjata tämän suorittamalla: 

cp mywork.java.backup mywork.java

Mutta koska käytät parametrejä päinvastaisessa järjestyksessä, hyödyllinen oikotie olisi:

cp !$ !^

 

Hienovaraisempaa parametrien hallintaa varten voit käyttää kaksoishuutomerkkiä valitsimella ":N" valitaksesi parametrin numero N. Tämä on käyttökelpoisinta, kun ajat komennon sudona, sillä alkuperäisestä komennostasi tulee ensimmäinen parametri. Alla on esimerkki, joka esittelee sen tekemisen.

sudo cp /etc/apache2/sites-available/siteconfig /home/fred/siteconfig.bak
echo !^ !!:2  # vastaa komentoa echo cp /etc/apache2/sites-available/siteconfig

Kantama on mahdollinen myös valitsimella "!!:M-N".

Parametrien muokkaaminen

Usein tahdot suorittaa edellisen komennon, mutta muuttaa yhden merkkijonon sen sisällä. Oletetaanpa, että tahdot ajaa komennon tiedostolle "tiedosto1": 

$ wc tiedosto1
     443    1578    9800 tiedosto1

Nyt tahdot poistaa tiedoston "tiedosto2", jolla on melkein sama nimi kuin tiedostolla "tiedosto1". Voit käyttää edellisen komennon viimeistä parametriä merkeillä "!$", mutta muuta sitä seuraavasti:

$ rm !$:s/1/2/                                    
rm tiedosto2

Tämä näyttää hieman monimutkaiselta, joten puretaan parametri:

!$   :   s/1/2/

Merkkiä "!$" seuraa kaksoispiste ja sitten "s"-komento, joka merkitsee "korvausta". Tämän jälkeen on merkkijono, jonka tahdot korvata (1) ja merkkijono, jonka tahdot laittaa sen tilalle (2), joita ympäröivät kauttaviivat. Komentotulkki tulostaa komennon samoin kuin se tulkitsee syötteesi, jonka jälkeen se suorittaa sen.

Koska tällainen korvaaminen on niin yleistä, voit olla tyytyväinen kuullessasi, että on yksinkertaisempi tapa suorittaa komento uudestaan pienellä muutoksella. Voit muuttaa vain yhden merkkijonon komennossa tällä syntaksilla: 

$ wc tiedosto1                                                  
     443    1578    9800 tiedosto1
$ ^1^2                                        
wc tiedosto2

Käytimme tarkemerkkiä "^", merkkijonoa, jonka tahdomme korvata, toista tarkemerkkiä "^", ja merkkijonoa, jonka tahdomme laittaa sen tilalle.

Komentohistorian läpi etsiminen

Käytä näppäinyhdistelmää Ctrl + R suorittaaksesi käänteisen haun (englanniksi "reverse-i-search"). Jos esimerkiksi tahdot käyttää komentoa, jota käytit käyttäessässi viimeksi komentoa "snort", aloita näppäimillä Ctrl + R. Terminaali-ikkunassa näet: 

(reverse-i-search)`':

Kun kirjoitat jokaisen kirjaimen (s, n, jne.), komentotulkki näyttää viimeisimmät komennot, joissa tuo merkkijono on jossain. Kun lopetat merkkijonon "snort" kirjoittamisen, voit käyttää näppäimiä Ctrl + R toistuvasti etsiäksesi taaksepäin kaikkien merkkijonon "snort" sisältävien komentojen läpi. Kun löydät komennon, jota olet etsimässä, voit painaa oikeaa tai vasenta nuolta sijoittaaksesi komennon varsinaiselle komentoriville, jotta voit muokata sitä, tai vain painaa Enter suorittaaksesi komennon.

Bashin historian jakaminen

Bash-komentotulkki tallentaa komentohistorian, jotta voit palauttaa edellisten istuntojen komentoja. Mutta historia tallennetaan vain sulkiessasi päätteen. Jos työskentelet kahdella päätteellä samaan aikaan, tämä merkitsee, että et voi jakaa komentoja.

Korjataksesi tämän - jos tahdot päätteen tallentavan jokaisen komennon heti sen suorittamisen jälkeen - lisää seuraavat rivit "~/.bashrc" -tiedostoosi:

shopt -s histappend
PROMPT_COMMAND='history -a'

Näiden oikoteiden opetteleminen voi säästää sinulta valtavan määrän aikaa, joten ole hyvä ja kokeile!

There has been error in communication with Booktype server. Not sure right now where is the problem.

You should refresh this page.