A standard perifériák és átirányításuk
Láttuk, hogy a programok túlnyomó többsége a billentyűzetről várja a bemeneti adatokat (input), és a képernyőre küldi az eredményeket (outputot).
E két perifériát, azaz a billentyűzetet és a képernyőt a UNIX standard be- és kimeneti csatornának nevezi, és kis egész számokkal lehet rájuk hivatkozni. Pontosabban fogalmazva, a UNIX három standard be- és kimeneti csatornát definiál, a standard bemenetet (stdin, 0); a standard kimenetet (stdout, 1) és a standard hibacsatornát (stderr, 2). A standard bemenet alapértelmezés szerint a billentyűzet, a kimenet és a hibacsatorna pedig a képernyő. Az utóbbi kettő szétválasztásának alapesetben nincs értelme, hiszen mind a futó programok eredményét, mind az esetleges hibaüzeneteket látni szeretnénk.
Nyilvánvaló, hogy nem sokra megyünk olyan programokkal, amelyek csak a billentyűzetről tudnak adatokat fogadni, és csak a képernyőre tudnak kiírni — e gondon segít az átirányítás (redirection). Ennek lényege az, hogy tetszőleges programot utasíthatunk arra, hogy bemenetét ne a billentyűzetről várja, illetve eredményeit ne a képernyőre írja. E mechanizmusnak a UNIX alatt kitüntetett jelentősége van: gyakorlatilag minden, a standard outputra író program kimenete átirányítható egy tetszőleges állományba, s hasonlóképp, bármelyik program, amelyik a standard inputról olvas, tetszőleges állományból veheti inputját. A bemenet átirányításának jele a '<' karakter, a kimeneté a '>' karakter.
Például az alábbi parancs a katalógus tartalmát nem a képernyőre listázza ki, hanem a file nevű állományba teszi:
$ ls -l >file
$ cat file
total 364
-rw-rw-rw- 1 demo guest 166262 Aug 23 20:29 FULL-INDEX
-rw-rw-rw- 1 demo guest 0 Aug 29 16:46 file
-rw-r-xr-x 1 janos guest 18 Aug 23 20:42 file1
drwxrwxrwx 3 demo guest 1024 Aug 23 20:59 newdir
..
-rw-rw-rw- 2 demo guest 18 Aug 23 20:59 text
$
A '<' és '>' karakterek mindkét oldalán tetszőleges számú szóköz karaktert tehetünk, de el is hagyhatjuk őket. Az alábbi parancssorozat először létrehozza az akarmi és a semmi nevű fájlokat, majd a cat parancs segítségével összemásolja őket egy harmadik, temp nevű állományba:
$ echo "Ez akarmi ***" >akarmi
$ cat akarmi
Ez akarmi ***
$ echo "*** Ez semmi" > semmi
$ cat semmi
*** Ez semmi
$ cat akarmi semmi>temp
$ cat temp
Ez akarmi ***
*** Ez semmi
$
A kimenet átirányításakor, ha az állomány, amibe az átirányítást eszközöltük, nem üres, akkor az újonnan beleíródó adatok felülírják a tartalmát. Ennek elkerülésére szolgál a '>>' karakterekkel jelzett additív átirányítás; ekkor az átirányított adatok a meglevőkhöz fűződnek:
$ cat akarmi semmi >>temp
$ cat temp
Ez akarmi ***
*** Ez semmi
Ez akarmi ***
*** Ez semmi
$
A bemenet átirányítására egy példa: egy megírt levelet többeknek szeretnénk postázni. A levelezésre használt mail parancs elvileg interaktív működésű, azaz meg kell adni a parancssorban a címzett nevét és a levél tárgyát, majd a RETURN után begépelhetjük a levél szövegét. Ha viszont már készen lévő levelet szeretnénk küldeni, akkor a levelet a bemenet átirányításával adjuk meg a program számára:
$ mail -w janos geza <level
$
Az átirányítás segítségével lehetőség nyílik például a bejelentkezett felhasználók ábécésorrendben történő kilistázására:
$ who >temp; sort <temp
guest vt01 Mar 28 20:58
guest vt02 Mar 28 20:58
root console Mar 28 20:58
$
A fentebbi példában használt sort parancs a bemenetről olvasott adatokat rendezi alfabetikusan, vagy számos más, opcionálisan beállítható szempont alapján.