Ero sivun ”Komentorivin perusteet” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
p (→‎Katso myös: bash-skriptauslinkki)
(muotoilua, wikittelyä yms. pientä)
Rivi 4: Rivi 4:
Komentotulkki on ohjelma, joka hoitaa komentoriviltä annettujen komentojen suorittamisen. Komentorivin käyttö riippuu siitä, mikä [[Komentotulkki|komentotulkki]] on käytössä. Lähes jokaisessa [[Jakelut|jakelussa]] oletuksena on käytössä [[Bash]], joten tämän ohjeen asiat toimivat bashin kanssa. Kuitenkin komentotulkkien välillä ei perusasioissa ole paljoakaan eroa joten ohjeiden pitäisi toimia monissa muissakin komentotulkeissa.
Komentotulkki on ohjelma, joka hoitaa komentoriviltä annettujen komentojen suorittamisen. Komentorivin käyttö riippuu siitä, mikä [[Komentotulkki|komentotulkki]] on käytössä. Lähes jokaisessa [[Jakelut|jakelussa]] oletuksena on käytössä [[Bash]], joten tämän ohjeen asiat toimivat bashin kanssa. Kuitenkin komentotulkkien välillä ei perusasioissa ole paljoakaan eroa joten ohjeiden pitäisi toimia monissa muissakin komentotulkeissa.


== Komentorivin perusteet ==
Seuraavissa ohjeissa dollarimerkki ($) tarkoittaa, että komento syötetään tavallisena käyttäjänä ja risuaita (#) sitä, että toimitaan pääkäyttäjänä. Jos rivin alussa ei ole kumpaakaan näistä merkeistä, se tarkoittaa komennon tulostetta.
=== Hakemistorakenteessa liikkuminen ===
 
== Hakemistorakenteessa liikkuminen ==
[[Linuxin hakemistorakenne|Hakemistorakenteessa]] liikkuminen hoituu suurimmaksi osaksi komennolla cd. Esimerkiksi /usr-hakemistoon siirrytään komennolla  
[[Linuxin hakemistorakenne|Hakemistorakenteessa]] liikkuminen hoituu suurimmaksi osaksi komennolla cd. Esimerkiksi /usr-hakemistoon siirrytään komennolla  
  $cd /usr
  $ cd /usr
Nykyisen hakemiston alihakemistoon taas voidaan siirtyä ilman /-merkkiä:
Nykyisen hakemiston alihakemistoon taas voidaan siirtyä ilman /-merkkiä:
  $cd alihakemisto
  $ cd alihakemisto


Hakemistorakenteessa pääsee yhden hakemiston ylöspäin komennolla cd ..
Hakemistorakenteessa pääsee yhden hakemiston ylöspäin komennolla cd ..


Hakemiston tiedostot ja alihakemistot näkee komennolla ls. Parametri -l näyttää tarkemmat tiedot jokaisesta tiedostosta ([[tiedoston oikeudet]], omistajan, koon ja muokakuspäivän), ja -a näyttää myös piilotetut tiedostot. Esimerkiksi:
Hakemiston tiedostot ja alihakemistot näkee komennolla ls. Parametri -l näyttää tarkemmat tiedot jokaisesta tiedostosta ([[tiedoston oikeudet]], omistajan, koon ja muokakuspäivän), ja -a näyttää myös piilotetut tiedostot. Esimerkiksi:
  $ls -l
  $ ls -l
  -rw-rw-rw-  1 kayttaja users    340        25. marras 18:36    tiedosto1
  -rw-rw-rw-  1 kayttaja users    340        25. marras 18:36    tiedosto1
  -rwxr-xr-x    1 kayttaja users    652348  25. tammi  2004    tiedosto2.bin
  -rwxr-xr-x    1 kayttaja users    652348  25. tammi  2004    tiedosto2.bin
  -rw-r--r--      1 kayttaja users  1709160 20. kesä    2002      tiedosto3
  -rw-r--r--      1 kayttaja users  1709160 20. kesä    2002      tiedosto3
Tässä siis ensimmäiset merkit kertovat [[tiedoston oikeudet]], toisena oleva numero kertoo tiedostojen lukumäärän (lähinnä hakemistoille), sen jälkeen on tiedoston omistajan käyttäjätunnus (''kayttaja'') ja tiedoston omistava ryhmä (''users''). Toinen numeroarvo on tiedoston koko tavuina, jota seuraa viimeisin muokkauspäivämäärä ja tiedoston nimi.


=== Komentojen suorittaminen ===
== Komentojen suorittaminen ==
Mikäli ohjelma löytyy hakemistosta, joka on määritelty $PATH-ympäristömuuttujassa, sen voi suorittaa suoraan ajamalla komennon ohjelmannimi (esimerkiksi ls on ohjelma, joka sijaitsee yleensä polussa /bin). Yleensä näin voidaan suorittaa koko järjestelmään asennetut ohjelmat. $PATH:in sisällön voi tarkistaa seuraavasti:
Mikäli ohjelma löytyy hakemistosta, joka on määritelty $PATH-ympäristömuuttujassa, sen voi suorittaa suoraan ajamalla komennon ohjelmannimi (esimerkiksi ls on ohjelma, joka sijaitsee yleensä polussa /bin). Yleensä näin voidaan suorittaa koko järjestelmään asennetut ohjelmat. $PATH:in sisällön voi tarkistaa seuraavasti:
  $echo $PATH
  $ echo $PATH
  /usr/kde/3.5/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/3.4.5:/opt/sun-jdk-1.5.0.06/bin:
  /usr/kde/3.5/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/3.4.5:/opt/sun-jdk-1.5.0.06/bin:
  /opt/sun-jdk-1.5.0.06/jre/bin:/usr/kde/3.5/bin:/usr/qt/3/bin:/usr/kde/3.4/bin:/usr/games/bin:/opt/vmware/workstation/bin:
  /opt/sun-jdk-1.5.0.06/jre/bin:/usr/kde/3.5/bin:/usr/qt/3/bin:/usr/kde/3.4/bin:/usr/games/bin:/opt/vmware/workstation/bin:
Rivi 27: Rivi 29:


Mikäli ajettava ohjelma ei sijaitse $PATH:in määrittelemissä hakemistoissa, se voidaan suorittaa joko viittaamalla siihen koko sen polulla (esim. /home/kayttaja/imuroitua/hienosofta.bin), tai mikäli kyseinen ohjelma on hakemistossa, johon on jo siirrytty, lisäämällä tiedostonimen eteen ./ joka viittaa nykyiseen hakemistoon (huomaa kuitenkin että suoritettavalla tiedostolla on oltava [[Tiedoston oikeudet|suoritusoikeudet]]). Esimerkiksi jos hakemistossa /home/kayttaja olisi suoritettava tiedosto nimeltä ohjelma se voitaisiin suorittaa seuraavilla tavoilla:
Mikäli ajettava ohjelma ei sijaitse $PATH:in määrittelemissä hakemistoissa, se voidaan suorittaa joko viittaamalla siihen koko sen polulla (esim. /home/kayttaja/imuroitua/hienosofta.bin), tai mikäli kyseinen ohjelma on hakemistossa, johon on jo siirrytty, lisäämällä tiedostonimen eteen ./ joka viittaa nykyiseen hakemistoon (huomaa kuitenkin että suoritettavalla tiedostolla on oltava [[Tiedoston oikeudet|suoritusoikeudet]]). Esimerkiksi jos hakemistossa /home/kayttaja olisi suoritettava tiedosto nimeltä ohjelma se voitaisiin suorittaa seuraavilla tavoilla:
  $cd /home/kayttaja
  $ cd /home/kayttaja
  $./ohjelma
  $ ./ohjelma
tai
tai
  $/home/kayttaja/ohjelma
  $ /home/kayttaja/ohjelma
'''Vinkki''': Käyttäjän omaan kotihakemistoon (/home/kayttaja) voi viitata tidlellä: cd ~  
'''Vinkki''': Käyttäjän omaan kotihakemistoon (/home/kayttaja) voi viitata tidlellä: cd ~  


Ohjelman voi myös jättää pyörimään taustalle laittamalla rivin perään merkin &. Tällöin ohjelman tuloste tulee konsoliin, mutta komentorivin normaali käyttö on mahdollista.
Ohjelman voi myös jättää pyörimään taustalle laittamalla rivin perään merkin &. Tällöin ohjelman tuloste tulee konsoliin, mutta komentorivin normaali käyttö on mahdollista.


=== Putkitus ===
== Putkitus ==
Putket (''engl. pipes'') ovat tapa, jolla yhden ohjelmat tuloste voidaan ohjata toiselle ohjelmalle syötteeksi.  
Putket (''engl. pipes'') ovat tapa, jolla yhden ohjelmat tuloste voidaan ohjata toiselle ohjelmalle syötteeksi.  


Esimerkiksi komento uname -r näyttää [[Kernel|ytimen]] version:
Esimerkiksi komento [[uname]] -r näyttää [[Kernel|ytimen]] version:
  $uname -r
  $ uname -r
  2.6.15-ck3-r1
  2.6.15-ck3-r1
Toisaalta cowsay on mukava pikkuohjelma jolla saa tekstiä lehmän sanomaksi:
Toisaalta [[cowsay]] on mukava pikkuohjelma jolla saa tekstiä lehmän sanomaksi:
  $cowsay Moi linux.fi!
  $ cowsay Moi linux.fi!


   _______________
   _______________
Rivi 55: Rivi 57:


Kun nämä komennot putkitetaan |-ohjausmerkillä, saadaan aikaan seuraavanlainen tulostus
Kun nämä komennot putkitetaan |-ohjausmerkillä, saadaan aikaan seuraavanlainen tulostus
  $uname -r | cowsay
  $ uname -r | cowsay


   _______________
   _______________
Rivi 65: Rivi 67:
                 ||----w |
                 ||----w |
                 ||    ||
                 ||    ||
|-ohjausmerkki siis antaa ensin suoritetun komennon tulosteen jälkimmäisenä olevan ohjelman syötteeksi. Hyötyä tästä on esimerkiksi tapauksessa, jossa jonkin komennon antama yli yhden ruudullisen pituinen tulostus halutaan antaa [[less|lessille]] syötteeksi. Esimerkiksi kaikki järjestelmän prosessit saa kätevästi selattavaksi putkittamalla komennon "ps aux" tulosteen lessille:
|-ohjausmerkki siis antaa ensin suoritetun komennon tulosteen jälkimmäisenä olevan ohjelman syötteeksi. Hyötyä tästä on esimerkiksi tapauksessa, jossa jonkin komennon antama yli yhden ruudullisen pituinen tulostus halutaan antaa [[less|lessille]] syötteeksi. Esimerkiksi kaikki järjestelmän prosessit saa kätevästi selattavaksi putkittamalla komennon <tt>[[ps]] aux</tt> tulosteen lessille:
  ps aux | less
  $ ps aux | less
Tai kun pitkästä tulosteesta haluaa etsiä jotain [[Grep|grepin]] avulla:
Tai kun pitkästä tulosteesta haluaa etsiä jotain [[Grep|grepin]] avulla:
  ls | grep merkkijono
  $ ls | grep merkkijono
Joka tulostaisi vain niiden tiedostojen nimen, joiden nimessä esiintyy sana merkkijono.
Joka tulostaisi vain niiden tiedostojen nimen, joiden nimessä esiintyy sana merkkijono.


====Tiedostojen putkitus====
===Tiedostojen putkitus===
Ohjelmien tulosteiden lisäksi voi putkittaa myös tiedostoja. Esimerkiksi voit kokeilla luoda pienen tekstitiedoston, ja sitten ajaa komennon <tt>cowsay < tiedosto</tt>. Tällöin tiedoston sisältö annetaan ohjelmalle (tässä tapauksessa cowsaylle) syötteenä (nk. stdin). Nyt kun ohjelma lukee syötettä (joka normaalisti olisi näppäimistö), se lukeekin tiedoston sisältöä.
Ohjelmien tulosteiden lisäksi voi putkittaa myös tiedostoja. Esimerkiksi voit kokeilla luoda pienen tekstitiedoston, ja sitten ajaa komennon <tt>cowsay < tiedosto</tt>. Tällöin tiedoston sisältö annetaan ohjelmalle (tässä tapauksessa cowsaylle) syötteenä (nk. stdin). Nyt kun ohjelma lukee syötettä (joka normaalisti olisi näppäimistö), se lukeekin tiedoston sisältöä.


Vastaavasti ohjelman tulostuksen voi ohjata tavallisen komentorivin (stdout) sijasta tiedostoon ohjausmerkillä >. Kokeile vaikka komentoa <tt>cowsay Moi > tiedosto</tt>, ja katso tämän jälkeen tiedoston tiedosto sisältö. >-merkin käyttö kirjoittaa tiedoston päälle, mutta >>-operaattoria käyttämällä putkesta tulevan tiedon voi kirjoittaa tiedoston perään.
Vastaavasti ohjelman tulostuksen voi ohjata tavallisen komentorivin (stdout) sijasta tiedostoon ohjausmerkillä >. Kokeile vaikka komentoa <tt>cowsay Moi > tiedosto</tt>, ja katso tämän jälkeen tiedoston ''tiedosto'' sisältö (<tt>[[cat]] tiedosto</tt>). >-merkin käyttö kirjoittaa tiedoston päälle, mutta >>-operaattoria käyttämällä putkesta tulevan tiedon voi kirjoittaa tiedoston perään.


Putkituksen käyttöä kannattaa opetella systemaattisesti, sillä suurin osa komentoriviohjelmista toimii tehokkaasti osana jotain toista ohjelmaa, ja kytkentä niiden välillä tehdään helpoiten putkituksen avulla. Pitkiäkään putkituksia ei kannata pelätä. Putkituksen opettelua voi aloittaa tutkimalla komentoja [[grep]], [[awk]], [[cat]], [[zcat]], [[less]], [[more]], [[sort]], [[od]], [[du]], [[wc]] ja [[ls]].
Putkituksen käyttöä kannattaa opetella systemaattisesti, sillä suurin osa komentoriviohjelmista toimii tehokkaasti osana jotain toista ohjelmaa, ja kytkentä niiden välillä tehdään helpoiten putkituksen avulla. Pitkiäkään putkituksia ei kannata pelätä. Putkituksen opettelua voi aloittaa tutkimalla komentoja [[grep]], [[awk]], [[cat]], [[zcat]], [[less]], [[more]], [[sort]], [[od]], [[du]], [[wc]] ja [[ls]] (katso myös luettelo [[komentorivikomennot|komentorivikomennoista]]).


====Esimerkkejä====
===Esimerkkejä===


  du /etc |sort -nr |head -5
  $ du /etc | sort -nr | head -5
  23281  /etc
  23281  /etc
  6851    /etc/opt
  6851    /etc/opt
Rivi 90: Rivi 92:


Toiminnallisesti sama tulos tulee myös komennolla
Toiminnallisesti sama tulos tulee myös komennolla
  du /etc |sort -n |tail -5
  $ du /etc | sort -n | tail -5
  2569    /etc/X11
  2569    /etc/X11
  4073    /etc/opt/gnome/gconf
  4073    /etc/opt/gnome/gconf
Rivi 99: Rivi 101:
Nyt kuitenkin sillä erotuksella, että tässä tapauksessa [[tail]] ottaakin [[sort]]in tuloksesta viimeiset rivit, ja sortin tulostusjärjestystä ei käännetä valitsimella -r.
Nyt kuitenkin sillä erotuksella, että tässä tapauksessa [[tail]] ottaakin [[sort]]in tuloksesta viimeiset rivit, ja sortin tulostusjärjestystä ei käännetä valitsimella -r.


  du /etc |sort -n |tail -5 |grep X11
  $ du /etc |sort -n |tail -5 |grep X11
  2569    /etc/X11
  2569    /etc/X11


Rivi 115: Rivi 117:
  270
  270


Tämä puolestaan kertoo, kuinka monta tiedostoa on hakemistossa /etc ([[wc]] -l laskee tiedoston rivit).
Tämä puolestaan kertoo, kuinka monta tiedostoa on hakemistossa /etc ([[wc]] -l laskee syötteen rivit).


=== Komentojen ketjutus ===
== Komentojen ketjutus ==
Useita komentoja voidaan suorittaa peräkkäin esimerkiksi &&-ohjausmerkillä. Se tarkoittaa, että ensin suoritetaan ensimmäinen ohjelma ja sitten, mikäli se ei palauta virhettä, jälkimmäinen. Esimerkiksi [[Gentoo|Gentoon]] paketinhallinnan tietokanta voidaan päivittää komennolla emerge --sync ja tämän jälkeen päivittää koko järjestelmä komennolla emerge -uDNav world. Nämä voidaan yhdistää seuraavalla tavalla:
Useita komentoja voidaan suorittaa peräkkäin esimerkiksi &&-ohjausmerkillä. Se tarkoittaa, että ensin suoritetaan ensimmäinen ohjelma ja sitten, mikäli se ei palauta virhettä, jälkimmäinen. Esimerkiksi [[Gentoo|Gentoon]] paketinhallinnan tietokanta voidaan päivittää komennolla emerge --sync ja tämän jälkeen päivittää koko järjestelmä komennolla emerge -uDNav world. Nämä voidaan yhdistää seuraavalla tavalla:
  # emerge --sync && emerge -uDNav world
  # emerge --sync && emerge -uDNav world
Rivi 138: Rivi 140:
*pikkupelit
*pikkupelit
Niin kirjoittamassa hakemistossa ensin
Niin kirjoittamassa hakemistossa ensin
cd im
$ cd im
ja painamalla sitten tabulaattoria, täydentyisi rivi muotoon
ja painamalla sitten tabulaattoria, täydentyisi rivi muotoon
cd imuroidut
$ cd imuroidut
Toisaalta kirjoittamalla  
Toisaalta kirjoittamalla  
cd p
$ cd p
ja painamalla tabulaattoria mitään ei tapahdu, koska ei ole selvää, minkä hakemiston haluat valita. Kun tabulaattoria painetaan toisen kerran, tulee näkyviin listaus kaikista vaihtoehdoista, tässä tapauksessa siis hakemistojen "pelit" ja "pikkupelit" nimet.
ja painamalla tabulaattoria mitään ei tapahdu, koska ei ole selvää, minkä hakemiston haluat valita. Kun tabulaattoria painetaan toisen kerran, tulee näkyviin listaus kaikista vaihtoehdoista, tässä tapauksessa siis hakemistojen "pelit" ja "pikkupelit" nimet.


==Komentojen käynnistäminen taustalle==
==Komentojen käynnistäminen taustalle==
Voit käynnistää komennon pyörimään taustalle laittamalla &-merkin komennon perään. Esimerkki:
Voit käynnistää komennon pyörimään taustalle laittamalla &-merkin komennon perään. Esimerkki:
  xterm &
  $ xterm &
Käynnistää xtermin ja palauttaa käynnistetyn xterm-prosessin työnumeron ja [[PID]]-luvun. Xterm ei kuitenkaan tässä tapauksessa varaa käyttämääsi terminaalia.
Käynnistää xtermin ja palauttaa käynnistetyn xterm-prosessin työnumeron ja [[PID]]-luvun. Xterm ei kuitenkaan tässä tapauksessa varaa käyttämääsi terminaalia.


Taustalle käynnistetyn ohjelman voi siirtää edustalle komennolla [[fg]]. Fg:lle annetaan parametriksi ohjelman työnumero, jonka saa selville myös komennolla [[jobs]]. Jos mitään työnumeroa ei anneta, siirretään edustalle viimeksi taustalle siirretty ohjelma. Esimerkiksi seuraava komento siirtäisi työnumeron 2 omaavan ohjelman edustalle:
Taustalle käynnistetyn ohjelman voi siirtää edustalle komennolla [[fg]]. Fg:lle annetaan parametriksi ohjelman työnumero, jonka saa selville myös komennolla [[jobs]]. Jos mitään työnumeroa ei anneta, siirretään edustalle viimeksi taustalle siirretty ohjelma. Esimerkiksi seuraava komento siirtäisi työnumeron 2 omaavan ohjelman edustalle:
  fg %2
  $ fg %2
Tietyn ohjelman suorituksen voi myös siirtää taustalle [[bg]]-komennolla. Tällöin ohjelman suoritus on kuitenkin yleensä ensin keskeytettävä Ctrl + Z -näppäinyhdistelmällä, jotta komennon antaminen olisi mahdollista. Bg:n syntaksi on sama kuin fg:n.
Tietyn ohjelman suorituksen voi myös siirtää taustalle [[bg]]-komennolla. Tällöin ohjelman suoritus on kuitenkin yleensä ensin keskeytettävä Ctrl + Z -näppäinyhdistelmällä, jotta komennon antaminen olisi mahdollista. Bg:n syntaksi on sama kuin fg:n.


Rivi 160: Rivi 162:
*[http://people.debian.org/~debacle/refcard/refcard-fi-a4.pdf Debian GNU/Linux Pikaohje PDF-tiedostona ] (Tulosta parerille kaksipuoleisena ja taita haitariksi, fantsua)
*[http://people.debian.org/~debacle/refcard/refcard-fi-a4.pdf Debian GNU/Linux Pikaohje PDF-tiedostona ] (Tulosta parerille kaksipuoleisena ja taita haitariksi, fantsua)
*[http://www.linuxcommand.org/ LinuxCommand.org] – Aloittelijoille suunnattu kattava ja helppotajuinen englanninkielinen opetussivusto komentorivin käytöstä ja shell-skriptien kirjoituksesta.
*[http://www.linuxcommand.org/ LinuxCommand.org] – Aloittelijoille suunnattu kattava ja helppotajuinen englanninkielinen opetussivusto komentorivin käytöstä ja shell-skriptien kirjoituksesta.
[[Luokka:Ohjeet]]
[[Luokka:Ohjeet]]
[[Luokka:Komentorivi]]
[[Luokka:Komentorivi]]

Versio 11. huhtikuuta 2007 kello 22.58

Komentorivi on yksi GNU/Linux-järjestelmän tehokkaimmista työkaluista, mutta se voi olla Windows-maailmasta Linuxiin siirtyneelle outo. Windowsissa komentotulkki on varsin rajoittunut ja kömpelö, tosin sitä ei tarvitakaan juuri mihinkään. Linuxissa komentoriviltä hoituvat lähes kaikki mahdolliset tehtävät jopa kätevämmin kuin graafisia työkaluja käyttäen.

Komentotulkit

Komentotulkki on ohjelma, joka hoitaa komentoriviltä annettujen komentojen suorittamisen. Komentorivin käyttö riippuu siitä, mikä komentotulkki on käytössä. Lähes jokaisessa jakelussa oletuksena on käytössä Bash, joten tämän ohjeen asiat toimivat bashin kanssa. Kuitenkin komentotulkkien välillä ei perusasioissa ole paljoakaan eroa joten ohjeiden pitäisi toimia monissa muissakin komentotulkeissa.

Seuraavissa ohjeissa dollarimerkki ($) tarkoittaa, että komento syötetään tavallisena käyttäjänä ja risuaita (#) sitä, että toimitaan pääkäyttäjänä. Jos rivin alussa ei ole kumpaakaan näistä merkeistä, se tarkoittaa komennon tulostetta.

Hakemistorakenteessa liikkuminen

Hakemistorakenteessa liikkuminen hoituu suurimmaksi osaksi komennolla cd. Esimerkiksi /usr-hakemistoon siirrytään komennolla

$ cd /usr

Nykyisen hakemiston alihakemistoon taas voidaan siirtyä ilman /-merkkiä:

$ cd alihakemisto

Hakemistorakenteessa pääsee yhden hakemiston ylöspäin komennolla cd ..

Hakemiston tiedostot ja alihakemistot näkee komennolla ls. Parametri -l näyttää tarkemmat tiedot jokaisesta tiedostosta (tiedoston oikeudet, omistajan, koon ja muokakuspäivän), ja -a näyttää myös piilotetut tiedostot. Esimerkiksi:

$ ls -l
-rw-rw-rw-   1 kayttaja users    340         25. marras 18:36    tiedosto1
-rwxr-xr-x    1 kayttaja users    652348   25. tammi   2004     tiedosto2.bin
-rw-r--r--      1 kayttaja users   1709160 20. kesä    2002       tiedosto3

Tässä siis ensimmäiset merkit kertovat tiedoston oikeudet, toisena oleva numero kertoo tiedostojen lukumäärän (lähinnä hakemistoille), sen jälkeen on tiedoston omistajan käyttäjätunnus (kayttaja) ja tiedoston omistava ryhmä (users). Toinen numeroarvo on tiedoston koko tavuina, jota seuraa viimeisin muokkauspäivämäärä ja tiedoston nimi.

Komentojen suorittaminen

Mikäli ohjelma löytyy hakemistosta, joka on määritelty $PATH-ympäristömuuttujassa, sen voi suorittaa suoraan ajamalla komennon ohjelmannimi (esimerkiksi ls on ohjelma, joka sijaitsee yleensä polussa /bin). Yleensä näin voidaan suorittaa koko järjestelmään asennetut ohjelmat. $PATH:in sisällön voi tarkistaa seuraavasti:

$ echo $PATH
/usr/kde/3.5/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/3.4.5:/opt/sun-jdk-1.5.0.06/bin:
/opt/sun-jdk-1.5.0.06/jre/bin:/usr/kde/3.5/bin:/usr/qt/3/bin:/usr/kde/3.4/bin:/usr/games/bin:/opt/vmware/workstation/bin:
/usr/share/karamba/bin

Mikäli ajettava ohjelma ei sijaitse $PATH:in määrittelemissä hakemistoissa, se voidaan suorittaa joko viittaamalla siihen koko sen polulla (esim. /home/kayttaja/imuroitua/hienosofta.bin), tai mikäli kyseinen ohjelma on hakemistossa, johon on jo siirrytty, lisäämällä tiedostonimen eteen ./ joka viittaa nykyiseen hakemistoon (huomaa kuitenkin että suoritettavalla tiedostolla on oltava suoritusoikeudet). Esimerkiksi jos hakemistossa /home/kayttaja olisi suoritettava tiedosto nimeltä ohjelma se voitaisiin suorittaa seuraavilla tavoilla:

$ cd /home/kayttaja
$ ./ohjelma

tai

$ /home/kayttaja/ohjelma

Vinkki: Käyttäjän omaan kotihakemistoon (/home/kayttaja) voi viitata tidlellä: cd ~

Ohjelman voi myös jättää pyörimään taustalle laittamalla rivin perään merkin &. Tällöin ohjelman tuloste tulee konsoliin, mutta komentorivin normaali käyttö on mahdollista.

Putkitus

Putket (engl. pipes) ovat tapa, jolla yhden ohjelmat tuloste voidaan ohjata toiselle ohjelmalle syötteeksi.

Esimerkiksi komento uname -r näyttää ytimen version:

$ uname -r
2.6.15-ck3-r1

Toisaalta cowsay on mukava pikkuohjelma jolla saa tekstiä lehmän sanomaksi:

$ cowsay Moi linux.fi!
 _______________
< Moi linux.fi! >
 ---------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||


Kun nämä komennot putkitetaan |-ohjausmerkillä, saadaan aikaan seuraavanlainen tulostus

$ uname -r | cowsay
 _______________
< 2.6.15-ck3-r1 >
 ---------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

|-ohjausmerkki siis antaa ensin suoritetun komennon tulosteen jälkimmäisenä olevan ohjelman syötteeksi. Hyötyä tästä on esimerkiksi tapauksessa, jossa jonkin komennon antama yli yhden ruudullisen pituinen tulostus halutaan antaa lessille syötteeksi. Esimerkiksi kaikki järjestelmän prosessit saa kätevästi selattavaksi putkittamalla komennon ps aux tulosteen lessille:

$ ps aux | less

Tai kun pitkästä tulosteesta haluaa etsiä jotain grepin avulla:

$ ls | grep merkkijono

Joka tulostaisi vain niiden tiedostojen nimen, joiden nimessä esiintyy sana merkkijono.

Tiedostojen putkitus

Ohjelmien tulosteiden lisäksi voi putkittaa myös tiedostoja. Esimerkiksi voit kokeilla luoda pienen tekstitiedoston, ja sitten ajaa komennon cowsay < tiedosto. Tällöin tiedoston sisältö annetaan ohjelmalle (tässä tapauksessa cowsaylle) syötteenä (nk. stdin). Nyt kun ohjelma lukee syötettä (joka normaalisti olisi näppäimistö), se lukeekin tiedoston sisältöä.

Vastaavasti ohjelman tulostuksen voi ohjata tavallisen komentorivin (stdout) sijasta tiedostoon ohjausmerkillä >. Kokeile vaikka komentoa cowsay Moi > tiedosto, ja katso tämän jälkeen tiedoston tiedosto sisältö (cat tiedosto). >-merkin käyttö kirjoittaa tiedoston päälle, mutta >>-operaattoria käyttämällä putkesta tulevan tiedon voi kirjoittaa tiedoston perään.

Putkituksen käyttöä kannattaa opetella systemaattisesti, sillä suurin osa komentoriviohjelmista toimii tehokkaasti osana jotain toista ohjelmaa, ja kytkentä niiden välillä tehdään helpoiten putkituksen avulla. Pitkiäkään putkituksia ei kannata pelätä. Putkituksen opettelua voi aloittaa tutkimalla komentoja grep, awk, cat, zcat, less, more, sort, od, du, wc ja ls (katso myös luettelo komentorivikomennoista).

Esimerkkejä

$ du /etc | sort -nr | head -5
23281   /etc
6851    /etc/opt
4440    /etc/opt/gnome
4073    /etc/opt/gnome/gconf
2569    /etc/X11

Tässä tutkitaan du-komennon avulla sitä, kuinka paljon mikäkin /etc:n hakemisto vie tilaa. Ongelmana tässä on kuitenkin se, että hakemistot ovat oletuksena haku- eikä kokojärjestyksessä. Tämä ratkaistaan komennolla sort -nr, joka lajittelee sille annetun syötteen, eli tässä tapauksessa du:n tulosteen, numeerisesti (valitsin -n) isoimmasta pienimpään (valitsin -r kääntää tulostusjärjestyksen, joka oletuksena olisi pienimmästä isoimpaan). Lopuksi käytetään komentoa head -5 näyttämään sortin tulostuksesta vain viisi ensimmäistä riviä.

Toiminnallisesti sama tulos tulee myös komennolla

$ du /etc | sort -n | tail -5
2569    /etc/X11
4073    /etc/opt/gnome/gconf
4440    /etc/opt/gnome
6851    /etc/opt
23281   /etc

Nyt kuitenkin sillä erotuksella, että tässä tapauksessa tail ottaakin sortin tuloksesta viimeiset rivit, ja sortin tulostusjärjestystä ei käännetä valitsimella -r.

$ du /etc |sort -n |tail -5 |grep X11
2569    /etc/X11

Kun lopuksi poistetaan komennosta vielä grepin avulla kaikki muut rivit paitsi ne, jotka sisältävät merkkijonon X11, saadaan ylläoleva tulostus.

du /etc |sort -n |tail -5 |grep -v X11
4073    /etc/opt/gnome/gconf
4440    /etc/opt/gnome
6851    /etc/opt
23281   /etc

Tässä taas grepille on annettu valitsin -v, jolla määritellään grep näyttämään kaikki rivit paitsi ne, joihin sisältyy merkkijono X11.

ls /etc |wc -l
270

Tämä puolestaan kertoo, kuinka monta tiedostoa on hakemistossa /etc (wc -l laskee syötteen rivit).

Komentojen ketjutus

Useita komentoja voidaan suorittaa peräkkäin esimerkiksi &&-ohjausmerkillä. Se tarkoittaa, että ensin suoritetaan ensimmäinen ohjelma ja sitten, mikäli se ei palauta virhettä, jälkimmäinen. Esimerkiksi Gentoon paketinhallinnan tietokanta voidaan päivittää komennolla emerge --sync ja tämän jälkeen päivittää koko järjestelmä komennolla emerge -uDNav world. Nämä voidaan yhdistää seuraavalla tavalla:

# emerge --sync && emerge -uDNav world

Joka ensin päivittää tietokannan eli ajaa komennon emerge --sync. Mikäli se ei palauta virhettä, ajetaan jälkimmäinen päivityskomento.

Toisaalta ||-ohjausmerkki toimii päinvaston: jälkimmäinen komento suoritetaan vain mikäli edellinen epäonnistuu, vertaa esimerkiksi:

$ false || cowsay tämä näkyy koska false palauttaa virheen
$ true || cowsay tämä ei näy koska true palauttaa onnistumisen

Komentoja voidaan yhdistellä myös puolipisteellä (;), jolloin minkäänlaista tarkistusta komennon onnistumisesta ei suoriteta. Esimerkiksi seuraavien komentojen tulosteet ovat identtiset

$ false ; cowthink Moi!
$ true ; cowthink Moi!

Täydentäminen tabulaattorilla

Tabulaattorin painelu on keino täydentää hakemistojen ja tiedostojen nimiä komentoriville kirjoittamalla vain nimen alku ja painamalla sitten tabulaattoria.

Esimerkiksi mikäli hakemistossa olisi seuraavat alihakemistot:

  • imuroidut
  • pelit
  • pikkupelit

Niin kirjoittamassa hakemistossa ensin

$ cd im

ja painamalla sitten tabulaattoria, täydentyisi rivi muotoon

$ cd imuroidut

Toisaalta kirjoittamalla

$ cd p

ja painamalla tabulaattoria mitään ei tapahdu, koska ei ole selvää, minkä hakemiston haluat valita. Kun tabulaattoria painetaan toisen kerran, tulee näkyviin listaus kaikista vaihtoehdoista, tässä tapauksessa siis hakemistojen "pelit" ja "pikkupelit" nimet.

Komentojen käynnistäminen taustalle

Voit käynnistää komennon pyörimään taustalle laittamalla &-merkin komennon perään. Esimerkki:

$ xterm &

Käynnistää xtermin ja palauttaa käynnistetyn xterm-prosessin työnumeron ja PID-luvun. Xterm ei kuitenkaan tässä tapauksessa varaa käyttämääsi terminaalia.

Taustalle käynnistetyn ohjelman voi siirtää edustalle komennolla fg. Fg:lle annetaan parametriksi ohjelman työnumero, jonka saa selville myös komennolla jobs. Jos mitään työnumeroa ei anneta, siirretään edustalle viimeksi taustalle siirretty ohjelma. Esimerkiksi seuraava komento siirtäisi työnumeron 2 omaavan ohjelman edustalle:

$ fg %2

Tietyn ohjelman suorituksen voi myös siirtää taustalle bg-komennolla. Tällöin ohjelman suoritus on kuitenkin yleensä ensin keskeytettävä Ctrl + Z -näppäinyhdistelmällä, jotta komennon antaminen olisi mahdollista. Bg:n syntaksi on sama kuin fg:n.

Katso myös