Pipes: ce trebuie să știți pentru a începe să le utilizați în GNU / Linux

conducte

o țeavă sau pipe este de fapt o conductă disponibilă pentru UNIX / Linux și este foarte practic. Dar pentru a înțelege pe deplin ce este o conductă, ar trebui să știți că într-un mediu * nix are 3 fluxuri de date încorporate. Asta, pentru cei care nu știu, înseamnă că datele pot călători către sau din trei puncte.

Atunci vei înțelege acest lucru într-un mod mai bun, dar ceea ce vreau să vă fie clar acum este că, cu o conductă, ceea ce puteți face este să canalizați de la unul dintre acele puncte către altele. Acest lucru permite preluarea rezultatului sau rezultatului pe care un program îl aruncă spre intrarea altuia pentru a fi folosit de acesta etc. Voi încerca să-l explic cu câteva exemple practice care vă vor ajuta să îl înțelegeți foarte bine.

Acele puncte despre care vorbeam sau fluxuri de date, sunteți:

  • stdin: corespunde la 0 și este intrarea standard. În general, introducerea de date standard pe un sistem * nix este tastatura. Adică ceea ce tastați va fi informația utilizată. Are un dispozitiv special asociat, care este / dev / stdin.
  • stdout: identificat cu 1, este ieșirea standard. De obicei, corespunde monitorului sau ecranului computerului dvs., de unde puteți vedea informațiile. De exemplu, atunci când executați o comandă ls, lista de conținut va fi afișată pe ecran, nu? Dispozitivul asociat este / dev / stdout.
  • stderr: identificat cu 2, este ieșirea de eroare standard, atunci când apare o eroare într-un program. Dispozitivul asociat este / dev / stderr.

Cu o conductă puteți face ca ieșirea standard sau stdout-ul unei comenzi să treacă direct la intrarea standard a altuia. Adică, puteți face ca un program să alimenteze altul. În loc să utilizeze parametrii introduși de tastatură, o conductă furnizează informațiile generate de comanda anterioară prin această conductă reprezentată de |

cu exemplele vei înțelege mai bine. Să presupunem că doriți să enumerați conținutul unui director, dar sunteți interesat doar să vedeți numele care se potrivesc cu cuvântul doc. Așadar, ați putea folosi o țeavă pentru a conduce ieșirea lui ls și să o duceți la intrarea filtrului grep pentru a-i spune să afișeze doar cele care se potrivesc cu acel model:

ls -l | grep doc

Deci, în loc să vă arate toate numele, vă arată doar cele care te interesează cu adevărat. Puteți face același lucru cu conținutul unui fișier. Imaginați-vă că doriți doar să vedeți informațiile proceselor numite firefox și nu toate:

ps aux | grep firefox

În loc să afișeze toate ieșirile programului ps pe ecran (stdout), ceea ce face este să-l canalizeze către intrarea filtrului grep și arată doar în ieșire ceea ce corespunde modelului firefox în acest caz ...

Dacă doriți, puteți utiliza diverse conducte pentru a aduce ieșirea unei comenzi la intrarea altei a doua comenzi, iar ieșirea acelei secunde la intrarea unei a treia și așa mai departe. De exemplu:

cat libro | grep love | more

După cum vedeți, posibilitățile sunt multe, tot ce îți poți imagina și ai voie. Chiar afișați doar prima și ultima linie a unui fișier, numărați liniile care intră în wc care provin din listă și chiar sortați-le:

cat listado | head
cat listado | tail
cat listado | wc -l
cat listado | sort

Puteți lucra și cu erori cu | & și, de exemplu, căutați cuvântul alert în ieșirea unui script dacă nu reușește:

./miscript |& grep alerta 

Și, în cele din urmă, există două comenzi strâns legate de conducte care sunt tee și xargs și că pot extinde și mai mult posibilitățile acestora. În cazul tee-ului, ceea ce va permite este să afișeze rezultatul programului anterior pe ieșirea standard, astfel încât să îl puteți vedea și, pe lângă acesta, îl poate conecta la un alt fișier. Un exemplu ar fi dacă listați conținutul unui director și doriți să vedeți rezultatul ls -l în acest moment și, de asemenea, să îl salvați într-un fișier listing.txt:

ls -l | tee listado.txt

Dacă nu utilizați tee, nu veți putea vedea ieșirea de pe consolă ...

Y xargs este și mai interesant în unele cazuri. În acest caz, este capabil să construiască o comandă din intrarea standard pe care o primește prin conductă. Cu alte cuvinte, este capabil să capteze tot ceea ce un program anterior a lansat prin ieșirea sa și care ajunge la xargs prin conductă pentru a-l transmite pe rând la o altă comandă ca argumente.

Încă nu-l înțelegi? O veți vedea mult mai bine cu un exemplu. Imaginați-vă că doriți să eliminați toate fișierele nenorocite thumbs.db dintr-un director, disc sau partiție. Dacă sunt multe, poate fi imposibil să mergeți unul câte unul cu comanda rm pentru a le șterge manual. Dar cu xargs puteți automatiza totul. Și o puteți face folosind găsiți pentru a le localiza, trimiteți ieșirea prin intrarea xargs și acest lucru va da rm numele ca argumente. Prin urmare, toate cele localizate vor fi șterse automat:

find ./ -name "thumbs.db" | xargs rm

De exemplu, să presupunem că găsiți localizează /home/name/thumbs.db, /media/test/thumbs.db și /tmp/thumbs.db. Ei bine, xargs le va livra la RM ca și cum ar fi argumente. Adică, ca și când am fi executat: rm /home/name/thumbs.db, apoi rm /media/test/thumbs.db și apoi rm /tmp/thumbs.db.


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: AB Internet Networks 2008 SL
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   Jose el a spus

    Excelent, aceste informații sunt foarte importante pentru noi utilizatorii Linux

  2.   Daniel el a spus

    Ce articol bun, chiar acum că studiez redirecționarea I / O în cartea Liniei de comandă Linux. Pentru mine sunt mai clare despre conducte (Pipeline) și cele trei fluxuri de date. Contribuția este apreciată. Salutari.

  3.   01101001b el a spus

    Exemplul cu xargs mi s-a potrivit ca o mănușă. Exact astăzi mă ocupam de acel mic detaliu al unei ieșiri multiple pe care trebuia să-l trimit „în părți”. xargs walking a pinturita.
    Super recunoscător!