This is an old revision of the document!
TODO
Redirectare stdout
(standard output, în general mesaje afișate prin comenzi similare cu printf
din C). De exemplu, într-un sistem în care avem multe procese, e greu sa urmărim direct în consolă output-ul comenzii ps
:
training@box:~$ ps -f -u student > stdout.txt training@box:~$ cat stdout.txt
Putem redirecta doar mesajele de eroare către un fișier. Scenariu: Vrem să găsim toate fișierele cu extensia *.conf
din directorul /etc
.
training@box:~$ find /etc -name '*.conf' (...) find: `/etc/ppp/peers': Permission denied (...)
Ne deranjează mesajele de eroare din cauza lipsei drepturilor de citire asupra unor fișiere sau directoare. Pentru aceasta vom folosi:
training@box:~$ find /etc -name '*.conf' 2> errors.txt training@box:~$ cat errors.txt
Putem face combinații acum: redirectăm erorile într-un fișier și rezultatele în alt fișier:
training@box:~$ find /etc -name '*.conf' 2> errors.txt > stdout.txt
<hidden> Nu neapărat cu redirectări, dar aș vrea să le dați mai multe use-case-uri cu find, de exemplu: pot căuta după anumite fișiere și să execute o comandă asupra lor: rm
:
find . -name '*.tmp' -exec rm -f {} \;
Mai mult cu titlul for their info. </hidden>
În cazul în care dorim să redirecționăm toate mesajele afișate de o comandă, la grămadă, folosim operatorul &>
:
training@box:~$ find /etc -name '*.conf' &> find_output.txt
procfs
, montat în /proc
. Pentru fiecare proces identificat printr-un PID, aveam directorul /proc/19827/fd
, care conținea link-uri simbolice către fișierele deschise de acel proces. Pentru fiecare proces în acel director găseam 0, 1, 2
. Acestea reprezintă respectiv:
0
- intrarea standard (stdin). Exemplu: tastatura1
- ieșirea standard (stdout). Exemplu: mesaje afișate cu printf
de un program C2
- ieșirea standard de eroare (stderr), unde se duc mesaje precum cele afișate de find mai sus. </note>
Putem redirecta outputul și către device-uri virtuale, cum ar fi /dev/null
. În general facem acest lucru deoarece vrem să executăm o anumită comandă (într-un program sau într-un script), fără a ne interesa outputul ei. Pentru exemplul cu find
de mai sus, să zicem că dorim să ignorăm erorile:
training@box:~$ find /etc -name '*.conf' 2> /dev/null
==== TODO: Exercițiu 1 ====
TODO
==== TODO: Exercițiu 2 ====
TODO