This is an old revision of the document!
Redirectarile sunt principalul mijloc prin care stocam pe disc, in fisiere, precularile de date facute de scripturi.
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
Î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.
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
2>
, &>
, >
trunchiază conținutul fișierului, dacă acesta exista. Ca alternativă aveam append mode, care se poate aplica și aici, fără probleme, astfel: 2>>
, &>>
, >>
.
De multe ori dorim să căutăm într-o ierarhie de fișiere și directoare, dar după anumite criterii. Comanda cea mai potrivită în acest caz este find
. Folosiți find
pentru a afișa toate fișierele din ierarhia /etc/
(adică toate fișierele din /etc/, din subdirectoarele acestuia, din subdirectoarele subdirectoarelor etc.). Hint: Folosiți opțiunea -type
a comenzii find.
Extindeți comanda anterioară pentru a afișa toate fișierele din ierarhia /etc/
al căror nume începe cu litere între a și d. Hint: Folosiți opțiunea -name
a comenzii find și construcția [a-d]*
pentru a indica un șir care începe cu o literă între a și d urmată de orice altceva.
Extindeți comanda anterioară pentru a afișa toate fișierele din ierahia /etc/
care au permisiunile de forma rw-------
, adică 600. Hint: Folosiți opțiunea -perm
urmată de permisiunile căutate în format octal.
Pentru comanda finală, redirectați outputul în fișierul ~/file_list.txt
și erorile în ~/errors.txt
.