Linux: Stdin, Stdout & Stderror (#16)

0

Bine ați revenit, dragii mei green horn hackers!

În tutorialele anterioare dedicate Linuxului am analizat câteva dintre comenzile și conceptele de bază pentru utilizarea Linux-ului. De-a lungul drumului, mi-am dat seama că nu am reușit să vă ofer un material de bază despre stdin, stdout și stderror.



Cu alte cuvinte, acestea sunt adesea denumite intrări standard (stdin), ieșiri standard (stdout) și eroare standard (stderror).

Acestea reprezintă cum și unde trimite Linux  ieșirea din comenzile noastre (stdout), unde primește intrarea (stdin) și unde trimite mesaje de eroare (stderror).

Din moment ce ați folositt Linux pentru o perioadă de timp, vă dați seama că atât ieșirea standard cât și eroarea standard sunt trimise pe ecranul computerului.

Așa cum sugerează și numele, acesta este locul standard și nu este neapărat singurul loc. Linux ne permite să definim unde ar trebui să meargă mesajele de ieșire și de eroare.

Înainte de a merge mai departe, haideți să aruncăm privirea pe niște termeni.

Ieșire standard (1)

Ori de câte ori finalizăm o comandă, aceasta trebuie să știe unde să trimită ieșirea. S-ar putea să dorim să-l trimitem către un fișier, către o imprimantă s.a.m.d. Pentru ieșirea standard avem ecranul computerului. Randamentul standard este adesea denumit stdout. Reprezentarea numerică a acestuia este 1.

Intrarea standard este locul în care programul sau comanda primește informațiile de care are nevoie. În mod implicit, în Linux aceasta este tastatura, dar poate fi un fișier, un director etc. Intrarea standard este adesea denumită stdin. Reprezentarea numerică a acestuia este 0.


Eroare standard (2)

Când facem o greșeală sau programul nostru ne afișează o eroare, mesajul cu eroarea se trimite către eroarea standard. În mod implicit, acesta este ecranul calculatorului nostru. Eroarea standard este adesea denumită stderror sau pur și simplu reprezentată prin numărul 2.

Când vrem să direcționăm oricare dintre aceste trei linii de comandă sau un script, folosim reprezentarea numerică a fiecăruia, 0 pentru stdin, 1 pentru stdout și 2 pentru stderror.

Pasul 1: Listarea a două directoare

Pentru a demonstra modul în care putem folosi și manipula aceste fluxuri de I / O, să facem o listă cu două directoare diferite, /etc/apt și /etc  cups.

  • ls /etc/apt /etc/cups

După cum puteți vedea, listarea revine la noi prin ieșirea standard pe ecranul calculatorului, care ne arată lista celor două directoare.

Acum, să încercăm același lucru, dar de data aceasta să listăm un director care nu există, cum ar fi /etc/aircrack-ng.


  • ls /etc/apt /etc/aircrack-ng

Așa cum se observă, shell-ul nostru BASH revine cu două ieșiri, ieșirea standard de la etc/apt și eroarea standard din directorul inexistent.

 

Pasul 2: Trimitem ieșire standard către un fișier

Să presupunem că dorim să separăm producția standard de eroarea noastră standard. Imaginați-vă că rulăm un script în care nu vrem să vedem mesajele noastre de ieșire decât după ce scriptul a rulat, dar trebuie să vedem imediat mesaje de eroare pe ecranul nostru. Am putea rescrie comanda noastră ca:

  • ls /etc/apt /etc/aircrack-ng>iesirebuna

Să ne imaginăm acum inversul scenariului nostru anterior, unde dorim să vedem rezultatele pe ecran, dar să stocăm mesajele noastre de eroare într-un fișier separat pentru o vizualizare ulterioară. Am putea scrie:


  • ls /etc/apt /etc/aircrack-ng>iesire_cu_eroare

Acum, după ce comanda a fost rulată, ne putem întoarce și vom adăuga fișierul erroroutput pentru a vedea eventualele mesaje de eroare.

Pasul 3: Trimitem ieșirea standard și eroarea standard pentru un fișier separat

Ne gândim la un script în care dorim ca atât ieșirea noastră standard cât și eroarea standard să fie direcționate spre fișiere separate pentru o vizualizare ulterioară. Putem tasta:

  • ls /etc/apt /etc/aircrack-ng>iesire_fara_eroare>iesire_cu_eroare

 

Observăm că nimic nu se întoarce pe ecranul nostru, nici o ieșire standard sau o eroare standard.

Pasul 4: Trimitem ambele ieșiri standard și intrări standard către același fișier

În cele din urmă, ce s-ar întâmpla dacă am dori ca atât eroarea standard cât și ieșirea standard să fie scrise în același fișier? Am putea tasta:

  • ls /etc/apt /etc/aircrack-ng >iesire_fara_eroare2>&1




Observați că nu am folosit 1 înainte de >iesire_fara_eroare ca implicit BASH la stdout dacă nu se utilizează un număr.

Sper că v-ați bucurat de această lecție rapidă în Linux despre stdin, stdout și stderror, dar avem mult mai multe de discutat, așa că nu uitați să reveniți pe Blackweb.ro!

Până data viitoare, să ne citim cu bine! 🙂

Choose your Reaction!
Leave a Comment

Your email address will not be published.