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.

 

Tartalomjegyzék