User Tools

Site Tools


linux-admin:capitole:capitol-07

This is an old revision of the document!


7. Redirectări

TODO

Subiecte abordate

  • TODO
  • TODO
  • TODO

Utilitare folosite

  • TODO
  • TODO
  • TODO

Bune practici

  • TODO
  • TODO
  • TODO

Resurse utile

  • TODO
  • TODO

Slide-uri

Exerciții

Demo-uri

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

Reamintiți-vă de la procese 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: tastatura
  • 1 - ieșirea standard (stdout). Exemplu: mesaje afișate cu printf de un program C
  • 2 - 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 

TODO: Exercițiu 1

TODO

TODO: Exercițiu 2

TODO

linux-admin/capitole/capitol-07.1475130830.txt.gz · Last modified: 2016/09/29 09:33 by mihaic