Torud: mida peate teadma, et neid GNU / Linuxis kasutada

torujuhtmed

A. toru või torue on tegelikult UNIX / Linuxi jaoks saadaval olev torujuhe ja väga praktiline. Kuid toru täielikuks mõistmiseks peaksite teadma, et * nixi keskkonnas on sellel 3 sisseehitatud andmevoogu. See tähendab neile, kes ei tea, et andmed võivad liikuda kolme punkti või sealt edasi.

Siis saate sellest paremini aru, kuid mida ma tahan teile nüüd selgeks teha, on see, et torujuhtme abil saate kanali suunata ühest neist punktidest teistele. See võimaldab võtta väljundi või tulemuse, mille programm viskab teise sisendi poole, et see saaks kasutada jne. Püüan seda selgitada mõne praktilise näitega, mis aitavad teil sellest väga hästi aru saada.

Need punktid, millest ma rääkisin või andmevood, on:

  • stdin: vastab 0-le ja on standardne sisend. Üldiselt on * nix-süsteemi standardne sisend klaviatuur. See tähendab, et see, mida sisestate, on kasutatav teave. Tal on sellega seotud spetsiaalne seade, mis on / dev / stdin.
  • stdout: tähistatud 1-ga, on see standardväljund. Tavaliselt vastab see teie arvuti kuvarile või ekraanile, kus näete teavet. Näiteks kui käivitate käsu ls, kuvatakse ekraanil sisuloend, eks? Seotud seade on / dev / stdout.
  • stderr: tähistatud 2-ga, on see standardne veaväljund, kui programmis ilmneb tõrge. Seotud seade on / dev / stderr.

Gaasijuhtme abil saate ühe käsu standardväljundi või stdouti viia otse teise standardsisendisse. See tähendab, et saate ühe programmi toita teise. Klaviatuuri sisestatud parameetrite asemel edastab toru eelmise käsu loodud teabe selle torujuhtme kaudu, mida tähistab |

koos näited saate sellest paremini aru. Oletame, et soovite loetleda kataloogi sisu, kuid teid huvitab ainult nende nimede vaatamine, mis vastavad sõnale doc. Nii et saate torujuhtme abil ls väljundi viia grep-filtri sisendisse, et öelda, et kuvatakse ainult need, mis vastavad sellele mustrile:

ls -l | grep doc

Nii et selle asemel, et näidata teile kõiki nimesid, näitab see lihtsalt teid need, mis teid tõeliselt huvitavad. Sama saate teha ka faili sisuga. Kujutage ette, et soovite näha ainult Firefoxi-nimeliste protsesside teavet, mitte kõiki:

ps aux | grep firefox

Selle asemel, et ekraanil näidata kogu ps-programmi väljundit (stdout), suunab see selle grep-filtri sisendi suunas ja näitab väljundis ainult seda, mis vastab sel juhul Firefoxi mustrile ...

Kui soovite, võite kasutada mitmesugused torud viia ühe käsu väljund teise teise käsu sisendisse ja selle sekundi väljund kolmanda sisendisse jne. Näiteks:

cat libro | grep love | more

Nagu näete, võimalusi on palju, kõik, mida võite ette kujutada ja mis on lubatud. Näidake isegi ainult faili esimest ja viimast rida, loendage loendist pärinevad read, mis sisestavad wc, ja isegi sorteerige need:

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

Võite ka töötada vead | ja otsige näiteks skripti väljundist sõna alarm, kui see ebaõnnestub:

./miscript |& grep alerta 

Ja lõpuks on torudega tihedalt seotud kaks käsku tee ja xargs ja et nad saavad nende võimalusi veelgi laiendada. Tee puhul lubab see eelmise programmi tulemuse kuvamist standardväljundil, nii et näete seda, ja lisaks sellele saab see teisele failile edastada. Näide võiks olla see, kui loendate kataloogi sisu ja soovite parajasti näha ls -l väljundit ning soovite selle ka faili list.txt salvestada:

ls -l | tee listado.txt

Kui te ei kasuta tee, ei näe te oma konsooli väljundit ...

Y xargs mõnel juhul on see veelgi huvitavam. Sel juhul suudab ta luua käsu torujuhtme kaudu saadud standardsisendist. Teisisõnu on see võimeline hõivama kõike, mida eelmine programm on oma väljundi kaudu käivitanud ja mis jõuab torujuhtme kaudu xargsini, et see argumentidena teisele käsule edastada.

Ikka ei saa aru? Näete seda näite abil palju paremini. Kujutage ette, et soovite eemaldada kõik neetud thumbs.db-failid kataloogist, kettalt või sektsioonist. Kui neid on palju, võib olla võimatu minna käsuga rm ükshaaval, et neid käsitsi kustutada. Kuid xargsi abil saate kõike automatiseerida. Ja saate seda teha leidmise abil, et neid leida, saata väljund läbi xargsi sisendi ja see omakorda annab rm-le argumendid. Seetõttu kustutatakse kõik asukohad automaatselt:

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

Oletame näiteks, et leidke asukoht /home/name/thumbs.db, /media/test/thumbs.db ja /tmp/thumbs.db. Noh, xargs toimetab nad rm-sse, nagu oleksid nad vaidlused. See tähendab, nagu oleksime hukanud: rm /home/name/thumbs.db, siis rm /media/test/thumbs.db ja seejärel rm /tmp/thumbs.db.


Jäta oma kommentaar

Sinu e-postiaadressi ei avaldata. Kohustuslikud väljad on tähistatud *

*

*

  1. Andmete eest vastutav: AB Internet Networks 2008 SL
  2. Andmete eesmärk: Rämpsposti kontrollimine, kommentaaride haldamine.
  3. Seadustamine: teie nõusolek
  4. Andmete edastamine: andmeid ei edastata kolmandatele isikutele, välja arvatud juriidilise kohustuse alusel.
  5. Andmete salvestamine: andmebaas, mida haldab Occentus Networks (EL)
  6. Õigused: igal ajal saate oma teavet piirata, taastada ja kustutada.

  1.   Jose DIJO

    Suurepärane, see teave on meie Linuxi kasutajate jaoks väga oluline

  2.   Daniel DIJO

    Milline hea artikkel, praegu, kui uurin Linuxi käsurea raamatus sisend- ja väljundsiiret. Mulle on torude (Pipeline) ja kolme andmevoo kohta selgem. Panust hinnatakse. Tervitused.

  3.   01101001b DIJO

    Xargsiga näide sobis mulle nagu kinnas. Täpselt täna tegelesin mitme väljapääsuga, mille pidin saatma "osade kaupa". xargs kõndis pinturitaga.
    Super tänulik!