Šta znači “> /dev/null 2>&1″?

15.07.2008. 11:50

Linux administracija: tips & tricks

Pretpostavljam da nisam jedini Unix/Linux korisnik koji se ikada pitao šta predstavljaju one nerazumljive kuke i kvake na kraju komande. Često se koriste u primerima kako nešto podesiti i uraditi, ali bez objašnjenja šta TO zapravo znači. Kao da se (pobogu) podrazumeva da to svi moraju da znaju. Ili je to svojevrsni potpis po kome se prepoznaje pravi “Linux g33k”?

Epa, evo objašnjenja.

Redirekcija izlaza

Primer:

ls > pera.txt

Znak veće (>) u komandama poput ove vrše redirekciju izlaza programa ili komande negde drugde umesto na podrazumevani izlaz. U našem slučaju, komanda ls bi ispisala svoj izlaz na ekranu (tzv. standardni izlaz) ali je redirektovana na fajl pera.txt.

Standardni ulaz i izlaz i standardni izlaz za greške

Postoje tri standardna toka za ulaz i izlaz nekog programa. Standardni ulaz često dolazi sa tastature u slučaju interaktivnih programa, iz nekog fajla, ili iz drugog programa (tzv. protočna obrada, ali nećemo sad o tome). Program najčešće ispisuje svoj izlaz na standardni izlaz (monitor), i ponekad ispisuje i na standardni izlaz za greške (što je najčešće opet monitor). Ovo su tri standardna toka na Unix/Linux platformama i najčešće se nazivaju STDIN, STDOUT, i STDERR.

Šta su ti tokovi!? Zamislite tokove (engl. streams) kao vrstu vodovodnih cevi, samo što njima teku podaci a ne voda. Kad “vode” nema, ne teče ništa ali su cevi i dalje tu i čekaju. Na primer, ako je bojler program, on ulazne podatke dobija iz standardnog ulaznog toka, obrađuje ih (zagreva vodu), svoj izlaz šalje na obradu drugom programu: tuš-kabini (tj. izlaz bojlera je preusmeren sa standardnog toka na interni tok između dva programa). Izlaz iz tuš-kabine završava u standardnom toku za izlaz.

Tokovi ponekad nisu imenovani, nego numerisani. Standardna numeracija strandardnih tokova je 0, 1 i 2, u tom redosledu (SRDIN, STDOUT, STDERR). Ako tok nije imenovan ili numerisan eksplicitno, usvojeno je da se radi o toku STDOUT.

E sad:

ls > /dev/null 2>&1

U ovom kontekstu, možemo videti da komanda vrši redirekciju standardnog izlaza u /dev/null, što je mesto gde možete poslati sve što vam ne treba (u računarskom žargonu često nazvan bit-bucket), a zatim se redirektuje standardni izlaz za greške u standardni izlaz.

Dakle, prosto rečeno, na ovaj način svaki izlaz i svaka greška završavaju u “crnoj rupi”. Ovo je jedan od često korišćenih načina da se program učini vrlo tihim.

Kategorija: Linux administracija: tips & tricks

Nema komentara

Nema komentara.

Napišite komentar

XHTML: U komentarima možete koristiti sledeće tagove: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Autor

Autor ovih redova je konačno rešio da počne sa blogovanjem. Kad to ne radi, jede, spava i programira. A dešava mu se i da gleda filmove ili da baš ništa ne radi. Ranije se bavio računarskim mrežama, valjda je zato i završio ETF. Prilično se ugojio i morao bi malo da smrša. Trenutno je strani plaćenik.