Putki

Kohteesta Linux.fi
Loikkaa: valikkoon, hakuun

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.

Katso myös[muokkaa]