Ero sivun ”Putki” versioiden välillä
p (+) |
LP (keskustelu | muokkaukset) (kh; uniq+sort; terminaali -> pääteikkuna) |
||
(Yhtä välissä olevaa versiota toisen käyttäjän tekemänä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
'''Putkittaminen''' tarkoittaa | '''Putkittaminen''' tarkoittaa toisen ohjelman [[standardituloste]]en ohjaamista toisen ohjelman standardisyötteelle. Se on erittäin hyödyllinen [[komentotulkki]]<nowiki>operaatio</nowiki>, jonka hallitseminen yhdessä [[grep]] ja [[less]] -komentojen kanssa on avain Linux- ja Unix-järjestelmien komentotulkin tehokkaaseen hyödyntämiseen. Komentotulkissa putki luodaan operaattorilla ''ohjelma1'' | ''ohjelma2''. Merkistä | käytetään tässä yhteydessä tämän vuoksi yleensä nimeä ''putki''. | ||
== Esimerkki == | == Esimerkki == | ||
Rivi 10: | Rivi 10: | ||
Putkia voi olla myös useita peräkkäin, ja niitä voi yhdistellä komentotulkin [[uudelleenohjaus]]<nowiki>operaattoreihin</nowiki> mielivaltaisesti. Seuraava komento poistaa tiedostosta ''kayttajat.txt.gz'' identtiset rivit komennolla [[uniq]], ja lopuksi pakkaa tiedoston uudelleen, sekä ohjaa pakatun tulosteen tiedostoon ''kayttajat-uniq.txt.gz'' | Putkia voi olla myös useita peräkkäin, ja niitä voi yhdistellä komentotulkin [[uudelleenohjaus]]<nowiki>operaattoreihin</nowiki> mielivaltaisesti. Seuraava komento poistaa tiedostosta ''kayttajat.txt.gz'' identtiset rivit komennolla [[uniq]], ja lopuksi pakkaa tiedoston uudelleen, sekä ohjaa pakatun tulosteen tiedostoon ''kayttajat-uniq.txt.gz'' | ||
gzip -c kayttajat.txt.gz | uniq | gzip -c - > kayttajat-uniq.txt.gz | gzip -c kayttajat.txt.gz | sort | uniq | gzip -c - > kayttajat-uniq.txt.gz | ||
== Standardivirhe == | == Standardivirhe == | ||
Putkitusoperaattori | ohjaa vain ohjelman standarditulosteen toiselle ohjelmalle. Minkä tahansa putkessa esiintyvän ohjelman virheilmoitukset tulostuvat siksi suoraan [[ | Putkitusoperaattori | ohjaa vain ohjelman standarditulosteen toiselle ohjelmalle. Minkä tahansa putkessa esiintyvän ohjelman virheilmoitukset tulostuvat siksi suoraan [[terminaaliemulaattori|pääteikkunaan]]. Koska jokaisella ohjelmalla on vain kaksi ulostuloa (standardituloste ja -virhe) mutta vain yksi sisääntulo (standardisyöte), pitää standardivirhe ohjata erikseen standardi'''tulosteelle''', jotta se voitaisiin putkittaa toiselle ohjelmalle. Tämä tapahtuu komentamalla | ||
''ohjelma1'' 2>&1 | ''ohjelma2'' | ''ohjelma1'' 2>&1 | ''ohjelma2'' | ||
Jos jonkin putkessa olevan ohjelman standardivirhettä ei haluta putkittaa toiselle ohjelmalle, mutta sitä ei myöskään haluta näkyville | Jos jonkin putkessa olevan ohjelman standardivirhettä ei haluta putkittaa toiselle ohjelmalle, mutta sitä ei myöskään haluta näkyville, se voidaan ohjata erikoistiedostoon [[null|/dev/null]] esimerkiksi seuraavasti: | ||
''ohjelma1'' | ''ohjelma2'' 2> /dev/null | ''ohjelma3'' | ''ohjelma1'' | ''ohjelma2'' 2> /dev/null | ''ohjelma3'' | ||
Tämä ohjaa ''ohjelma2'':n mahdolliset virheilmoitukset null:ille. ''ohjelma1'':n ja ''ohjelma3'':n virheilmoitukset tulostuvat normaalisti terminaaliin. | Tämä ohjaa ''ohjelma2'':n mahdolliset virheilmoitukset null:ille. ''ohjelma1'':n ja ''ohjelma3'':n virheilmoitukset tulostuvat normaalisti terminaaliin. | ||
Rivi 23: | Rivi 23: | ||
* [[Nimetty putki]] | * [[Nimetty putki]] | ||
[[Luokka: | [[Luokka:Komentorivi]] | ||
[[Luokka:Perustietoa]] | [[Luokka:Perustietoa]] |
Nykyinen versio 16. helmikuuta 2010 kello 21.52
Putkittaminen tarkoittaa toisen ohjelman standarditulosteen ohjaamista toisen ohjelman standardisyötteelle. Se on erittäin hyödyllinen komentotulkkioperaatio, jonka hallitseminen yhdessä grep ja less -komentojen kanssa on avain Linux- ja Unix-järjestelmien komentotulkin tehokkaaseen hyödyntämiseen. Komentotulkissa putki luodaan operaattorilla ohjelma1 | ohjelma2. Merkistä | käytetään tässä yhteydessä tämän vuoksi yleensä nimeä putki.
Esimerkki[muokkaa]
cat tulostaa argumenttina annetun tiedoston omalle standarditulosteelleen. Less ja more ovat ohjelmia, jotka normaalitilassa vierittävät standardisyötettä ruudullisen kerrallaan. Kun cat:in tuloste putkitetaan less:ille, on tulostettavaa tiedostoa helpompi lukea:
cat tiedosto | less
Putkitettavan tulosteteen ei tarvitse välttämättä olla tekstiä, vaan mitä tahansa dataa voidaan ohjata putkeen. Jos tiedosto kuva.png.gz on gzipillä pakattu PNG-kuvatiedosto, se voidaan katsoa ImageMagickin display komennolla X-ikkunassa seuraavasti:
gunzip -c kuva.png.gz | display -
Tässä gzip-jakeluun kuuluva gunzip on purkaa pakatun tiedoston kuva.png.gz. Gunzipin valitsin -c ohjaa puretun datavirran (siis alkuperäisen, pakkaamattoman kuvatiedoston) standarditulosteelle. ImageMagickin displayn argumenttina on näytettävän kuva tiedostonimi. Tiedostonimi väliviiva (-) on yleinen tapa kertoa ohjelmalle, että tiedostoa ei lueta tiedostojärjestelmästä lainkaan, vaan se annetaan datavirtana ohjelman standardisyötteelle. Lopputuloksena ImageMagick siis lukee gunzip:in purkaman tiedoston ja näyttää sen käyttäjälle.
Putkia voi olla myös useita peräkkäin, ja niitä voi yhdistellä komentotulkin uudelleenohjausoperaattoreihin mielivaltaisesti. Seuraava komento poistaa tiedostosta kayttajat.txt.gz identtiset rivit komennolla uniq, ja lopuksi pakkaa tiedoston uudelleen, sekä ohjaa pakatun tulosteen tiedostoon kayttajat-uniq.txt.gz
gzip -c kayttajat.txt.gz | sort | uniq | gzip -c - > kayttajat-uniq.txt.gz
Standardivirhe[muokkaa]
Putkitusoperaattori | ohjaa vain ohjelman standarditulosteen toiselle ohjelmalle. Minkä tahansa putkessa esiintyvän ohjelman virheilmoitukset tulostuvat siksi suoraan pääteikkunaan. Koska jokaisella ohjelmalla on vain kaksi ulostuloa (standardituloste ja -virhe) mutta vain yksi sisääntulo (standardisyöte), pitää standardivirhe ohjata erikseen standarditulosteelle, jotta se voitaisiin putkittaa toiselle ohjelmalle. Tämä tapahtuu komentamalla
ohjelma1 2>&1 | ohjelma2
Jos jonkin putkessa olevan ohjelman standardivirhettä ei haluta putkittaa toiselle ohjelmalle, mutta sitä ei myöskään haluta näkyville, se voidaan ohjata erikoistiedostoon /dev/null esimerkiksi seuraavasti:
ohjelma1 | ohjelma2 2> /dev/null | ohjelma3
Tämä ohjaa ohjelma2:n mahdolliset virheilmoitukset null:ille. ohjelma1:n ja ohjelma3:n virheilmoitukset tulostuvat normaalisti terminaaliin.