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.
Suurepärane, see teave on meie Linuxi kasutajate jaoks väga oluline
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.
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!