Cum se folosește comanda Tee în Linux

Cum se folosește comanda Tee în Linux
⏱️ 4 min read

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.

Ce face Tee?

O comandă precum

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

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.

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.

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ă:

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:

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

și apoi

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ă.

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.

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.

Tee Grep Conținutul fișierului

Î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.

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.

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

You may also like...