Ero sivun ”Komentorivin perusteet” versioiden välillä
Pb (keskustelu | muokkaukset) (lainausmerkkien käyttö + lisää dollarimerkkejä + linkki erikoisohjelmat-luokkaan) |
Merkkaukset: Mobiilimuokkaus mobiilisivusto-muokkaus |
||
(64 välissä olevaa versiota 22 käyttäjän tekeminä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
Komentorivi on yksi | [[Komentorivi]] on yksi Linux-järjestelmän tehokkaimmista työkaluista, joka voi olla Windows-maailmasta Linuxiin siirtyneelle outo. Windowsissa komentotulkki on varsin rajoittunut ja kömpelö, eikä sitä useinkaan käytetä juuri mihinkään. Linuxissa komentoriviltä hoituvat lähes kaikki mahdolliset tehtävät, usein jopa kätevämmin kuin graafisia työkaluja käyttäen. | ||
Windowsin komentoriviin tai DOS:iin tottuneiden kannattaa huomioida varsinkin jokerimerkkien erilainen logiikka ja se, etteivät [[Unix]]-komennot juurikaan kysele varmistuksia tai kerro tekemisistään, vaan tekevät ilman kommentteja sen mitä pyydettiin. | |||
[[Kuva:Gnome-terminal.png|250px|right|thumb|Komentorivin käyttöä [[GNOME Terminal]]illa]] | |||
==Miten komentoriville pääsee?== | ==Miten komentoriville pääsee?== | ||
Useimmat käyttävät Linuxia graafisessa ympäristössä ([[X]]), jolloin luontevin tapa komentoriville pääsyyn on käyttää jotakin [[terminaaliemulaattori]]a. Yleisimpiä terminaaliemulaattoreita ovat X:n perustyökaluihin kuuluva [[xterm]], [[KDE]]:n [[Konsole]] sekä [[GNOME]]n [[ | Useimmat käyttävät Linuxia graafisessa ympäristössä ([[X]]), jolloin luontevin tapa komentoriville pääsyyn on käyttää jotakin [[terminaaliemulaattori]]a. Yleisimpiä terminaaliemulaattoreita ovat X:n perustyökaluihin kuuluva [[xterm]], [[KDE]]:n [[Konsole]] sekä [[GNOME]]n [[GNOME Terminal]]. Nämä löytyvät yleensä [[työpöytäympäristö]]n valikosta esimerkiksi nimellä pääte, terminaali tai komentorivi. On myös mahdollista käyttää järjestelmän tekstipohjaisia [[virtuaalikonsoli|virtuaalikonsoleja]] (yleensä numeroiltaan 1-6). Näihin pääsee graafisesta ympäristöstä näppäinyhdistelmällä {{Näppäin|Ctrl|Alt}}+<funktionäppäin> (esimerkiksi {{Näppäin|Ctrl|Alt|F1}}). Tekstitilassa voi virtuaalikonsolista toiseen siirtyä myös näppäinyhdistelmällä {{Näppäin|Alt}}+<funktionäppäin> tai {{Näppäin|Alt}}+sivunuolinäppäin. X toimii yleensä virtuaalikonsolissa 7, joten takaisin sinne voi siirtyä näppäinyhdistelmällä {{Näppäin|Alt|F7}}. | ||
Jotkut jakelut tarjoavat mahdollisuuden käynnistää koneen vikasieto- tai korjaustilassa, joka käynnistyy suoraan komentoriville. Näin on mahdollista tehdä järjestelmään korjauksia vaikka graafinen ympäristö ei toimisikaan. | Jotkut jakelut tarjoavat mahdollisuuden käynnistää koneen vikasieto- tai korjaustilassa, joka käynnistyy suoraan komentoriville. Näin on mahdollista tehdä järjestelmään korjauksia vaikka graafinen ympäristö ei toimisikaan. | ||
== Komentotulkki == | == Komentotulkki == | ||
Komentotulkki (engl. shell) on ohjelma, joka hoitaa komentoriviltä annettujen komentojen suorittamisen. | [[Komentotulkki]] (engl. ''shell'') on ohjelma, joka hoitaa komentoriviltä annettujen komentojen suorittamisen. Komentotulkkeja on useita, mutta peruskäytössä ne toimivat suurin piirtein samalla tavalla. Lähes jokaisessa [[Jakelut|jakelussa]] oletuksena on käytössä [[Bash]] tai jokin Bash-yhteensopiva komentotulkki, joten esimerkeissä käytetään sitä. | ||
Seuraavissa ohjeissa dollarimerkki ($) tarkoittaa, että komento syötetään tavallisena käyttäjänä ja risuaita (#) sitä, että toimitaan pääkäyttäjänä. Tämä on yleinen merkintätapa jota käytetään muuallakin tässä wikissä ja yleisesti muissakin ohjeissa. Jos rivin alussa ei ole kumpaakaan näistä merkeistä, se tarkoittaa komennon tulostetta. | |||
==Komentorivin pikanäppäimet== | |||
Vaikka komentorivillä on mahdollista liikkua {{Näppäin|Left}} , {{Näppäin|Right}} , {{Näppäin|HOME}} sekä {{Näppäin|END}}-näppäimillä, käytettävissä on myös pikanäppäimiä, jotka toimivat komentotulkista riippumatta. | |||
* {{Näppäin|CTRL|A}} - Siirtää kohdistimen rivin alkuun. | |||
* {{Näppäin|CTRL|E}} - Siirtää kohdistimen rivin loppuun. | |||
* {{Näppäin|CTRL|B}} - Siirtää kohdistimen yhden taaksepäin | |||
* {{Näppäin|CTRL|F}} - Siirtää kohdistimen yhden eteenpäin | |||
* {{Näppäin|ALT|B}} - Siirtää kohdistimen edeltävään aakkosnumerisen merkkiin | |||
* {{Näppäin|ALT|F}} - Siirtää kohdistimen seuraavan aakkosnumerisen merkin jälkeen | |||
[[Tiedosto:Komentorivi siirtyminen.png|640px]] | |||
* {{Näppäin|CTRL|U}} - Poistaa kohdistita edeltävän sisällön. | |||
* {{Näppäin|CTRL|K}} - Poistaa kohdistimen sekä sen jälkeisen sisällön. | |||
* {{Näppäin|CTRL|W}} - Poistaa kohdistita edeltävään aakkosnumeriseen merkkiin asti sisällön. | |||
* {{Näppäin|ALT|D}} - Poistaa kohdistimen sekä sen jälkeisen sisällön seuraavaan aakkosnumeriseen merkkiin asti. | |||
== Hakemistorakenteessa liikkuminen == | == Hakemistorakenteessa liikkuminen == | ||
Hakemistorakenteessa liikkuminen hoituu suurimmaksi osaksi komennolla <tt>[[cd]]</tt>. Linuxin [[hakemistorakenne]] lähtee juurihakemistosta /, jonka alta löytyy monia eri hakemistoja. Hakemistopolku voidaan kirjoittaa täydellisenä juurihakemistosta lähtien (esimerkiksi <tt>/home/masa/asiakirjat</tt>) tai suhteessa nykyiseen hakemistoon (esimerkiksi <tt>./tässä_hakemistossa_oleva_tiedosto</tt>). Lisätietoja hakemistorakenteesta löytyy artikkelista [[Linuxin hakemistorakenne]]. | |||
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ä: | ||
Rivi 25: | Rivi 47: | ||
-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 | Tässä siis ensimmäiset merkit kertovat [[tiedoston oikeudet]], toisena oleva numero kertoo tiedoston linkkien eli nimien lukumäärän (yleensä yksi muille kuin 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. Huomaa että hakemistojen kohdalla näkyvä koko ei kerro hakemiston sisältämien tiedostojen yhteiskokoa. | ||
*'''Vinkki''': Saat <tt>ls</tt>:n tulosteessa olevat tiedoston koot helpommin hahmotettavaan muotoon käyttäen lisäksi valitsinta <tt>h</tt> (<tt>ls -lh</tt>). Tällöin tiedostojen koot näytetään käyttäen sopivinta etuliitettä (tavuina tai kilo-, mega-, giga- tai teratavuina). | |||
*'''Vinkki''': Aaltomerkki eli <tt>~</tt> on alias kotihakemistolle. Eli <tt>ls ~/Työpöytä</tt> (tai ~/Desktop, jos käytössä on englanninkielinen nimi) listaa työpöytäsi sisällön riippumatta nykyisestä työhakemistostasi. <tt>~ville</tt> viittaa vastaavasti käyttäjän "ville" kotihakemistoon ja ~ville/Työpöytä hänen työpöytänsä sisältöön (toki hän on saattanut estää sinua lukemasta sitä). | |||
== Komentojen suorittaminen == | == Komentojen suorittaminen == | ||
Mikäli ohjelma löytyy hakemistosta, joka on määritelty [[PATH|$PATH]]-[[ympäristömuuttuja]]ssa, sen voi suorittaa suoraan ajamalla komennon <tt>ohjelmannimi</tt> (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|$PATH]]-[[ympäristömuuttuja]]ssa, sen voi suorittaa suoraan ajamalla komennon <tt>ohjelmannimi</tt> (esimerkiksi <tt>[[ls]]</tt> on ohjelma, joka sijaitsee yleensä polussa <tt>/bin</tt>). 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: | ~/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games | ||
<!-- /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: | ||
/usr/share/karamba/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) | Mikäli ajettava ohjelma ei sijaitse $PATH:in määrittelemissä hakemistoissa, se voidaan suorittaa joko viittaamalla siihen koko sen polulla (esim. <tt>/home/kayttaja/imuroitua/hienosofta.bin</tt>) tai polulla suhteessa [[työhakemisto]]on (esim. <tt>imuroitua/hienosofta.bin</tt>). Mikäli kyseinen ohjelma on hakemistossa, johon on jo siirrytty, suhteellinen polku ilmaistaan lisäämällä tiedostonimen eteen <tt>./</tt>. Tässä piste viittaa siis nykyiseen hakemistoon. Ohjelmia ajaessasi huomaa, että suoritettavalla tiedostolla on oltava [[Tiedoston oikeudet|suoritusoikeudet]]. Esimerkiksi jos hakemistossa <tt>/home/kayttaja</tt> olisi suoritettava tiedosto nimeltä <tt>ohjelma</tt> 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 tildellä: cd | *'''Vinkki''': Käyttäjän omaan kotihakemistoon (/home/kayttaja) voi viitata tildellä: <tt>~/ohjelma</tt> suorittaisi myös tämän ohjelman. | ||
*'''Vinkki''': Kotihakemistoon voi siirtyä suoraan komennolla <tt>cd</tt> (hakemistoa ei siis tarvitse antaa) | |||
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. Lisätietoja taustalla ajettavista ohjelmista löytyy artikkelista [[tausta-ajo]]. | |||
Eri komentoriviohjelmia on listattu ja esitelty sivulla [[komentorivikomennot]]. | |||
== Tiedostojen ja hakemistojen kopioiminen, siirtäminen ja poistaminen == | |||
Tavallisimmat tiedosto-operaatiot hoituvat komennoilla <tt>[[cp]]</tt> (kopiointi), <tt>[[mv]]</tt> (siirtäminen) ja <tt>[[rm]]</tt> (poistaminen). | |||
Tiedosto kopioidaan komennolla | |||
$ cp tiedosto kopio | |||
Kokonainen hakemisto kopioitaessa on käytettävä valitsinta -R: | |||
$ cp -R hakemisto hakemiston_kopio | |||
Vastaavasti tiedostojen siirtäminen tapahtuu komennolla | |||
$ mv vanha_tiedostonimi uusi_tiedostonimi | |||
samalla tavalla voi siirtää myös hakemistoja. | |||
Tiedostojen poistaminen taas tapahtuu komennolla | |||
$ rm tiedosto toinen_tiedosto "kolmas tiedosto" | |||
Poistettavia tiedostoja voidaan siis antaa kerralla useampia. Hakemisto sisältöineen poistetaan [[valitsin|valitsimen]] -r avulla ("rekursiivisesti"; tyhjän hakemiston voi poistaa myös komennolla [[rmdir]]). | |||
$ rm -r hakemisto | |||
$ rmdir tyhjä_hakemisto | |||
Uusia hakemistoja voi luoda komennolla <tt>[[mkdir]]</tt>: | |||
$ mkdir hakemisto | |||
Kerralla on mahdollista luoda useampia hakemistoja luettelemalla ne peräkkäin välilyönnillä erotettuna. Lisäksi kokonaisen hakemistopolun voi luoda kerralla käyttämällä valitsinta -p: | |||
$ mkdir -p kuvat/2009/heinakuu | |||
loisi hakemistoon <tt>kuvat/2009</tt> hakemiston <tt>heinakuu</tt> ja mikäli hakemistoa <tt>kuvat</tt> tai sen alihakemistoa <tt>2009</tt> ei ole olemassa, myös ne luodaan. | |||
== Täydentäminen tabulaattorilla == | |||
Tabulaattorin painelu on keino täydentää komentojen, hakemistojen ja tiedostojen nimiä komentoriville kirjoittamalla vain nimen alku ja painamalla sitten tabulaattoria ({{Näppäin|TAB}}). | |||
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 (asetuksista riippuen kone saattaa piipata). Kun tabulaattoria painetaan toisen kerran, tulee näkyviin listaus kaikista vaihtoehdoista, tässä tapauksessa siis hakemistojen "pelit" ja "pikkupelit" nimet. | |||
Eräät komentotulkit (mm. bash) tukevat myös esimerkiksi etäkoneiden nimien, käyttäjänimien, [[PID|prosessinumeroiden]] sekä komentojen valitsimien täydennystä tabulaattorin avulla. Ominaisuus ei välttämättä ole oletuksena käytössä kaikissa [[jakelu]]issa. | |||
Mm. [[zsh]]- ja [[tcsh]]-[[komentotulkki|komentotulkeissa]] on mahdollista myös nk. oikoluku, eli väärin kirjoitettujen komentojen tab-täydennys oikeiksi. Esimerkiksi komento <tt>mpllayr</tt> voitaisiin tällöin täydentää komennoksi <tt>[[mplayer]]</tt>. | |||
===Vaaditut lisäpaketit=== | |||
* ''[[Arch Linux]]issa [[bash]]-komentotulkki tarvitsee <tt>[https://www.archlinux.org/packages/extra/any/bash-completion/ bash-completion]</tt>-paketin tätä ominaisuutta varten.'' | |||
== Jokerimerkit == | |||
Tiedostoihin ja hakemistoihin voidaan niiden kokonaisen nimen lisäksi viitata myös käyttäen jokerimerkkejä * ja ?. Tähti (*) tarkoittaa sitä, että sen tilalla saa olla mitä tahansa merkkejä. | |||
Jos siis edellisessä esimerkissä kirjoittaisimme komennon | |||
$ rm -r *pelit | |||
poistuisivat hakemistot <tt>pelit</tt> ja <tt>pikkupelit</tt> sisältöineen, koska ne loppuvat "pelit". Vastaavasti kaikkiin ".testi"-päätteisiin tiedostoihin ja hakemistoihin viitattaisiin merkinnällä <tt>*.testi</tt> ja kaikkiin tiedostoihin/hakemistoihin, joiden nimessä esiintyy jossain kohtaa sana "linux" (pienillä kirjaimilla) merkinnällä <tt>*linux*</tt>. | |||
Toinen jokerimerkki on kysymysmerkki (?), joka viittaa mihin tahansa yhteen kirjaimeen (ääkkösten yms. osalta "kirjain" saattaa määräytyä eri tavoilla). Esimerkiksi merkintä <tt>a?</tt> vastaisi mm. merkintöjä <tt>aa, ab, ac,...</tt>, mutta ei merkintää <tt>aaa</tt>. Esimerkiksi voisimme poistaa kaikki kolmesta merkistä koostuvat tiedostot komennolla | |||
$ rm ??? | |||
(tämän sijaan kannattaa usein käyttää muotoa <tt>rm -i ???</tt>, joka pyytää varmistuksen joka tiedoston osalta) | |||
Klassinen "ansa" on se, että <tt>.*</tt> tavallisten [[piilotiedosto]]jen lisäksi viittaa myös hakemistoihin <tt>.</tt> ja <tt>..</tt>, joten <tt>rm -r .*</tt> ei poista pelkästään kaikkia piilotiedostoja ja -piilohakemistoja vaan myös nykyisen työhakemiston ylähakemiston kaikkine alihakemistoineen. Tämän sijaan voi käyttää toista rakennetta, jolla määrätään että toisen merkin on oltava kirjain (tässä [[wikipedia:fi:ASCII|ASCII]]-kirjain): | |||
$ rm .[a-zA-Z]* | |||
Toinen ansa on se, että ylimääräinen välilyönti voi aiheuttaa ikäviä yllätyksiä (erityisesti tiedostoja [[bash-skriptaus|automaattisesti käsiteltäessä]]). Tässä poistetaan sekä .?-tyyliset piilotiedostot että kaikki tavalliset tiedostot: | |||
$ rm .[a-z] * | |||
DOS:sta poiketen komentotulkki tulkitsee jokerimerkit itse eikä välitä niitä kutsutulle ohjelmalle. Jos jokerimerkit viittaavat eri ympäristöön (kuten usein esimerkiksi komennoissa [[scp]] ja [[tar]]), ne on suojattava komentotulkin tulkinnoilta, joko kenoviivalla tai [[#Lainausmerkkien käyttö|lainausmerkeillä]]: | |||
$ scp jokinkone:kopioitavat/\*.txt ~/kopioidut_tekstitiedostot | |||
$ scp "jokinkone:kopioitavat/*.txt" ~/kopioidut_tekstitiedostot | |||
== Putkitus == | == Putkitus == | ||
Putket ('' | :''Pääartikkeli: [[Putki]]'' | ||
Putket (engl. ''pipes'') ovat tapa, jolla yhden ohjelman 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: | ||
Rivi 60: | Rivi 161: | ||
||----w | | ||----w | | ||
|| || | || || | ||
Kun nämä komennot putkitetaan |-ohjausmerkillä, saadaan aikaan seuraavanlainen tulostus | Kun nämä komennot putkitetaan |-ohjausmerkillä, saadaan aikaan seuraavanlainen tulostus | ||
Rivi 73: | Rivi 173: | ||
||----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 <tt>[[ps]] aux</tt> tulosteen lessille: | Jos järjestelmässäsi ei ole asennettuna <tt>cowsay</tt>tä, voit asentaa sen [[paketinhallinta]]järjestelmästä paketista <tt>cowsay</tt>. Lisätietoja löytyy artikkelista [[Ohjelmien asentaminen]]. Jos et voi asentaa uusia ohjelmia järjestelmääsi, voit kokeilla putkitusta putkittamalla tulosteet vaikkapa [[rev]]ille, joka tulostaa putkituksella saamansa syötteen takaperin: | ||
$ uname -r | rev | |||
1r-3kc-51.6.2 | |||
|-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 (lessistä poistutaan painamalla q:ta): | |||
$ 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: | ||
Rivi 80: | Rivi 184: | ||
===Tiedostojen putkitus=== | ===Tiedostojen putkitus=== | ||
Ohjelmien tulosteiden lisäksi voi putkittaa myös tiedostoja. Esimerkiksi voit kokeilla luoda pienen tekstitiedoston, ja sitten | Ohjelmien tulosteiden lisäksi voi putkittaa myös tiedostoja. Esimerkiksi voit kokeilla luoda pienen tekstitiedoston, ja sitten suorittaa 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 | 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 <tt>tiedosto</tt> sisältö (<tt>[[cat]] tiedosto</tt>). >-merkin käyttö kirjoittaa tiedoston päälle, mutta >>-ohjausmerkkiä 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 [[komentorivikomennot|komentorivikomennoista]]). | 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]]). | ||
Vieläkin monipuolisemmat putkitukset onnistuvat nk. [[nimetty putki|nimetyn putken]] avulla. | Vieläkin monipuolisemmat putkitukset onnistuvat nk. [[nimetty putki|nimetyn putken]] avulla. Katso myös lisätietoja artikkelista [[standardivirrat]]. | ||
===Esimerkkejä=== | ===Esimerkkejä=== | ||
Rivi 97: | Rivi 203: | ||
2569 /etc/X11 | 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 | Tässä tutkitaan [[du]]-komennon avulla sitä, kuinka paljon mikäkin <tt>/etc</tt>:n [[hakemistorakenne|hakemisto]] vie tilaa. Ongelmana tässä on kuitenkin se, että hakemistot ovat oletuksena haku- eikä kokojärjestyksessä. Tämä ratkaistaan komennolla <tt>[[sort]] -nr</tt>, joka lajittelee sille annetun syötteen, eli tässä tapauksessa <tt>du</tt>:n tulosteen, numeerisesti (valitsin <tt>-n</tt>) isoimmasta pienimpään (valitsin <tt>-r</tt> kääntää tulostusjärjestyksen, joka oletuksena olisi pienimmästä isoimpaan). Lopuksi käytetään komentoa <tt>[[head]] -5</tt> näyttämään <tt>sort</tt>in tulostuksesta vain viisi ensimmäistä riviä. | ||
Toiminnallisesti sama tulos tulee myös komennolla | Toiminnallisesti sama tulos tulee myös komennolla | ||
Rivi 112: | Rivi 218: | ||
2569 /etc/X11 | 2569 /etc/X11 | ||
Kun lopuksi | Kun lopuksi poimitaan tulosteesta [[grep]]in avulla rivit, jotka sisältävät merkkijonon X11, saadaan ylläoleva tulostus. | ||
$ du /etc |sort -n |tail -5 |grep -v X11 | $ du /etc |sort -n |tail -5 |grep -v X11 | ||
Rivi 120: | Rivi 226: | ||
23281 /etc | 23281 /etc | ||
Tässä taas | Tässä taas <tt>grep</tt>ille on annettu valitsin <tt>-v</tt>, jolla määritellään <tt>grep</tt> näyttämään rivit, joihin ei sisälly annettua merkkijonoa X11. | ||
$ ls /etc |wc -l | $ ls /etc |wc -l | ||
270 | 270 | ||
Tämä puolestaan kertoo, kuinka monta tiedostoa on hakemistossa /etc ([[wc]] -l laskee syötteen rivit). | Tämä puolestaan kertoo, kuinka monta tiedostoa on hakemistossa <tt>/etc</tt> (<tt>[[wc]] -l</tt> laskee syötteen rivit). Luku ei ole tarkka, koska mukaan laskettiin myös otsikkorivi. | ||
*'''Vinkki''': <tt>du</tt>:n tulosteessa hakemistojen koot ilmoitetaan kilotavuina. Se onkin hyvä, jos hakemistojen kokoja halutaan vertailla keskenään kuten yllä. <tt>du</tt>:n saa tulostamaan myös hakemistojen koot ihmiselle luettavassa muodossa käyttäen kilo-, mega- ja gigatavuja valitsimella <tt>-h</tt>. Tällöin hakemistojen kokojen vertailuun <tt>sort</tt>illa täytyy käyttää valitsinta <tt>-h</tt>, jotta se tajuaa, että 1M on enemmän kuin 10k. | |||
== 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]] [[paketinhallinta|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]] [[paketinhallinta|paketinhallinnan]] tietokanta voidaan päivittää komennolla <tt>[[emerge]] --sync</tt> ja tämän jälkeen päivittää koko järjestelmä komennolla <tt>emerge -uDNav world</tt>. Nämä voidaan yhdistää seuraavalla tavalla: | ||
# emerge --sync && emerge -uDNav world | # 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. | Joka ensin päivittää tietokannan eli ajaa komennon <tt>emerge --sync</tt>. Mikäli se ei palauta virhettä, ajetaan jälkimmäinen päivityskomento. | ||
Toisaalta ||-ohjausmerkki toimii | Toisaalta ||-ohjausmerkki toimii päinvastoin: jälkimmäinen komento suoritetaan vain mikäli edellinen epäonnistuu, vertaa esimerkiksi: | ||
$ false || cowsay tämä näkyy koska false palauttaa virheen | $ [[false]] || cowsay tämä näkyy koska false palauttaa virheen | ||
$ true || cowsay tämä ei näy koska true palauttaa onnistumisen | $ [[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 | Komentoja voidaan yhdistellä myös puolipisteellä (;), jolloin minkäänlaista tarkistusta komennon onnistumisesta ei suoriteta. Esimerkiksi seuraavien komentojen tulosteet ovat identtiset | ||
Rivi 140: | Rivi 248: | ||
$ [[true]] ; cowthink Moi! | $ [[true]] ; cowthink Moi! | ||
== | ==Komentojen käynnistäminen taustalle== | ||
'' Katso myös artikkeli [[Tausta-ajo#Prosessien_tausta-ajo]]'' | |||
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. | [1] 12345 | ||
Käynnistää xtermin ja palauttaa käynnistetyn xterm-prosessin työnumeron (tässä 1) ja [[PID]]-luvun (tässä 12345). 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. | ||
&-merkin avulla taustalle käynnistetty ohjelma sulkeutuu, jos se komentotulkki, jossa komento ajettiin, suljetaan. Mikäli halutaan ohjelman pysyvän käynnissä komentotulkin sulkemisen jälkeenkin, on käytettävä komentoa [[nohup]]: | |||
$ nohup xterm & | |||
==Lainausmerkkien käyttö== | ==Lainausmerkkien käyttö== | ||
Lainausmerkkejä käytetään kertomaan, että niiden välissä oleva merkkijono pitää välittää kokonaisuudessaan eteenpäin tulkitsematta sen merkkejä erikseen. Lainausmerkkejä on käytössä kolmenlaisia, joista jokaisella on oma merkityksensä. | Lainausmerkkejä käytetään kertomaan, että niiden välissä oleva merkkijono pitää välittää kokonaisuudessaan eteenpäin tulkitsematta sen merkkejä erikseen. Lainausmerkkejä on käytössä kolmenlaisia, joista jokaisella on oma merkityksensä. | ||
[[wikipedia:fi:Heittomerkki|Heittomerkit]] saavat komentotulkin välittämään niiden välisen merkkijonon sinällään kutsutulle komennolle, prosessoimatta sitä millään tavalla. Esimerkiksi komento | |||
$ [[su]] -c '[[chown]] ida /home/ida -R' | $ [[su]] -c '[[chown]] ida /home/ida -R' | ||
joka suorittaa lainausmerkkien välissä olevan komennon [[pääkäyttäjä]]n oikeuksilla, johtaisi ilman lainausmerkkejä siihen, että <tt>su</tt> tulkitsisi vain merkkijonon "<tt> | joka suorittaa lainausmerkkien välissä olevan komennon [[pääkäyttäjä]]n oikeuksilla, johtaisi ilman lainausmerkkejä siihen, että <tt>su</tt> tulkitsisi vain merkkijonon "<tt>chown</tt>" <tt>-c</tt>-valitsimensa argumentiksi eli suoritettavaksi komennoksi. Loput kolme merkkijonoa tulkittaisiin <tt>su</tt>:n omiksi argumenteiksi, mikä johtaisi virheilmoitukseen. | ||
2-napista shiftin avulla saatavat tuplalainausmerkit (") poikkeavat yksinkertaisista lainausmerkeistä siinä, että komentotulkki laajentaa niiden sisältämät [[ympäristömuuttuja]]t ennen merkkijonon syöttämistä komennolle. Esimerkiksi komento | 2-napista shiftin avulla saatavat tuplalainausmerkit (") poikkeavat yksinkertaisista lainausmerkeistä siinä, että komentotulkki laajentaa niiden sisältämät [[ympäristömuuttuja]]t ennen merkkijonon syöttämistä komennolle. Esimerkiksi komento | ||
Rivi 185: | Rivi 282: | ||
Kolmas lainausmerkkityyppi ovat vasemmalle kallellaan olevat yksinkertaiset lainausmerkit, jotka saa shiftin kanssa +-näppäimen oikealla puolella olevasta napista. Ne aiheuttavat lainausmerkkien sisällä olevan komennon/merkkijonon suorittamisen ennen sen välittämistä eteenpäin. Esimerkiksi komento | Kolmas lainausmerkkityyppi ovat vasemmalle kallellaan olevat yksinkertaiset lainausmerkit, jotka saa shiftin kanssa +-näppäimen oikealla puolella olevasta napista. Ne aiheuttavat lainausmerkkien sisällä olevan komennon/merkkijonon suorittamisen ennen sen välittämistä eteenpäin. Esimerkiksi komento | ||
$ [[echo]] `[[uname]]` >appelsiini | $ [[echo]] `[[uname]]` >appelsiini | ||
loisi uuden tiedoston nimeltä appelsiini, jonka sisällöksi tulisi komennon <tt>uname</tt> tuloste eli "<tt>Linux</tt>". | loisi uuden tiedoston nimeltä appelsiini, jonka sisällöksi tulisi komennon <tt>uname</tt> tuloste eli "<tt>Linux</tt>". Nämä lainausmerkit saattavat kuitenkin sekoittua heittomerkkeihin, ja siksi kannattaakin käyttää seuraavaa rakennetta, joka tekee saman kuin ylempi. | ||
$ [[echo]] $([[uname]]) >appelsiini | |||
Lainausmerkkejä voi käyttää sisäkkäin, vaikka tässä joutuukin helposti pitämään kielen keskellä suuta. Tyypillinen käyttö on komennon tulosteen saaminen tiedostonimeen tai päinvastoin, suojaten rakennelmaa erikoismerkeiltä (välilyönti tms.). Seuraava komento luo ympäristömuuttujassa $arkisto määrätystä työhakemiston alihakemistosta tar-version, joka päivätään arkiston <tt>ChangeLog</tt>-tiedoston mukaan. Ympäristömuuttujan nimen voi halutessaan erottaa aaltosuluilla. | |||
$ arkisto="mikälie" | |||
$ tar cf "${arkisto}_$(date -r ${arkisto}/ChangeLog --rfc-3339=date).tar" "${arkisto}/" | |||
$ ls | |||
mikälie/ | |||
mikälie_2008-11-30.tar | |||
==Komentohistoria== | ==Komentohistoria== | ||
Useimmat komentotulkit tukevat komentohistoriaa, joka mahdollistaa aikaisemmin annettujen komentojen selaamisen ja uudelleensuorittamisen. Perustapa aikaisempien komentojen selaamiseen on ylös- ja alasnäppäimet. Komentohistorian alkuun voi yleensä siirtyä näppäimellä Page Up ja loppuun näppäimellä Page Down. | Useimmat komentotulkit tukevat komentohistoriaa, joka mahdollistaa aikaisemmin annettujen komentojen selaamisen ja uudelleensuorittamisen. Perustapa aikaisempien komentojen selaamiseen on ylös- ja alasnäppäimet. Komentohistorian alkuun voi yleensä siirtyä näppäimellä {{Näppäin|Page Up}} ja loppuun näppäimellä {{Näppäin|Page Down}}. | ||
Komentohistoriaan voi suorittaa hakuja näppäinyhdistelmällä Ctrl | Komentohistoriaan voi suorittaa hakuja näppäinyhdistelmällä {{Näppäin|Ctrl|R}}. Tällöin näytetään aina edellinen annetun merkkijonon sisältävä komento. Vanhempia komentoja saa näkyviin painamalla uudestaan {{Näppäin|Ctrl|R}}. Ctrl+R-hakua [[zsh]]-komentotulkissa: | ||
$ cat /var/log/crond | |||
bck-i-search: cat _ | bck-i-search: cat _ | ||
Jotta komentohistoria ei tuhoutuisi komentotulkki-istunnon sulkemisen yhteydessä, tallentavat useimmat komentotulkit sen sisällön tiettyyn tiedostoon. Yleensä tallennus tapahtuu vasta komentotulkin sulkeutuessa, mutta osa komentotulkeista on myös mahdollista säätää tekemään tallennus heti komennon antamisen jälkeen. Bashissa käytetään yleensä komentohistoriatiedostona tiedostoa ~/.bash_history. Myös tiedosto ~/.history on yleinen. | Jotta komentohistoria ei tuhoutuisi komentotulkki-istunnon sulkemisen yhteydessä, tallentavat useimmat komentotulkit sen sisällön tiettyyn tiedostoon. Yleensä tallennus tapahtuu vasta komentotulkin sulkeutuessa, mutta osa komentotulkeista on myös mahdollista säätää tekemään tallennus heti komennon antamisen jälkeen. Bashissa käytetään yleensä komentohistoriatiedostona tiedostoa <tt>~/.bash_history</tt>. Myös tiedosto <tt>~/.history</tt> on yleinen. | ||
Komentohistoria (nykyinen historia + komentohistoriatiedosto) on mahdollista tulostaa ruudulle komennolla <tt>history</tt>. Tietyn komentohistorian rivin voi suorittaa uudelleen komennolla !<rivinumero>, esimerkiksi | Komentohistoria (nykyinen historia + komentohistoriatiedosto) on mahdollista tulostaa ruudulle komennolla <tt>history</tt>. Tietyn komentohistorian rivin voi suorittaa uudelleen komennolla !<rivinumero>, esimerkiksi | ||
Rivi 202: | Rivi 307: | ||
==Näyttöhistoria== | ==Näyttöhistoria== | ||
Jo nykyisestä ruutunäkymästä kadonnutta tulostetta voi graafisissa [[terminaaliemulaattori|terminaaliemulaattoreissa]] yleensä selata normaalin vierityspalkin avulla. Tekstipohjaisissa [[virtuaalikonsoli|virtuaalikonsoleissa]] voi tulostetta selata jonkin matkaa taaksepäin näppäinyhdistelmillä Shift | Jo nykyisestä ruutunäkymästä kadonnutta tulostetta voi graafisissa [[terminaaliemulaattori|terminaaliemulaattoreissa]] yleensä selata normaalin vierityspalkin avulla. Tekstipohjaisissa [[virtuaalikonsoli|virtuaalikonsoleissa]] voi tulostetta selata jonkin matkaa taaksepäin näppäinyhdistelmillä {{Näppäin|Shift|Page Up}} ja {{Näppäin|Shift|Page Down}}. Nämä näppäinyhdistelmät toimivat myös terminaaliemulaattoreissa. | ||
Koska näyttöhistorian pituutta on yleensä myös terminaaliemulaattoreissa rajoitettu, kannattaa pitkien tiedostojen ja syötteiden selaamiseen ensisijaisesti käyttää [[less]]-ohjelmaa. Tekstin tulostus ruudulle on myös mahdollista keskeyttää Scroll Lock -näppäimellä | Koska näyttöhistorian pituutta on yleensä myös terminaaliemulaattoreissa rajoitettu, kannattaa pitkien tiedostojen ja syötteiden selaamiseen ensisijaisesti käyttää [[less]]-ohjelmaa. Tekstin tulostus ruudulle on myös mahdollista keskeyttää {{Näppäin|Scroll Lock}} -näppäimellä, mikäli haluaa tutkia pitempään jotakin tiettyä kohtaa. Tulostusta voi jatkaa painamalla uudestaan samaa näppäintä. Näppäinyhdistelmät {{Näppäin|Ctrl|S}} ja {{Näppäin|Ctrl|Q}} toimivat samalla tavalla. | ||
==Ympäristömuuttujat== | ==Ympäristömuuttujat== | ||
Rivi 234: | Rivi 339: | ||
==Ajonaikainen ohjeistus== | ==Ajonaikainen ohjeistus== | ||
Usein on ongelmana, ettei tiedä miten jotakin tiettyä komentoa käytetään tai mikä on jonkin komennon tehtävä. Tätä ongelmaa ratkaisemaan on tarjolla monenlaista ohjeistusta. Ensinnäkin ohjelmat itse sisältävät yleensä lyhyen käyttöohjeen, jonka saa näkyviin valitsimella -h, --help tai joskus myös -help. Esimerkiksi [[cat]]-komennon ohje aukeaa komennolla | Usein on ongelmana, ettei tiedä miten jotakin tiettyä komentoa käytetään tai mikä on jonkin komennon tehtävä. Tätä ongelmaa ratkaisemaan on tarjolla monenlaista [[dokumentaatio|ohjeistusta]]. Ensinnäkin ohjelmat itse sisältävät yleensä lyhyen käyttöohjeen, jonka saa näkyviin valitsimella -h, --help tai joskus myös -help. Esimerkiksi [[cat]]-komennon ohje aukeaa komennolla | ||
$ cat --help | $ cat --help | ||
Laajempiin ohjesivuihin pääsee käsiksi komennolla [[man]], esimerkiksi | Laajempiin ohjesivuihin pääsee käsiksi komennolla [[man]], esimerkiksi | ||
Rivi 250: | Rivi 355: | ||
Komentorivin toimintaan voi vaikuttaa muokkaamalla komentotulkin [[asetustiedosto]]ja. Yleisin komentotulkin asetustiedoston muoto on suoritettava komentojono (vrt. [[MS-DOS|DOSin]] autoexec.bat) joka toimii pitkälti kuten tavallinen komentotulkkiskripti. Tällaiseen tiedostoon lisätyt komennot ajetaan aina esimerkiksi komentotulkin käynnistyessä. | Komentorivin toimintaan voi vaikuttaa muokkaamalla komentotulkin [[asetustiedosto]]ja. Yleisin komentotulkin asetustiedoston muoto on suoritettava komentojono (vrt. [[MS-DOS|DOSin]] autoexec.bat) joka toimii pitkälti kuten tavallinen komentotulkkiskripti. Tällaiseen tiedostoon lisätyt komennot ajetaan aina esimerkiksi komentotulkin käynnistyessä. | ||
Kuten muitakin asetustiedostoja, komentotulkin asetustiedostoja on yleensä kahdenlaisia, järjestelmänlaajuisia, /etc-hakemistossa sijaitsevia tiedostoja (esimerkiksi /etc/bashrc) sekä käyttäjäkohtaisia, käyttäjän kotihakemistossa sijaitsevia (piilo)tiedostoja (esimerkiksi ~/.bashrc). Järjestelmänlaajuinen asetustiedosto ajetaan yleensä ennen käyttäjäkohtaista, jolloin käyttäjälle jää "viimeinen sana" komentotulkkinsa asetuksiin. | Kuten muitakin asetustiedostoja, komentotulkin asetustiedostoja on yleensä kahdenlaisia, järjestelmänlaajuisia, /etc-hakemistossa sijaitsevia tiedostoja (esimerkiksi <tt>/etc/bashrc</tt>) sekä käyttäjäkohtaisia, käyttäjän kotihakemistossa sijaitsevia (piilo)tiedostoja (esimerkiksi <tt>~/.bashrc</tt>). Järjestelmänlaajuinen asetustiedosto ajetaan yleensä ennen käyttäjäkohtaista, jolloin käyttäjälle jää "viimeinen sana" komentotulkkinsa asetuksiin. | ||
Bashin toimintaan vaikuttavat asetustiedostot ovat: | Bashin toimintaan vaikuttavat asetustiedostot ovat: | ||
*/etc/profile ja ~/.profile - järjestelmän laajuinen komentojono, joka ajetaan kaikkien kirjautumiskomentotulkki-istuntojen aluksi. Kirjautumiskomentotulkilla tarkoitetaan istuntoa, johon käyttäjä on siirtynyt tekstipohjaisen kirjautumisen jälkeen. | *<tt>/etc/profile</tt> ja <tt>~/.profile</tt> - järjestelmän laajuinen komentojono, joka ajetaan kaikkien kirjautumiskomentotulkki-istuntojen aluksi. Kirjautumiskomentotulkilla tarkoitetaan istuntoa, johon käyttäjä on siirtynyt tekstipohjaisen kirjautumisen jälkeen. | ||
*/etc/[[bash_profile]] ja ~/bash_profile - Bashin oma profile-tiedosto. | *<tt>/etc/[[bash_profile]]</tt> ja <tt>~/bash_profile</tt> - Bashin oma profile-tiedosto. | ||
*/etc/[[bashrc]] ja ~/.bashrc - Ajetaan kaikkien interaktiivisten komentotulkki-istuntojen aluksi, eli aina, kun Bash käynnistetään jotain muuta kuin skriptin ajamista varten. Ylivoimaisesti käytetyin komentojonotiedosto. | *<tt>/etc/[[bashrc]]</tt> ja <tt>~/.bashrc</tt> - Ajetaan kaikkien interaktiivisten komentotulkki-istuntojen aluksi, eli aina, kun Bash käynnistetään jotain muuta kuin skriptin ajamista varten. Ylivoimaisesti käytetyin komentojonotiedosto. | ||
*/etc/[[bash_logout]] ja ~/.bash_logout - Bashin sulkemisen yhteydessä ajettava komentojono | *<tt>/etc/[[bash_logout]]</tt> ja <tt>~/.bash_logout</tt> - Bashin sulkemisen yhteydessä ajettava komentojono | ||
*/etc/[[inputrc]] ja ~/.inputrc - Bashin komentorivieditoinnista huolehtivan [[readline]]-[[kirjasto]]n asetustiedosto | *<tt>/etc/[[inputrc]]</tt> ja <tt>~/.inputrc</tt> - Bashin komentorivieditoinnista huolehtivan [[readline]]-[[kirjasto]]n asetustiedosto | ||
Zsh-komentotulkin asetustiedostoja on selitetty laajasti artikkelissa [[Zsh]]. | Zsh-komentotulkin asetustiedostoja on selitetty laajasti artikkelissa [[Zsh]]. | ||
Rivi 271: | Rivi 376: | ||
==Aiheesta muualla== | ==Aiheesta muualla== | ||
*[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. | ||
*[http://fi-new.flossmanuals.net/komentorivin-perusteet/index Komentorivin perusteet] - GNU/Linuxin komentorivin perusteet suomenkielisessä FLOSS Manualsissa. {{vanhentunut linkki}} | |||
[[Luokka:Ohjeet]] | [[Luokka:Ohjeet]] | ||
[[Luokka:Komentorivi]] | [[Luokka:Komentorivi]] |
Nykyinen versio 16. huhtikuuta 2022 kello 11.23
Komentorivi on yksi Linux-järjestelmän tehokkaimmista työkaluista, joka voi olla Windows-maailmasta Linuxiin siirtyneelle outo. Windowsissa komentotulkki on varsin rajoittunut ja kömpelö, eikä sitä useinkaan käytetä juuri mihinkään. Linuxissa komentoriviltä hoituvat lähes kaikki mahdolliset tehtävät, usein jopa kätevämmin kuin graafisia työkaluja käyttäen.
Windowsin komentoriviin tai DOS:iin tottuneiden kannattaa huomioida varsinkin jokerimerkkien erilainen logiikka ja se, etteivät Unix-komennot juurikaan kysele varmistuksia tai kerro tekemisistään, vaan tekevät ilman kommentteja sen mitä pyydettiin.
Miten komentoriville pääsee?[muokkaa]
Useimmat käyttävät Linuxia graafisessa ympäristössä (X), jolloin luontevin tapa komentoriville pääsyyn on käyttää jotakin terminaaliemulaattoria. Yleisimpiä terminaaliemulaattoreita ovat X:n perustyökaluihin kuuluva xterm, KDE:n Konsole sekä GNOMEn GNOME Terminal. Nämä löytyvät yleensä työpöytäympäristön valikosta esimerkiksi nimellä pääte, terminaali tai komentorivi. On myös mahdollista käyttää järjestelmän tekstipohjaisia virtuaalikonsoleja (yleensä numeroiltaan 1-6). Näihin pääsee graafisesta ympäristöstä näppäinyhdistelmällä Ctrl+Alt+<funktionäppäin> (esimerkiksi Ctrl+Alt+F1). Tekstitilassa voi virtuaalikonsolista toiseen siirtyä myös näppäinyhdistelmällä Alt+<funktionäppäin> tai Alt+sivunuolinäppäin. X toimii yleensä virtuaalikonsolissa 7, joten takaisin sinne voi siirtyä näppäinyhdistelmällä Alt+F7.
Jotkut jakelut tarjoavat mahdollisuuden käynnistää koneen vikasieto- tai korjaustilassa, joka käynnistyy suoraan komentoriville. Näin on mahdollista tehdä järjestelmään korjauksia vaikka graafinen ympäristö ei toimisikaan.
Komentotulkki[muokkaa]
Komentotulkki (engl. shell) on ohjelma, joka hoitaa komentoriviltä annettujen komentojen suorittamisen. Komentotulkkeja on useita, mutta peruskäytössä ne toimivat suurin piirtein samalla tavalla. Lähes jokaisessa jakelussa oletuksena on käytössä Bash tai jokin Bash-yhteensopiva komentotulkki, joten esimerkeissä käytetään sitä.
Seuraavissa ohjeissa dollarimerkki ($) tarkoittaa, että komento syötetään tavallisena käyttäjänä ja risuaita (#) sitä, että toimitaan pääkäyttäjänä. Tämä on yleinen merkintätapa jota käytetään muuallakin tässä wikissä ja yleisesti muissakin ohjeissa. Jos rivin alussa ei ole kumpaakaan näistä merkeistä, se tarkoittaa komennon tulostetta.
Komentorivin pikanäppäimet[muokkaa]
Vaikka komentorivillä on mahdollista liikkua ← , → , HOME sekä END-näppäimillä, käytettävissä on myös pikanäppäimiä, jotka toimivat komentotulkista riippumatta.
- CTRL+A - Siirtää kohdistimen rivin alkuun.
- CTRL+E - Siirtää kohdistimen rivin loppuun.
- CTRL+B - Siirtää kohdistimen yhden taaksepäin
- CTRL+F - Siirtää kohdistimen yhden eteenpäin
- ALT+B - Siirtää kohdistimen edeltävään aakkosnumerisen merkkiin
- ALT+F - Siirtää kohdistimen seuraavan aakkosnumerisen merkin jälkeen
- CTRL+U - Poistaa kohdistita edeltävän sisällön.
- CTRL+K - Poistaa kohdistimen sekä sen jälkeisen sisällön.
- CTRL+W - Poistaa kohdistita edeltävään aakkosnumeriseen merkkiin asti sisällön.
- ALT+D - Poistaa kohdistimen sekä sen jälkeisen sisällön seuraavaan aakkosnumeriseen merkkiin asti.
Hakemistorakenteessa liikkuminen[muokkaa]
Hakemistorakenteessa liikkuminen hoituu suurimmaksi osaksi komennolla cd. Linuxin hakemistorakenne lähtee juurihakemistosta /, jonka alta löytyy monia eri hakemistoja. Hakemistopolku voidaan kirjoittaa täydellisenä juurihakemistosta lähtien (esimerkiksi /home/masa/asiakirjat) tai suhteessa nykyiseen hakemistoon (esimerkiksi ./tässä_hakemistossa_oleva_tiedosto). Lisätietoja hakemistorakenteesta löytyy artikkelista Linuxin hakemistorakenne.
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 muokkauspä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 tiedoston linkkien eli nimien lukumäärän (yleensä yksi muille kuin 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. Huomaa että hakemistojen kohdalla näkyvä koko ei kerro hakemiston sisältämien tiedostojen yhteiskokoa.
- Vinkki: Saat ls:n tulosteessa olevat tiedoston koot helpommin hahmotettavaan muotoon käyttäen lisäksi valitsinta h (ls -lh). Tällöin tiedostojen koot näytetään käyttäen sopivinta etuliitettä (tavuina tai kilo-, mega-, giga- tai teratavuina).
- Vinkki: Aaltomerkki eli ~ on alias kotihakemistolle. Eli ls ~/Työpöytä (tai ~/Desktop, jos käytössä on englanninkielinen nimi) listaa työpöytäsi sisällön riippumatta nykyisestä työhakemistostasi. ~ville viittaa vastaavasti käyttäjän "ville" kotihakemistoon ja ~ville/Työpöytä hänen työpöytänsä sisältöön (toki hän on saattanut estää sinua lukemasta sitä).
Komentojen suorittaminen[muokkaa]
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 ~/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
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 polulla suhteessa työhakemistoon (esim. imuroitua/hienosofta.bin). Mikäli kyseinen ohjelma on hakemistossa, johon on jo siirrytty, suhteellinen polku ilmaistaan lisäämällä tiedostonimen eteen ./. Tässä piste viittaa siis nykyiseen hakemistoon. Ohjelmia ajaessasi huomaa, 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 tildellä: ~/ohjelma suorittaisi myös tämän ohjelman.
- Vinkki: Kotihakemistoon voi siirtyä suoraan komennolla cd (hakemistoa ei siis tarvitse antaa)
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. Lisätietoja taustalla ajettavista ohjelmista löytyy artikkelista tausta-ajo.
Eri komentoriviohjelmia on listattu ja esitelty sivulla komentorivikomennot.
Tiedostojen ja hakemistojen kopioiminen, siirtäminen ja poistaminen[muokkaa]
Tavallisimmat tiedosto-operaatiot hoituvat komennoilla cp (kopiointi), mv (siirtäminen) ja rm (poistaminen).
Tiedosto kopioidaan komennolla
$ cp tiedosto kopio
Kokonainen hakemisto kopioitaessa on käytettävä valitsinta -R:
$ cp -R hakemisto hakemiston_kopio
Vastaavasti tiedostojen siirtäminen tapahtuu komennolla
$ mv vanha_tiedostonimi uusi_tiedostonimi
samalla tavalla voi siirtää myös hakemistoja.
Tiedostojen poistaminen taas tapahtuu komennolla
$ rm tiedosto toinen_tiedosto "kolmas tiedosto"
Poistettavia tiedostoja voidaan siis antaa kerralla useampia. Hakemisto sisältöineen poistetaan valitsimen -r avulla ("rekursiivisesti"; tyhjän hakemiston voi poistaa myös komennolla rmdir).
$ rm -r hakemisto $ rmdir tyhjä_hakemisto
Uusia hakemistoja voi luoda komennolla mkdir:
$ mkdir hakemisto
Kerralla on mahdollista luoda useampia hakemistoja luettelemalla ne peräkkäin välilyönnillä erotettuna. Lisäksi kokonaisen hakemistopolun voi luoda kerralla käyttämällä valitsinta -p:
$ mkdir -p kuvat/2009/heinakuu
loisi hakemistoon kuvat/2009 hakemiston heinakuu ja mikäli hakemistoa kuvat tai sen alihakemistoa 2009 ei ole olemassa, myös ne luodaan.
Täydentäminen tabulaattorilla[muokkaa]
Tabulaattorin painelu on keino täydentää komentojen, hakemistojen ja tiedostojen nimiä komentoriville kirjoittamalla vain nimen alku ja painamalla sitten tabulaattoria (Tab ⇆).
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 (asetuksista riippuen kone saattaa piipata). Kun tabulaattoria painetaan toisen kerran, tulee näkyviin listaus kaikista vaihtoehdoista, tässä tapauksessa siis hakemistojen "pelit" ja "pikkupelit" nimet.
Eräät komentotulkit (mm. bash) tukevat myös esimerkiksi etäkoneiden nimien, käyttäjänimien, prosessinumeroiden sekä komentojen valitsimien täydennystä tabulaattorin avulla. Ominaisuus ei välttämättä ole oletuksena käytössä kaikissa jakeluissa.
Mm. zsh- ja tcsh-komentotulkeissa on mahdollista myös nk. oikoluku, eli väärin kirjoitettujen komentojen tab-täydennys oikeiksi. Esimerkiksi komento mpllayr voitaisiin tällöin täydentää komennoksi mplayer.
Vaaditut lisäpaketit[muokkaa]
- Arch Linuxissa bash-komentotulkki tarvitsee bash-completion-paketin tätä ominaisuutta varten.
Jokerimerkit[muokkaa]
Tiedostoihin ja hakemistoihin voidaan niiden kokonaisen nimen lisäksi viitata myös käyttäen jokerimerkkejä * ja ?. Tähti (*) tarkoittaa sitä, että sen tilalla saa olla mitä tahansa merkkejä.
Jos siis edellisessä esimerkissä kirjoittaisimme komennon
$ rm -r *pelit
poistuisivat hakemistot pelit ja pikkupelit sisältöineen, koska ne loppuvat "pelit". Vastaavasti kaikkiin ".testi"-päätteisiin tiedostoihin ja hakemistoihin viitattaisiin merkinnällä *.testi ja kaikkiin tiedostoihin/hakemistoihin, joiden nimessä esiintyy jossain kohtaa sana "linux" (pienillä kirjaimilla) merkinnällä *linux*.
Toinen jokerimerkki on kysymysmerkki (?), joka viittaa mihin tahansa yhteen kirjaimeen (ääkkösten yms. osalta "kirjain" saattaa määräytyä eri tavoilla). Esimerkiksi merkintä a? vastaisi mm. merkintöjä aa, ab, ac,..., mutta ei merkintää aaa. Esimerkiksi voisimme poistaa kaikki kolmesta merkistä koostuvat tiedostot komennolla
$ rm ???
(tämän sijaan kannattaa usein käyttää muotoa rm -i ???, joka pyytää varmistuksen joka tiedoston osalta)
Klassinen "ansa" on se, että .* tavallisten piilotiedostojen lisäksi viittaa myös hakemistoihin . ja .., joten rm -r .* ei poista pelkästään kaikkia piilotiedostoja ja -piilohakemistoja vaan myös nykyisen työhakemiston ylähakemiston kaikkine alihakemistoineen. Tämän sijaan voi käyttää toista rakennetta, jolla määrätään että toisen merkin on oltava kirjain (tässä ASCII-kirjain):
$ rm .[a-zA-Z]*
Toinen ansa on se, että ylimääräinen välilyönti voi aiheuttaa ikäviä yllätyksiä (erityisesti tiedostoja automaattisesti käsiteltäessä). Tässä poistetaan sekä .?-tyyliset piilotiedostot että kaikki tavalliset tiedostot:
$ rm .[a-z] *
DOS:sta poiketen komentotulkki tulkitsee jokerimerkit itse eikä välitä niitä kutsutulle ohjelmalle. Jos jokerimerkit viittaavat eri ympäristöön (kuten usein esimerkiksi komennoissa scp ja tar), ne on suojattava komentotulkin tulkinnoilta, joko kenoviivalla tai lainausmerkeillä:
$ scp jokinkone:kopioitavat/\*.txt ~/kopioidut_tekstitiedostot $ scp "jokinkone:kopioitavat/*.txt" ~/kopioidut_tekstitiedostot
Putkitus[muokkaa]
- Pääartikkeli: Putki
Putket (engl. pipes) ovat tapa, jolla yhden ohjelman 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 | || ||
Jos järjestelmässäsi ei ole asennettuna cowsaytä, voit asentaa sen paketinhallintajärjestelmästä paketista cowsay. Lisätietoja löytyy artikkelista Ohjelmien asentaminen. Jos et voi asentaa uusia ohjelmia järjestelmääsi, voit kokeilla putkitusta putkittamalla tulosteet vaikkapa reville, joka tulostaa putkituksella saamansa syötteen takaperin:
$ uname -r | rev 1r-3kc-51.6.2
|-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 (lessistä poistutaan painamalla q:ta):
$ 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[muokkaa]
Ohjelmien tulosteiden lisäksi voi putkittaa myös tiedostoja. Esimerkiksi voit kokeilla luoda pienen tekstitiedoston, ja sitten suorittaa 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 >>-ohjausmerkkiä 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).
Vieläkin monipuolisemmat putkitukset onnistuvat nk. nimetyn putken avulla. Katso myös lisätietoja artikkelista standardivirrat.
Esimerkkejä[muokkaa]
$ 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 poimitaan tulosteesta grepin avulla rivit, 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 rivit, joihin ei sisälly annettua merkkijonoa X11.
$ ls /etc |wc -l 270
Tämä puolestaan kertoo, kuinka monta tiedostoa on hakemistossa /etc (wc -l laskee syötteen rivit). Luku ei ole tarkka, koska mukaan laskettiin myös otsikkorivi.
- Vinkki: du:n tulosteessa hakemistojen koot ilmoitetaan kilotavuina. Se onkin hyvä, jos hakemistojen kokoja halutaan vertailla keskenään kuten yllä. du:n saa tulostamaan myös hakemistojen koot ihmiselle luettavassa muodossa käyttäen kilo-, mega- ja gigatavuja valitsimella -h. Tällöin hakemistojen kokojen vertailuun sortilla täytyy käyttää valitsinta -h, jotta se tajuaa, että 1M on enemmän kuin 10k.
Komentojen ketjutus[muokkaa]
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äinvastoin: 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!
Komentojen käynnistäminen taustalle[muokkaa]
Katso myös artikkeli Tausta-ajo#Prosessien_tausta-ajo
Voit käynnistää komennon pyörimään taustalle laittamalla &-merkin komennon perään. Esimerkki:
$ xterm & [1] 12345
Käynnistää xtermin ja palauttaa käynnistetyn xterm-prosessin työnumeron (tässä 1) ja PID-luvun (tässä 12345). 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.
&-merkin avulla taustalle käynnistetty ohjelma sulkeutuu, jos se komentotulkki, jossa komento ajettiin, suljetaan. Mikäli halutaan ohjelman pysyvän käynnissä komentotulkin sulkemisen jälkeenkin, on käytettävä komentoa nohup:
$ nohup xterm &
Lainausmerkkien käyttö[muokkaa]
Lainausmerkkejä käytetään kertomaan, että niiden välissä oleva merkkijono pitää välittää kokonaisuudessaan eteenpäin tulkitsematta sen merkkejä erikseen. Lainausmerkkejä on käytössä kolmenlaisia, joista jokaisella on oma merkityksensä.
Heittomerkit saavat komentotulkin välittämään niiden välisen merkkijonon sinällään kutsutulle komennolle, prosessoimatta sitä millään tavalla. Esimerkiksi komento
$ su -c 'chown ida /home/ida -R'
joka suorittaa lainausmerkkien välissä olevan komennon pääkäyttäjän oikeuksilla, johtaisi ilman lainausmerkkejä siihen, että su tulkitsisi vain merkkijonon "chown" -c-valitsimensa argumentiksi eli suoritettavaksi komennoksi. Loput kolme merkkijonoa tulkittaisiin su:n omiksi argumenteiksi, mikä johtaisi virheilmoitukseen.
2-napista shiftin avulla saatavat tuplalainausmerkit (") poikkeavat yksinkertaisista lainausmerkeistä siinä, että komentotulkki laajentaa niiden sisältämät ympäristömuuttujat ennen merkkijonon syöttämistä komennolle. Esimerkiksi komento
$ echo "$EDITOR on paras"
tulostaisi (esimerkiksi)
emacs on paras
kun taas komento
$ echo '$EDITOR on paras'
tulostaa
$EDITOR on paras
Yleensä ei ole merkitystä, kummanlaisia lainausmerkkejä käyttää, mutta niiden ero on kuitenkin hyvä tiedostaa.
Kolmas lainausmerkkityyppi ovat vasemmalle kallellaan olevat yksinkertaiset lainausmerkit, jotka saa shiftin kanssa +-näppäimen oikealla puolella olevasta napista. Ne aiheuttavat lainausmerkkien sisällä olevan komennon/merkkijonon suorittamisen ennen sen välittämistä eteenpäin. Esimerkiksi komento
$ echo `uname` >appelsiini
loisi uuden tiedoston nimeltä appelsiini, jonka sisällöksi tulisi komennon uname tuloste eli "Linux". Nämä lainausmerkit saattavat kuitenkin sekoittua heittomerkkeihin, ja siksi kannattaakin käyttää seuraavaa rakennetta, joka tekee saman kuin ylempi.
$ echo $(uname) >appelsiini
Lainausmerkkejä voi käyttää sisäkkäin, vaikka tässä joutuukin helposti pitämään kielen keskellä suuta. Tyypillinen käyttö on komennon tulosteen saaminen tiedostonimeen tai päinvastoin, suojaten rakennelmaa erikoismerkeiltä (välilyönti tms.). Seuraava komento luo ympäristömuuttujassa $arkisto määrätystä työhakemiston alihakemistosta tar-version, joka päivätään arkiston ChangeLog-tiedoston mukaan. Ympäristömuuttujan nimen voi halutessaan erottaa aaltosuluilla.
$ arkisto="mikälie" $ tar cf "${arkisto}_$(date -r ${arkisto}/ChangeLog --rfc-3339=date).tar" "${arkisto}/" $ ls mikälie/ mikälie_2008-11-30.tar
Komentohistoria[muokkaa]
Useimmat komentotulkit tukevat komentohistoriaa, joka mahdollistaa aikaisemmin annettujen komentojen selaamisen ja uudelleensuorittamisen. Perustapa aikaisempien komentojen selaamiseen on ylös- ja alasnäppäimet. Komentohistorian alkuun voi yleensä siirtyä näppäimellä Page Up ja loppuun näppäimellä Page Down.
Komentohistoriaan voi suorittaa hakuja näppäinyhdistelmällä Ctrl+R. Tällöin näytetään aina edellinen annetun merkkijonon sisältävä komento. Vanhempia komentoja saa näkyviin painamalla uudestaan Ctrl+R. Ctrl+R-hakua zsh-komentotulkissa:
$ cat /var/log/crond bck-i-search: cat _
Jotta komentohistoria ei tuhoutuisi komentotulkki-istunnon sulkemisen yhteydessä, tallentavat useimmat komentotulkit sen sisällön tiettyyn tiedostoon. Yleensä tallennus tapahtuu vasta komentotulkin sulkeutuessa, mutta osa komentotulkeista on myös mahdollista säätää tekemään tallennus heti komennon antamisen jälkeen. Bashissa käytetään yleensä komentohistoriatiedostona tiedostoa ~/.bash_history. Myös tiedosto ~/.history on yleinen.
Komentohistoria (nykyinen historia + komentohistoriatiedosto) on mahdollista tulostaa ruudulle komennolla history. Tietyn komentohistorian rivin voi suorittaa uudelleen komennolla !<rivinumero>, esimerkiksi
$ !15256
suorittaisi rivin numero 15256.
Historiatiedoston maksimikokoa säädellään ympäristömuuttujalla $HISTSIZE, jonka oletusarvona bashissa on 500. Usein $HISTSIZE on kuitenkin järkevää säätää äärettömäksi (esimerkiksi arvoon 9999999999), mikä auttaa Ctrl+R-hakujen suorittamista. Nykyisillä koneilla ei historiatiedoston koko yleensä myöskään muodostu ongelmaksi.
Näyttöhistoria[muokkaa]
Jo nykyisestä ruutunäkymästä kadonnutta tulostetta voi graafisissa terminaaliemulaattoreissa yleensä selata normaalin vierityspalkin avulla. Tekstipohjaisissa virtuaalikonsoleissa voi tulostetta selata jonkin matkaa taaksepäin näppäinyhdistelmillä ⇧ Shift+Page Up ja ⇧ Shift+Page Down. Nämä näppäinyhdistelmät toimivat myös terminaaliemulaattoreissa.
Koska näyttöhistorian pituutta on yleensä myös terminaaliemulaattoreissa rajoitettu, kannattaa pitkien tiedostojen ja syötteiden selaamiseen ensisijaisesti käyttää less-ohjelmaa. Tekstin tulostus ruudulle on myös mahdollista keskeyttää Scroll Lock -näppäimellä, mikäli haluaa tutkia pitempään jotakin tiettyä kohtaa. Tulostusta voi jatkaa painamalla uudestaan samaa näppäintä. Näppäinyhdistelmät Ctrl+S ja Ctrl+Q toimivat samalla tavalla.
Ympäristömuuttujat[muokkaa]
Ympäristömuuttujat ovat prosesseille (eli ohjelmille) annettavia eräänlaisia asetuslippuja. Komentoriviympäristön toimintaa säädellään pitkälti ympäristömuuttujien avulla. Ympäristömuuttujaan viitatessa käytetään sen nimen alussa $-merkkiä. Ympäristömuuttujien nimissä on tapana käyttää vain isoja kirjaimia. Yleisiä ympäristömuuttujia ovat mm.
- $COLUMNS - pääteikkunan leveys merkkeinä
- $DISPLAY - X:n DISPLAY-asetus
- $EDITOR - oletustekstieditori
- $HISTFILE - käytettävä historiatiedosto
- $HISTSIZE - historiatiedoston maksimipituus
- $HOME - käyttäjän kotihakemisto
- $LANG - kieliasetus, esimerkiksi fi_FI.utf-8
- $LINES - pääteikkunan korkeus riveinä
- $MAIL - käyttäjän paikallisen sähköpostilaatikon sijainti
- $MANPATH - man-sivujen sijainti
- $OLDPWD - edellinen työhakemisto (vrt. komento cd -)
- $PATH - komentojen oletuspolku
- $PWD - nykyinen työhakemisto
- $SHELL - käytettävä komentotulkki
- $TERM - käytettävä pääte- eli terminaalityyppi
- $USER - käyttäjänimi
- $VISUAL - oletustekstieditori
Kaikki asetetut ympäristömuuttujat voi tulostaa komennolla env. Ympäristömuuttujien arvoja voi sh-sukuisissa komentotulkeissa (mm. Bash ja Zsh) asettaa komennolla export ja Csh-sukuisissa (mm. Tcsh) komennolla setenv. Esimerkki:
$ export EDITOR="emacs"
Komentotulkkiympäristössä on mahdollista käyttää myös ns. tavallisia muuttujia, jotka toimivat vain yhden prosessin sisällä. Toisin kuin ympäristömuuttujat, tavallinen muuttuja ei siis komentorivillä määriteltynä periydy siltä käynnistetyille prosesseille eikä myöskään näy env-komennon tulosteessa.
Tavallinen muuttuja määritellään komennolla MUUTTUJANNIMI=arvo, esimerkiksi
$ FOO=bar
Ajonaikainen ohjeistus[muokkaa]
Usein on ongelmana, ettei tiedä miten jotakin tiettyä komentoa käytetään tai mikä on jonkin komennon tehtävä. Tätä ongelmaa ratkaisemaan on tarjolla monenlaista ohjeistusta. Ensinnäkin ohjelmat itse sisältävät yleensä lyhyen käyttöohjeen, jonka saa näkyviin valitsimella -h, --help tai joskus myös -help. Esimerkiksi cat-komennon ohje aukeaa komennolla
$ cat --help
Laajempiin ohjesivuihin pääsee käsiksi komennolla man, esimerkiksi
$ man sudo
Man-sivuilla on aina selitetty vähintään ohjelman käyttötarkoitus ja selostettu eri valitsinten käyttö. Osa man-sivuista tarjoaa hyvinkin laajaa opastusta. Komentojen opiskelua man-sivujen avulla haittaa toisaalta se, että useimmilla man-sivuilla ei ole esimerkkejä ohjelman käytöstä. Varsinaisia ohjelmia käsittelevien man-sivujen lisäksi on olemassa myös mm. asetustiedostoja ja eri ohjelmointikielten funktioita käsitteleviä man-sivuja.
Erityisesti GNU-projektin tuottamista ohjelmista on olemassa myös ns. info-sivuja, jotka tarjoavat laajempaa ohjeistusta ja yleensä myös esimerkkejä. Info-sivut tukevat myös sivujen välisiä hyperlinkkejä.
Whatis-ohjelmaa käyttäen voidaan luoda man-sivujen sisältämistä lyhyistä kuvauksista tietokanta, jolloin komentoa whatis käyttäen voidaan nopeasti tarkistaa ohjelmien käyttötarkoitus, esimerkiksi
$ whatis ls ls (1) - list directory contents
Komennolla apropos voidaan tehdä hakuja näihin lyhyisiin kuvauksiin, mistä on joskus apua, kun ei tiedetä, mikä komento voisi suorittaa jonkin tietyn tehtävän.
Komentotulkkien asetustiedostot[muokkaa]
Komentorivin toimintaan voi vaikuttaa muokkaamalla komentotulkin asetustiedostoja. Yleisin komentotulkin asetustiedoston muoto on suoritettava komentojono (vrt. DOSin autoexec.bat) joka toimii pitkälti kuten tavallinen komentotulkkiskripti. Tällaiseen tiedostoon lisätyt komennot ajetaan aina esimerkiksi komentotulkin käynnistyessä.
Kuten muitakin asetustiedostoja, komentotulkin asetustiedostoja on yleensä kahdenlaisia, järjestelmänlaajuisia, /etc-hakemistossa sijaitsevia tiedostoja (esimerkiksi /etc/bashrc) sekä käyttäjäkohtaisia, käyttäjän kotihakemistossa sijaitsevia (piilo)tiedostoja (esimerkiksi ~/.bashrc). Järjestelmänlaajuinen asetustiedosto ajetaan yleensä ennen käyttäjäkohtaista, jolloin käyttäjälle jää "viimeinen sana" komentotulkkinsa asetuksiin.
Bashin toimintaan vaikuttavat asetustiedostot ovat:
- /etc/profile ja ~/.profile - järjestelmän laajuinen komentojono, joka ajetaan kaikkien kirjautumiskomentotulkki-istuntojen aluksi. Kirjautumiskomentotulkilla tarkoitetaan istuntoa, johon käyttäjä on siirtynyt tekstipohjaisen kirjautumisen jälkeen.
- /etc/bash_profile ja ~/bash_profile - Bashin oma profile-tiedosto.
- /etc/bashrc ja ~/.bashrc - Ajetaan kaikkien interaktiivisten komentotulkki-istuntojen aluksi, eli aina, kun Bash käynnistetään jotain muuta kuin skriptin ajamista varten. Ylivoimaisesti käytetyin komentojonotiedosto.
- /etc/bash_logout ja ~/.bash_logout - Bashin sulkemisen yhteydessä ajettava komentojono
- /etc/inputrc ja ~/.inputrc - Bashin komentorivieditoinnista huolehtivan readline-kirjaston asetustiedosto
Zsh-komentotulkin asetustiedostoja on selitetty laajasti artikkelissa Zsh.
Katso myös[muokkaa]
- Komentorivikomennot
- Komentorivivinkkejä
- Komentorivin perustyökalut
- Komentorivin erikoisohjelmat
- Bash-skriptaus
- Bashin ulkoasu
- Standardivirrat
Aiheesta muualla[muokkaa]
- LinuxCommand.org – Aloittelijoille suunnattu kattava ja helppotajuinen englanninkielinen opetussivusto komentorivin käytöstä ja shell-skriptien kirjoituksesta.
- Komentorivin perusteet - GNU/Linuxin komentorivin perusteet suomenkielisessä FLOSS Manualsissa. [vanhentunut linkki]