A kimenet átirányításáról írtak kapcsán láthattuk, hogy ha egy szöveges állományt egymást követően több paranccsal akarunk földolgozni, akkor ehhez fölhasználhatunk egy átmeneti állományt:
tux@madas:~/public_html/txt/mp$ head -n -2 ksh_hnk_1913 > temp tux@madas:~/public_html/txt/mp$ tail -n +3 temp > ksh_hnk_1913.txT tux@madas:~/public_html/txt/mp$ rm temp
Valójában az átmeneti állományra nincs szükség: az első parancs kimenete lehet a második parancs bemenete. Ezt a szerkezetet (a | jellel összekapcsolt parancsokat) hívjuk csőnek vagy csővezetéknek:
tux@madas:~/public_html/txt/mp$ head -n -2 ksh_hnk_1913 | tail -n +3 > ksh_hnk_1913.Txt tux@madas:~/public_html/txt/mp$
A diff paranccsal ellenőrizhetjük, hogy a korábban, illetve a most kapott két állomány megegyezik-e:
tux@madas:~/public_html/txt/mp$ diff ksh_hnk_1913.txT ksh_hnk_1913.Txt tux@madas:~/public_html/txt/mp$
A unix/linux világában megszokottak szerint nincs harsonaszó, nem zengenek fanfárok: ha a parancs végrehajtása rendben lezajlott, akkor a rendszer nem ad visszajelzést. Ugyanez érvényes most is: nincs eltérés, nincs mondanivaló.
De mi a helyzet akkor, ha van eltérés?
A korabeli szokások szerint a településnevekben a c hangot a cz betűkapcsolat jelölte. Cseréljük ki ezeket c-re:
tux@madas:~/public_html/txt/mp$ sed "s/cz/c/g" ksh_hnk_1913.txt > ksh_hnk_1913.Txt tux@madas:~/public_html/txt/mp$
A diff parancs soronként hasonlít össze:
tux@madas:~/public_html/txt/mp$ diff ksh_hnk_1913.txt ksh_hnk_1913.Txt … 12515c12515 < baczúr --- > bacúr 12519,12520c12519,12520 < szászpelsőcz < garamberzencze --- > szászpelsőc > garamberzence … tux@madas:~/public_html/txt/mp$
Eltérés esetén láthatjuk, hogy mely sorokat érinti az, illetve mit tartalmaz a két állomány ezekben a sorokban. Érdemes megfigyelni, hogy a kimenetből az is kiderül: egy vagy több egymást követő sor különbözik. (Általában is elmondható, hogy a diff parancs igen szofisztikáltan dolgozik: felismeri például azokat az eseteket is, amikor az egyik állományban többletsorok vannak a másikhoz képest; ezeken túlmenően tucatnyi opcióval finomítható a működése.)
A diff parancs eredménye is kiszalad a képernyőről. Ha szeretnénk a kimenetet lapozgatni, átadhatjuk azt a less parancsnak:
tux@madas:~/public_html/txt/mp$ diff ksh_hnk_1913.txt ksh_hnk_1913.Txt | less … 7c7 < makrancz --- > makranc 16,17c16,17 < alsóláncz < felsőláncz --- > alsólánc > felsőlánc …
A parancs –nyilván nem ok nélkül– a man parancs esetén látottakhoz hasonló mozgást tesz lehetővé a szövegben, illetve most is a q billentyűvel fejezhetjük be a használatát.
Említsük meg ehelyütt a cmp parancsot is: ez bináris állományok összehasonlításra való (nem soronként, hanem byte-onként veti össze az állományok tartalmát):
tux@madas:~/public_html/txt/mp$ cmp ksh_hnk_1913.txt ksh_hnk_1913.Txt ksh_hnk_1913.txt ksh_hnk_1913.Txt eltér: byte: 16, sor: 2 tux@madas:~/public_html/txt/mp$
Az ls parancs a -t kapcsolóval az állományokat (módosítási) időbélyegük szerint rendezve írja ki (a lista elején a legfrissebben változottak állnak). Ezt kihasználva a head parancs segítségével láthatjuk, mit szerkesztettünk legutóbb:
tux@madas:~/public_html/txt/mp$ ls -alt | head összesen 1704 -rw-r----- 1 tux www-data 1278 nov 4 16:00 ppv.txt -rw-r----- 1 tux www-data 904 nov 4 16:00 ppw.txt -rw-r----- 1 tux www-data 935 nov 4 16:00 ppr.txt -rw-rw-r-- 1 tux tux 1005 nov 4 16:00 ppu.txt -rw-r----- 1 tux www-data 995 nov 4 16:00 ppm.txt -rw-r----- 1 tux www-data 2371 nov 4 16:00 ppp.txt drwxr-x--- 2 tux www-data 4096 nov 4 16:00 . -rw-rw-r-- 1 tux tux 2867 nov 4 16:00 ppu30.txT -rw-rw-r-- 1 tux tux 136419 nov 4 12:22 ksh_hnk_1913.Txt tux@madas:~/public_html/txt/mp$
Elsőre csak történeti érdekességnek tűnik a pr parancs: ez eredetileg a korabeli sornyomtatók számára formázta a bemenetként kapott sorokat. Ennek keretében azonban máig hasznos funkciókat valósítottak meg vele: így például hasábokra tudja tördelni a sorokat.
Néhány leckével ezelőtt az ls parancs kimenete 11 oszlopban jelent meg (és a szerző képernyőjén nem is fért el a megfelelő területen). Ehelyett láthattuk volna a következőt:
tux@madas:~/public_html/txt/mp$ ls | pr -6 2018-11-04 16:25 1. oldal 1b1bff.html pp151.txT ppp20.txT ppr06.txT ppu10.txT ppv.txt 1b1bff.txt pp152.txT ppp21.txT ppr08.txT ppu12.txT ppv.txT 1.html pp160.txT ppp25.txT ppr10.txT ppu14.txT ppw00.txT …
Ha valamiért úgy célszerűbb, rendezhetünk soronként is (-a), illetve elhagyhatjuk a nyomtatáshoz kialakított, számunkra fölösleges sorokat (-t):
tux@madas:~/public_html/txt/mp$ ls | pr -6at 1b1bff.html 1b1bff.txt 1.html 20010224.tx 2.html 4.html 5.html 6.html foot head itiiee.txt itiitr.txt itv_html.ht itv_html.tx ksh_hnk_191 ksh_hnk_191 ksh_hnk_191 ksh_hnk_191 miu-1012.py miu-1019a.p miu-1019bb. miu-1019b.p miu-1026.py pfppt.txT pp150.txT pp151.txT pp152.txT pp160.txT pp161.txT pp162.txT pp170.txT pp171.txT pp172.txT pp181.txT ppbg.txT ppbq.txT ppd.txT pp.html pph.txT ppm.txt ppm.txT ppp01.txT ppp02.txT ppp10.txT ppp11.txT ppp12.txT ppp13.txT ppp14.txT …
Lássunk végül még egy példát arra, hogy egy eredetileg más célra tervezett parancs hogyan segítheti az adekvát eljárást nem ismerő felhasználót.
A du parancs eredendően a könyvtárak (-a opcióval pedig az állományok) helyfoglalását írná ki. De mivel ehhez bejárja az aktuális könyvtár alkönyvtárait is, a csővezetékbe épített szűrő segítségével kiírathatjuk vele a keresett állományokat is:
tux@madas:~$ cd ~ tux@madas:~$ du -a | grep ppke 20 ./ownCloud/ppke tux@madas:~$
(A hazatéréshez cd ~ helyett a cd parancs önmagában is elég lett volna.)