Cijevi: što trebate znati da biste ih počeli koristiti u GNU / Linuxu

cjevovodi

Una cijev ili cijevZapravo je cjevovod dostupan za UNIX / Linux i vrlo je praktičan. Ali da biste u potpunosti razumjeli što je cijev, trebali biste znati da u * nix okruženju ima 3 ugrađena toka podataka. To za one koji ne znaju znači da podaci mogu putovati do ili iz tri točke.

Tada ćete to shvatiti na bolji način, ali ono što vam sada želim pojasniti je da pomoću cjevovoda ono što možete učiniti je usmjeravanje s jedne od tih točaka na druge. To omogućava uzimanje rezultata ili rezultata koje program baca prema ulazu drugog da bi se taj koristio, itd. Pokušat ću to objasniti na nekoliko praktičnih primjera koji će vam pomoći da to vrlo dobro razumijete.

Te tačke o kojima sam govorio ili tokovi podataka, su:

  • stdin: odgovara 0 i standardni je ulaz. Generalno, standardni ulaz za * nix sistem je tastatura. Odnosno, ono što upišete bit će korištene informacije. Uz nju je povezan poseban uređaj koji je / dev / stdin.
  • stdout: identificiran s 1, to je standardni izlaz. Obično odgovara monitoru ili ekranu vašeg računara, na kojem možete vidjeti informacije. Na primjer, kada pokrenete ls naredbu, popis sadržaja će se prikazati na ekranu, zar ne? Povezani uređaj je / dev / stdout.
  • stderr: identificirano sa 2, to je standardni izlaz greške, jer kada se greška dogodi u programu. Povezani uređaj je / dev / stderr.

Pomoću cjevovoda možete napraviti da standardni izlaz ili stdout jedne naredbe prelaze direktno na standardni ulaz druge. Odnosno, možete natjerati jedan program da hrani drugi. Umjesto da koristi parametre unesene s tipkovnice, cijev isporučuje informacije generirane prethodnom naredbom kroz ovaj cjevovod predstavljen |

con primjeri bolje ćete razumjeti. Pretpostavimo da želite navesti sadržaj direktorija, ali vas zanima samo imena koja odgovaraju riječi doc. Dakle, mogli biste koristiti cjevovod za usmjeravanje izlaza ls na ulaz grep filtra kako biste mu rekli da prikazuje samo one koji odgovaraju tom uzorku:

ls -l | grep doc

Umjesto da vam pokaže sva imena, samo vam pokazuje one koje vas zaista zanimaju. To možete učiniti i sa sadržajem datoteke. Zamislite da želite vidjeti samo informacije o procesima nazvanim firefox, a ne sve:

ps aux | grep firefox

Umjesto da na ekranu prikaže sav izlaz ps programa (stdout), ono što on radi je da ga usmjeri prema ulazu grep filtra i u izlazu prikazuje samo ono što odgovara uzorku firefoxa u ovom slučaju ...

Ako želite, možete koristiti razne cijevi da se izlaz jedne naredbe dovede na ulaz druge druge naredbe, a izlaz te sekunde na ulaz treće i tako dalje. Na primjer:

cat libro | grep love | more

Kao što vidiš, mogućnosti je mnogo, sve što možete zamisliti i što vam je dozvoljeno. Čak prikazuju samo prvi i posljednji redak datoteke, prebroje redove koji ulaze u wc koji dolaze s popisa, pa čak i sortiraju:

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

Takođe možete raditi sa greške u | & i na primjer potražite riječ upozorenje u izlazu skripte ako ne uspije:

./miscript |& grep alerta 

I na kraju, postoje dvije naredbe usko povezane s cijevima koje jesu tee i xargs i da mogu dalje proširiti njihove mogućnosti. U slučaju tee, ono što će dopustiti je prikazivanje rezultata prethodnog programa na standardnom izlazu, tako da ga možete vidjeti, a uz to, može ga usmjeriti u drugu datoteku. Primjer bi mogao biti ako navedete sadržaj direktorija i želite trenutno vidjeti izlaz ls -l, a također ga sačuvate u datoteci listing.txt:

ls -l | tee listado.txt

Ako ne koristite tee, nećete moći vidjeti izlaz na svojoj konzoli ...

Y xargs u nekim je slučajevima još zanimljiviji. U ovom je slučaju u stanju izgraditi naredbu od standardnog ulaza koji prima kroz cjevovod. Drugim riječima, sposoban je hvatati sve što je prethodni program lansirao kroz svoj izlaz i što kroz cjevovod dopire do xargova da bi ga, kao red, proslijedio drugoj naredbi kao argumente.

Još uvijek ne razumijete? Vidjet ćete to puno bolje na primjeru. Zamislite da želite ukloniti sve proklete datoteke thumbs.db iz direktorija, diska ili particije. Ako ih ima mnogo, možda će biti nemoguće krenuti jedan po jedan s rm naredbom da ih ručno izbrišete. Ali s xargovima možete sve automatizirati. A to možete učiniti koristeći find da biste ih locirali, poslali izlaz kroz ulaz xargs i to će zauzvrat dati rm imena kao argumente. Stoga će se svi locirani automatski izbrisati:

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

Na primjer, pretpostavimo da find pronalazi /home/name/thumbs.db, /media/test/thumbs.db i /tmp/thumbs.db. Pa, xargs će ih isporučiti rm-u kao da su argumenti. Odnosno, kao da smo izvršili: rm /home/name/thumbs.db, zatim rm /media/test/thumbs.db pa rm /tmp/thumbs.db.


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Odgovoran za podatke: AB Internet Networks 2008 SL
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Jose rekao je

    Izvrsno, ove informacije su vrlo važne za nas Linux korisnike

  2.   Danijel rekao je

    Kakav dobar članak, upravo sada kada proučavam preusmjeravanje I / O u knjizi Linux Command Line. Jasnije mi je o vodovima (cjevovodu) i tri toka podataka. Zahvaljujemo na doprinosu. Pozdrav.

  3.   01101001b rekao je

    Primjer s xargovima odgovarao mi je poput rukavice. Točno danas bavio sam se detaljima višestrukog izlaza koje sam morao poslati "u dijelovima". xargs je hodao pinturitu.
    Super zahvalan!