Yhden komennon tulostuksen voi ohjata suoraan toisen komennon lähtötiedoiksi. Tämä tietysti saataisiin aikaan ohjaamalla ensimmäisen komennon tulostus tiedostoon ja sitten käskemällä toisen komennon lukea kyseisestä tiedostosta:
komento1 >aputiedosto
komento2 <aputiedosto
jonka jälkeen aputiedoston voisi hävittää. Paljon mukavampaa on kuitenkin käyttää putkitusta:
komento1 |
komento2
Tämä merkitsee, että komento1:n tulostus ei tule päätteelle vaan menee suoraan syöttötiedoiksi komento2:lle. Tällöin siis tilanne on, hienosti sanottuna, sellainen, että järjestelmä suorittaa komento1:n ja komento2:n kahtena prosessina siten, että ensin mainitun stdout on jälkimmäisen stdin.
Putkituksen merkki on siis |, joka näkyy laitteen mukaan pystyviivana (joskus katkonaisena pystyviivana) tai pienenä ö-kirjaimena (ks. skandinaavisista merkeistä kertovaa kohtaa).
Hyvin tavallista ja suositeltavaa on käyttää putkitusta jonkin komennon tai ohjelman tulostuksen sivuttamiseen
more
-komennon
avulla.
Jos sinulla esimerkiksi on paljon tiedostoja,
niin komennon ls -l
tulostus ei mahdu yhdelle ruudulliselle.
Koska ls
-komento ei jaa tulostusta kuvaruudullisiin,
asia kannattaa hoitaa seuraavaan tapaan:
ls -l | more
Tämä perustuu siihen
more
-komennon, kuten usean muunkin komennon,
piirteeseen, että
jos komennossa ei anneta argumenttia, se lukee standardisyöttövirrasta.
Oletusarvotilanteessa, jossa kyseinen virta tulee näppäimistöltä,
siinä ei juuri ole järkeä, mutta
putken käytön takia tässä tapauksessa
standardisyöttövirrasta
lukeminen merkitseekin komennon ls -l
tulostuksen lukemista.
Putkitusta voi jatkaa esim. niin, että toisen komennon tulosteet menevät edelleen syötteiksi kolmannelle:
komento1 | komento2 | komento3
Usein Unix-slangissa kutsutaan filtteriksi sellaista komentoa tai ohjelmaa, joka lukee syötteensä standardisyöttövirrasta ja kirjoittaa tulosteensa standarditulostusvirtaan.
Filtterien vastakohtana ovat sellaiset komennot ja ohjelmat, joille ilmoitetaan syöttö- ja tulostustiedosto käynnistyskomennossa argumenteilla. Toisaalta hyvin yleisesti tällöin oletusarvona (eli toimintatapana silloin, kun tiedostoja ei ilmoiteta) on se, että syöttötiedostona on standardisyöttövirta ja tulostustiedostona standarditulostusvirta. Sellaisessa tapauksessa komentoa tai ohjelmaa voi käyttää filtterin tapaan, vaikka se ei ole filtteri sanan suppeassa merkityksessä.
Esimerkki. Komento colrm
(jota jäljempänä käytetään
esimerkkinä) on tyypillinen filtteri: se poistaa syöttötietoriveiltä
tietoja, ja se lukee syöttötiedot standardisyöttövirrasta.
Kyseiselle komennolle ei voi antaa syöttötiedoston nimeä argumenttina.
Sen sijaan se voidaan ohjata lukemaan standardisyöttövirran
halutusta tiedostosta seuraavaan tapaan:
colrm 50 <foobarSama koskee tulostusta, esim.
colrm 50 <foobar >foobar2Jos komennolle voidaan antaa syöttötiedoston nimi argumenttina ja jos toisaalta oletusarvona on, että syöttötiedostona on standardisyöttövirta, voimme kirjoittaa yhtä hyvin
more fookuin
more <foomutta jos kyseessä on filtteri sanan suppeassa merkityksessä, vain jälkimmäinen vaihtoehto toimii.
Se, onko kyseessä filtteri vai ei, ilmenee kunkin komennon ja ohjelman kuvauksesta, esim. man-sivulta.
Nimi filtteri
voi olla varsin harhaanjohtava. Sehän johtuu englannin sanasta
filter, jonka normaali suomenkielinen vastine on
suodatin (tai suodin)
Yleiskielessä, ja myös yleensä tekniikan kielessä,
suodatin
tarkoittaa jotakin laitetta tms., joka
päästää lävitseen vain osan siihen tulevasta aineesta, energiasta
tai informaatiosta,
esim. vain nesteen mutta ei kiinteitä aineita.
Tämän käsitteen alaan esim. edellä mainittu
colrm
-komento sopii hyvin, samoin
grep
-komennot, jotka "päästävät lävitseen" vain
osan "niihin tulevista" riveistä. Mutta yleisesti Unixissa
filtteri ei suinkaan aina ole tietoa suodattava vaan se voi
myös muokata tietoja eri tavoin tai käyttää syöttötietoja
vain lähtöarvoina laskennalle. Filtterin tulostusvirta voi aivan
hyvin olla laajempi kuin syöttövirta.