Dacă folosiți vreodată țevi și redirecționări sub shell-ul dvs. Linux, este posibil să fiți uneori nevoit să utilizați tee
utilitate.
Table of Contents
Ce face Tee?
O comandă precum
ls
va afișa conținutul directorului curent. Cu alte cuvinte, afișează acest conținut pe stdout (ieșire standard), care este în mod normal ecranul dvs. sau, mai exact, afișajul terminalului virtual.
O comandă de genul
ls > file123
nu va afișa nimic pe ecran. Asta pentru că >
semnul redirecționează toate ieșirile către un fișier în loc să îl afișeze pe stdout. fișierul 123 va fi acum completat cu conținutul care a fost afișat anterior pe ecran.
Pentru a afișa conținutul directorului pe ecran și a scrie acest lucru într-un fișier, utilizați două comenzi. Cu tee
poți face ambele lucruri simultan.
ls | tee file123
De ce să folosiți Tee dacă puteți rula o comandă similară de două ori?
În exemplul de mai sus, evident că nu aveți nevoie de tee dacă puteți executa ls
în mod normal și apoi executați-l din nou și redirecționați ieșirea către un fișier. Cu toate acestea, veți întâlni situații în care rezultatul va fi unic. Imaginați-vă un scenariu în care încercați să diagnosticați o problemă. Alergi diagnose | tee error.log
. Erorile pe care le primiți ar putea fi unice. Doriți să fie afișate pe ecran, astfel încât să puteți vedea ce se întâmplă pe măsură ce testați lucrurile. Dar doriți, de asemenea, ca aceste erori să fie salvate într-un fișier, astfel încât să le puteți examina mai târziu sau să lipiți rezultatul într-un forum de discuții și să întrebați oamenii despre asta.
O altă situație, adesea întâlnită, atunci când este posibil să aveți nevoie de tee, este următoarea: doriți să scrieți ieșirea unei comenzi într-o locație în care numai utilizatorul root poate citi sau scrie. Acest lucru nu va funcționa.
/sbin/blkid > /root/somefile
Apoi, s-ar putea să vă gândiți: „Ei bine, desigur, folosiți doar sudo!” Și veți fi surprinși că nici acest lucru nu funcționează:
sudo blkid > /root/somefile
Asta pentru că după sudo blkid
se execută, sunteți încă conectat ca utilizator obișnuit, non-root. Și coajă (de obicei bash), încearcă să scrie la /root/somefile
cu acreditări de utilizator obișnuite. Pentru a rezolva acest lucru, puteți utiliza tee:
/sbin/blkid | sudo tee /root/somefile
Adăugarea textului și redirecționarea erorilor
tee este o comandă utilă, dar simplă; o bază command | tee somefile
va fi suficient de cele mai multe ori. Cu toate acestea, există două scenarii pe care le puteți întâlni și care vor necesita aceste sfaturi.
Primul lucru de știut este că tee, în mod implicit, suprascrie întotdeauna un fișier. Dacă alergi
ls | tee somefile
și apoi
ls /tmp | tee somefile
a doua comandă va suprascrie conținutul unui fișier și veți vedea numai conținutul ultimei comenzi executate. Pentru a schimba acest comportament, puteți face să adăugați text în loc să suprascrieți. Pentru a face acest lucru, utilizați doar -a
comutator de comandă.
ls | tee -a somefile
Al doilea lucru de știut este că nu toate rezultatele sunt la fel. Mesajele de eroare sunt tratate diferit și, deși apar pe ecran, nu sunt considerate standard, deci nu vor fi surprinse de tee. (Sunt considerați stderr.) Iată un exemplu despre grep.
grep -r L2TP /etc | tee somefile
Se va afișa ceva de genul următoarei imagini.
Mesajele refuzate cu permisiunea sunt scrise pe stderr. Singurul lucru scris în stdout este textul evidențiat. De aceea, veți observa că conținutul „somefile” este ceea ce este prezentat în imaginea de mai jos.

În acest caz, unde grep este utilizat pentru a căuta text, este util ca mesajele de eroare să nu fie redirecționate către fișier. Ar umple doar fișierul cu gunoi inutil. Vrei doar să vezi rezultatele găsite. Dar când aveți nevoie de mesajele de eroare, utilizați 2>&1
, care redirecționează stderr către stdout.
grep -r L2TP /etc 2>&1 | tee somefile
Cu această comandă veți observa că somefile conține acum și mesajele de eroare.
Concluzie
Sperăm că acest tutorial acoperă tot ce aveți nevoie pentru a profita la maximum de comanda tee. Dar dacă întâmpinați o situație în care vă blocați cu tee, lăsați un comentariu mai jos și s-ar putea să vă putem ajuta.