Preusmerjanje in ukazi s tokovi
Ko v terminalu poženemo ukaz, mu moramo ponavadi podati nek vhod (input), in želimo, da nekaj izpiše na ekran (output). Poglejmo, kako točno to deluje v Linuxu.
Vsak ukaz (oziroma proces), ki se požene, ima na voljo tri standardne podatkovne tokove (data streams):
-
Standardni vhod
stdinima ID0. Privzeto je to besedilo, ki ga uporabnik vnese s tipkovnico. -
Standardni izhod
stdoutima ID1. Privzeto nam ga izpisuje lupina, v kateri smo pognali ukaz. -
Standardna napaka
stderrima ID2in vsebuje podatke o napakah, ki so se zgodile med izvajanjem ukaza. Podobno kotstdoutse privzeto izpisuje v lupini.

Standardni vhod/izhod (STDIO)
Preusmerjanje tokov
Vhod in izhod ukazov lahko nadzorujemo - preusmerjamo ga lahko v datoteke ali druge ukaze.
> - preusmerjanje izhoda
S > preusmerimo izhod ukaza v datoteko: ukaz > datoteka. Če še ni obstajala, jo ustvarimo.
Če je datoteka že obstajala in je v njej kaj pisalo, te podatke povozimo in jih nadomestimo z novimi.
zen@ZENBOOK:~$ cat hello
Hello World!
zen@ZENBOOK:~$ echo New Input! > hello
zen@ZENBOOK:~$ cat hello
New Input!
>> - preusmerjanje izhoda z dodajanjem (append)
Če datoteke nočemo povoziti, temveč želimo dodajati besedilo na konec datoteke, uporabimo >> namesto >.
zen@ZENBOOK:~$ echo Newer Input! >> hello
zen@ZENBOOK:~$ echo Newest Input! >> hello
zen@ZENBOOK:~$ cat hello
New Input!
Newer Input!
Newest Input!
< - preusmerjanje vhoda
S < preusmerimo datoteko v standardni vhod ukaza: ukaz < datoteka. Ne potrebujemo ga pogosto, ker večina ukazov sprejema imena datotek kot parameter.
Preusmeritve lahko seveda kombiniramo, ukaz < vhod > izhod (podobno tudi vse ostale):
2> - preusmerjanje standardne napake
Z > in >> smo preusmerjali izhod ukaza, podobno pa lahko preusmerjamo tudi napako: ukaz 2> out. Uporabiti moramo ID 2, da sporočimo, kateri stream želimo preusmeriti. (Podobno bi lahko stdout preusmerjali z 1>, stdin pa z 0<).
Če želimo hkrati preusmeriti izhod in napako (torej oboje, kar ob izvajanju ukaza vidimo v terminalu), uporabimo &>.
zen@ZENBOOK:~$ ls mapa kapa &> out
zen@ZENBOOK:~$ cat out
ls: cannot access 'kapa': No such file or directory
mapa:
datoteka
| - cev (pipe)
Do zdaj smo preusmerjali z datotekami, s | pa posredujemo izhod enega ukaza kot vhod drugega ukaza: ukaz1 | ukaz2.

Preusmerjanje ukazov
| je izjemno uporabno orodje. Poglejmo si nekaj ukazov, ki so narejeni, da jih uporabljamo s tokovi podatkov.
Ukazi s tokovi
grep
grep je eden najbolj uporabnih ukazov v Linuxu. Deluje podobno kot Ctrl + F - iz vhodnih podatkov izlušči vrstice, ki se ujemajo z vzorcem, druge pa zavrže.
Format: grep [options] pattern [files]
-
options- zastavice, ki spremenijo obnašanjegrep-a. -
pattern- vzorec (regular expression), ki ga iščemo. -
files- imena datotek, ki jih želimo preiskati
V grep pogosto radi preusmerimo izhod drugih ukazov s |, da se znebimo odvečnih podatkov.
zen@ZENBOOK:~$ ifconfig | grep "inet "
inet 172.18.252.109 netmask 255.255.240.0 broadcast 172.18.255.255
inet 127.0.0.1 netmask 255.0.0.0