Komentorivin perusteet
Komentorivi on yksi GNU/Linux-järjestelmän tehokkaimmista työkaluista, mutta se voi olla Windows-maailmasta Linuxiin siirtyneelle outo. Windowssissa komentotulkki on lähinnä vitsi jolla ei voi tehdä juuri mitään, mutta Linuxissa komentoriviltä hoituu lähes kaikki mahdolliset tehtävät jopa kätevämmin kuin graafisesti.
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.
Komentorivin perusteet
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
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 ajettaja 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 (humaa 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 -a näyttää ytimen version:
$uname -r 2.6.15-ck3-r1
Toisaalta cowsay on mukava pikkuohjelma jolla saa tekstiä lehmän sanomaksi:
$cowsay Moi, wiki.linux.fi! ______________ < Moi, wiki.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 komento antaa pitkän tulosteen ja haluaa antaa sen morelle syötteeksi. Esimerkiksi kaikki järjestelmän prosessit saa kätevästi selattavaksi putkittamalla komennon "ps aux" tulosteen more:lle:
ps aux | more
Tai kun pitkästä tulosteesta haluaa etsiä jotain grepin avulla:
ls | grep tiedosto
Joka tulostaisi vain niiden tiedostojen tiedot, joiden nimessä esiintyy sana tiedosto.
Putkituksen käyttöä kannattaa opetella systemaattisesti, suurin osa /bin ja /usr/bin hakemistojen ohjelmista toimii tehokkaasti osana jotain toista ohjelmaa ja kytkentä niiden välillä tehdään helpoiten putkituksen avulla eikä pitkiäkään putkituksia kannata pelätä. Putkituksen opettelua voi aloittaa tutkimalla komentoja grep, gawk,cat,zcat,more,less,sort,od,du,wc ja ls esimerkiksi:
du /etc |sort -n -r |head -5 23281 /etc 6851 /etc/opt 4440 /etc/opt/gnome 4073 /etc/opt/gnome/gconf 2569 /etc/X11
du /etc :llä tutkitaan minkä verran mikäkin /etc:n hakemisto vie tilaa, ongelmana on kuitenkin että hakemistot ovat hakujärjestyksessä eikä kokojärjestyksessä. Tämä ratkaistaan komennolla sort -nr joka lajittelee 'tiedoston' eli sen mitä du sille kertoi järjestykseen (-n -r tarkoitttaa numeerisesti isoimmasta pienimpään), ja lopuksi head -5 näytää 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
Mutta tässä tapauksessa tail ottaakin sortin tuloksesta viimeiset rivit.
du /etc |sort -n |tail -5 |grep X11 2569 /etc/X11
Lisäämällä suodatin grep X11 tulostukseen jää vain rivi jossa on X11 avain, ja edelleen
du /etc |sort -n |tail -5 |grep -v X11 4073 /etc/opt/gnome/gconf 4440 /etc/opt/gnome 6851 /etc/opt 23281 /etc
Suodattimen -v optiolla saadaankin X11 rivi pois tulostuksesta.
ls /etc |wc -l 270
puolestaan kertoo kuinka monta tiedostoa /etc hakemistossa on. (wc -l laskee tiedoston 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.