Cevi: kaj morate vedeti, da jih začnete uporabljati v GNU / Linux

cevi

A cev ali ceve je pravzaprav cevovod, ki je na voljo za UNIX / Linux in zelo praktičen. Če želite popolnoma razumeti, kaj je cev, morate vedeti, da ima v okolju * nix 3 vgrajene tokove podatkov. To za tiste, ki ne vedo, pomeni, da lahko podatki potujejo do treh točk ali od njih.

Potem boste to razumeli na boljši način, toda tisto, kar vam želim zdaj pojasniti, je, da lahko s cevovodom usmerite eno od teh točk na druge. To omogoča jemanje izhoda ali rezultata, ki ga program vrže proti vhodu drugega, da bi ga uporabil itd. Poskusil bom to razložiti z nekaj praktičnimi primeri, ki vam bodo pomagali zelo dobro razumeti.

Tiste točke, o katerih sem govoril oz podatkovni tokovi, So:

  • stdin: ustreza 0 in je standardni vhod. Običajno je standardni vhod za sistem * nix tipkovnica. Se pravi, kar boste vnesli, bodo uporabljene informacije. Z njo je povezana posebna naprava, ki je / dev / stdin.
  • stdout: označeno z 1, je standardni izhod. Običajno ustreza monitorju ali zaslonu vašega računalnika, kjer lahko vidite informacije. Na primer, ko zaženete ukaz ls, bo seznam vsebine prikazan na zaslonu, kajne? Povezana naprava je / dev / stdout.
  • stderr: označeno z 2, je standardni izhod za napako, saj kadar pride do napake v programu. Povezana naprava je / dev / stderr.

S cevovodom lahko naredite, da standardni izhod ali stdout enega ukaza preide neposredno na standardni vhod drugega. To pomeni, da lahko en program napajate drugega. Namesto da bi uporabil parametre, ki jih vnesete s tipkovnico, cev po tem cevovodu, ki ga predstavlja |, posreduje informacije, ki jih je ustvaril prejšnji ukaz

z primeri boste bolje razumeli. Recimo, da želite navesti vsebino imenika, vendar vas zanima samo imena, ki se ujemajo z besedo doc. Tako bi lahko uporabili cevovod za usmerjanje izhoda ls v vhod grep filtra in mu povedali, naj prikaže samo tiste, ki se ujemajo s tem vzorcem:

ls -l | grep doc

Torej, namesto da bi vam pokazal vsa imena, vam le pokaže tiste, ki vas resnično zanimajo. Enako lahko storite z vsebino datoteke. Predstavljajte si, da želite videti samo informacije o procesih z imenom firefox in ne vseh:

ps aux | grep firefox

Namesto da bi na zaslonu prikazal ves izhod programa ps (stdout), ga usmerja proti vhodu grep filtra in v izhodu pokaže le, kaj v tem primeru ustreza vzorcu firefox ...

Če želite, lahko uporabite različne cevi da pripelje izhod enega ukaza na vhod drugega drugega, izhod tega drugega pa na vhod tretjega itd. Na primer:

cat libro | grep love | more

Kot vidite, možnosti je veliko, vse kar si lahko predstavljate in je dovoljeno. Prikažite celo samo prvo in zadnjo vrstico datoteke, preštejte vrstice, ki vstopajo v wc, ki prihajajo s seznama, in jih celo razvrstite:

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

Lahko tudi delate z napake z | & in na primer poiščite besedo opozorilo v izhodu skripta, če ne uspe:

./miscript |& grep alerta 

In končno, obstajata dva ukaza, ki sta tesno povezana s cevima, ki sta tee in xargs in da lahko te možnosti še razširijo. V primeru tee lahko dovoli, da se rezultat prejšnjega programa prikaže na standardnem izhodu, tako da ga lahko vidite, poleg tega pa ga lahko prenese v drugo datoteko. Primer bi bil, če navedete vsebino imenika in želite trenutno videti izhodne podatke ls -l in jih shranite tudi v datoteko listing.txt:

ls -l | tee listado.txt

Če ne uporabite tee, na konzoli ne boste mogli videti izhoda ...

Y xargs v nekaterih primerih je še bolj zanimivo. V tem primeru lahko sestavi ukaz iz standardnega vhoda, ki ga prejme po cevovodu. Z drugimi besedami, sposoben je zajeti vse, kar je prejšnji program sprožil skozi svoj izhod in ki skozi cevovod doseže xargs, da ga nato kot argumente posreduje drugemu ukazu.

Še vedno ne razumete? S primerom boste to videli veliko bolje. Predstavljajte si, da želite odstraniti vse preklete datoteke thumbs.db iz imenika, diska ali particije. Če jih je več, jih z ukazom rm nemogoče posamično izbrisati, da jih ročno izbrišete. Toda z xargi lahko avtomatizirate vse. To lahko storite z iskanjem, da jih poiščete, pošljete izhod skozi vhod xargs, to pa bo imelo rm imena kot argumente. Zato bodo vsi najdeni samodejno izbrisani:

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

Denimo, da najdi find najde /home/name/thumbs.db, /media/test/thumbs.db in /tmp/thumbs.db. No, xargs jih bo dostavil na rm, kot da bi bili argumenti. To pomeni, kot da bi izvedli: rm /home/name/thumbs.db, nato rm /media/test/thumbs.db in nato rm /tmp/thumbs.db.


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Odgovoren za podatke: AB Internet Networks 2008 SL
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   jose je dejal

    Odlično, te informacije so za nas uporabnike linuxa zelo pomembne

  2.   Daniel je dejal

    Kako dober članek, prav zdaj, ko preučujem preusmeritev V / I v knjigi Linux Command Line. Jasneje mi je glede cevi (cevovod) in treh podatkovnih tokov. Prispevek je cenjen. Pozdravi.

  3.   01101001b je dejal

    Primer z xargami mi je ustrezal kot rokavico. Točno danes sem se ukvarjal s podrobnostmi večkratnega izhoda, ki sem jih moral poslati "po delih". xargs je hodil pinturito.
    Super hvaležna!