Ero sivun ”Komentorivin perusteet” versioiden välillä

Siirry navigaatioon Siirry hakuun
3 927 merkkiä lisätty ,  16. huhtikuuta 2022
(→‎Jokerimerkit: testi -> .testi, ettei protesti joudu mukaan)
Merkkaukset: Mobiilimuokkaus mobiilisivusto-muokkaus
 
(35 välissä olevaa versiota 15 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
[[Komentorivi]] on yksi 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 useinkaan käytetä juuri mihinkään. Linuxissa komentoriviltä hoituvat lähes kaikki mahdolliset tehtävät jopa kätevämmin kuin graafisia työkaluja käyttäen.
[[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.
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 [[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ä 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.
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.
Rivi 12: Rivi 13:


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.
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 ==
Rivi 31: Rivi 49:
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.
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 järkevämpään 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''': 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 ==
Rivi 41: Rivi 61:
  /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. <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:
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
Rivi 53: Rivi 73:
Eri komentoriviohjelmia on listattu ja esitelty sivulla [[komentorivikomennot]].
Eri komentoriviohjelmia on listattu ja esitelty sivulla [[komentorivikomennot]].


== Tiedostojen kopioiminen, siirtäminen ja poistaminen ==
== 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).
Tavallisimmat tiedosto-operaatiot hoituvat komennoilla <tt>[[cp]]</tt> (kopiointi), <tt>[[mv]]</tt> (siirtäminen) ja <tt>[[rm]]</tt> (poistaminen).


Rivi 70: Rivi 90:
  $ rm -r hakemisto
  $ rm -r hakemisto
  $ rmdir tyhjä_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 ==
== Täydentäminen tabulaattorilla ==
Tabulaattorin painelu on keino täydentää komentojen, hakemistojen ja tiedostojen nimiä komentoriville kirjoittamalla vain nimen alku ja painamalla sitten tabulaattoria.
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:
Esimerkiksi mikäli hakemistossa olisi seuraavat alihakemistot:
Rivi 86: Rivi 112:
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.
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, vaikka toiminnallisuus ei ole oletuksena kytkettynä) tukevat myös esimerkiksi etäkoneiden nimien, käyttäjänimien, [[PID|prosessinumeroiden]] sekä komentojen valitsimien täydennystä tabin avulla.  
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>.
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 ==
== Jokerimerkit ==
Rivi 94: Rivi 122:


Jos siis edellisessä esimerkissä kirjoittaisimme komennon
Jos siis edellisessä esimerkissä kirjoittaisimme komennon
  $ rm -r p*
  $ rm -r *pelit
poistuisivat hakemistot <tt>pelit</tt> ja <tt>pikkupelit</tt> sisältöineen, koska ne alkavat p-kirjaimella. 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" merkinnällä <tt>*linux*</tt>.
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
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
Rivi 116: Rivi 144:


== Putkitus ==
== Putkitus ==
:''Pääartikkeli: [[Putki]]''
Putket (engl. ''pipes'') ovat tapa, jolla yhden ohjelman tuloste voidaan ohjata toiselle ohjelmalle syötteeksi.  
Putket (engl. ''pipes'') ovat tapa, jolla yhden ohjelman tuloste voidaan ohjata toiselle ohjelmalle syötteeksi.  


Rivi 132: 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 145: 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 155: Rivi 187:


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
$ cowsay Moi > tiedosto
, ja katso tämän jälkeen tiedoston ''tiedosto'' 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.
, 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]]).
Rivi 171: 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 ''[[head]] -5'' näyttämään sortin tulostuksesta vain viisi ensimmäistä riviä.  
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 194: Rivi 226:
  23281  /etc
  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.
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). Luku ei ole tarkka, koska mukaan laskettiin myös otsikkorivi.
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 päinvaston: jälkimmäinen komento suoritetaan vain mikäli edellinen epäonnistuu, vertaa esimerkiksi:
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 215: Rivi 249:


==Komentojen käynnistäminen taustalle==
==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]] &
Rivi 230: Rivi 266:
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ä.  


Yksinkertaiset lainausmerkit ('), jotka suomalais-ruotsalaisessa näppäimistössä saa Ä:n ja enterin välisestä napista, saavat komentotulkin välittämään niiden välisen merkkijonon sinällään kutsutulle komennolle, prosessoimatta sitä millään tavalla. Esimerkiksi komento
[[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>chown</tt>" <tt>-c</tt>-valitsimensa argumentiksi eli suoritettavaksi komennoksi. Loput kolme merkkijonoa tulkittaisiin <tt>su</tt>:n omiksi argumenteiksi, mikä johtaisi virheilmoitukseen.
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.
Rivi 249: Rivi 285:
  $ [[echo]] $([[uname]]) >appelsiini
  $ [[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.
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"
  $ arkisto="mikälie"
  $ tar cf "${arkisto}_$(date -r ${arkisto}/ChangeLog --rfc-3339=date).tar" "${arkisto}/"
  $ tar cf "${arkisto}_$(date -r ${arkisto}/ChangeLog --rfc-3339=date).tar" "${arkisto}/"
Rivi 257: Rivi 293:


==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+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:
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:
  [jaakko@laptop] ~ % cat /var/log/crond
  $ 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 271: 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+Page Up ja Shift+Page Down. Nämä näppäinyhdistelmät toimivat myös terminaaliemulaattoreissa.
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ä, 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.
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 319: 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 340: Rivi 376:


==Aiheesta muualla==
==Aiheesta muualla==
*[http://people.debian.org/~debacle/refcard/refcard-fi-a4.pdf Debian GNU/Linux Pikaohje PDF-tiedostona]
*[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]]
53

muokkausta

Navigointivalikko