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 u tri točke ili iz njih.

Tada ćete to shvatiti na bolji način, ali ono što vam sada želim jasno objasniti je da pomoću cjevovoda ono što možete učiniti je usmjeravanje s jedne od tih točaka na druge. To omogućuje 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 točke o kojima sam govorio ili tokovi podataka, su:

  • stdin: odgovara 0 i standardni je ulaz. Općenito, standardni ulaz za * nix sustav je tipkovnica. Odnosno, ono što upišete bit će korištene informacije. Uz nju je povezan poseban uređaj koji je / dev / stdin.
  • stdout: identificirano s 1, to je standardni izlaz. Obično odgovara monitoru ili zaslonu vašeg računala, gdje možete vidjeti informacije. Na primjer, kada pokrenete naredbu ls, popis sadržaja prikazat će se na ekranu, zar ne? Povezani uređaj je / dev / stdout.
  • stderr: identificirano s 2, to je standardni izlaz pogreš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 prijeđu izravno 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 znakom |

s primjeri bolje ćete to razumjeti. Pretpostavimo da želite navesti sadržaj direktorija, ali vas zanima samo imena koja odgovaraju riječi doc. Tako biste mogli 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

Dakle, umjesto da vam pokaže sva imena, samo vam pokazuje one koje vas stvarno 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 programa ps (stdout), ono što on radi je da ga usmjeri prema ulazu grep filtra i u izlazu prikazuje samo ono što u ovom slučaju odgovara uzorku firefoxa ...

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 vidite mogućnosti je mnogo, sve što možete zamisliti i što vam je dozvoljeno. Čak i prikazuju samo prvi i zadnji redak datoteke, broje 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đer možete raditi s pogreške s | & 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 te da mogu dodatno proširiti njihove mogućnosti. U slučaju tee, ono što će dopustiti je da rezultat prethodnog programa prikaže 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 spremite u datoteku 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 doseže xargs da bi ga, kao argumente, proslijedio drugoj naredbi.

Još uvijek ne razumijete? To ćete vidjeti 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 pomoću naredbe rm da biste ih ručno izbrisali. 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, a 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 svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  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 obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Jose dijo

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

  2.   Danijel dijo

    Kakav dobar članak, trenutno proučavam I / O preusmjeravanje u knjizi Linux Command Line. Jasnije mi je za cijevi (cjevovod) i tri toka podataka. Zahvaljujemo na doprinosu. Lijep pozdrav.

  3.   01101001b dijo

    Primjer s xargovima odgovarao mi je poput rukavice. Točno danas bavio sam se detaljima višestrukog izlaza koje sam morao poslati "u dijelovima". xargovi su hodali pinturitom.
    Super zahvalna!