Vamzdžiai: ką reikia žinoti, kad galėtumėte pradėti juos naudoti GNU / Linux

vamzdynai

A vamzdis arba vamzdise iš tikrųjų yra UNIX / Linux dujotiekis ir labai praktiškas. Tačiau norint visiškai suprasti, kas yra vamzdis, turėtumėte žinoti, kad * nix aplinkoje jis turi 3 įmontuotus duomenų srautus. Tai tiems, kurie nežino, reiškia, kad duomenys gali keliauti į tris taškus arba iš jų.

Tada tai suprasite geriau, bet tai, ką noriu jums dabar pasakyti, yra tai, kad naudodamiesi dujotiekiu galite nukreipti vieną iš tų taškų kitiems. Tai leidžia paimti išvestį ar rezultatą, kurį programa meta link kito įvesties, kad tas galėtų naudoti ir t. Pabandysiu tai paaiškinti keletu praktinių pavyzdžių, kurie padės jums tai labai gerai suprasti.

Tuos dalykus, apie kuriuos aš kalbėjau arba duomenų srautus, Jie yra:

  • stdin: atitinka 0 ir yra standartinė įvestis. Paprastai standartinė * nix sistemos įvestis yra klaviatūra. Tai yra tai, ką įvesite, bus naudojama informacija. Ji turi su juo susietą specialų įrenginį, kuris yra / dev / stdin.
  • stdout: identifikuojamas su 1, tai yra standartinė išvestis. Paprastai tai atitinka jūsų kompiuterio monitorių ar ekraną, kuriame galite pamatyti informaciją. Pavyzdžiui, paleidus komandą ls, turinio sąrašas bus rodomas ekrane, ar ne? Susijęs įrenginys yra / dev / stdout.
  • stderr: identifikuota su 2, tai yra standartinė klaidos išvestis, kai programoje įvyksta klaida. Susijęs įrenginys yra / dev / stderr.

Naudodamiesi dujotiekiu, galite padaryti, kad vienos komandos standartinis išvestis ar standartas pereitų tiesiai į kitos standartinę įvestį. Tai yra, jūs galite padaryti vieną programą tiekiamą kitą. Užuot naudojęs klaviatūros įvestus parametrus, vamzdis pateikia informaciją, kurią sugeneravo ankstesnė komanda per šį vamzdyną, kurį žymi |

su pavyzdžiai tai geriau suprasi. Tarkime, kad norite išvardyti katalogo turinį, tačiau jus domina tik vardai, atitinkantys žodį doc. Taigi, naudodamiesi dujotiekiu, įvesite ls išvestį į grep filtro įvestį, kad nurodytumėte rodyti tik tuos, kurie atitinka tą modelį:

ls -l | grep doc

Taigi, užuot rodęs visus vardus, jis tiesiog parodo jus tie, kurie jus tikrai domina. Tą patį galite padaryti ir su failo turiniu. Įsivaizduokite, kad norite pamatyti tik „Firefox“ pavadintų procesų informaciją, o ne visus:

ps aux | grep firefox

Užuot rodžius visą ps programos išvestį ekrane („stdout“), ji nukreipia ją į „Grep“ filtro įvestį ir išvestyje rodo tik tai, kas šiuo atveju atitinka „Firefox“ modelį ...

Jei norite, galite naudoti įvairūs vamzdžiai perkelti vienos komandos išvestį į kitos antros komandos įvestį, o tos sekundės išvestį į trečiosios įvestį ir pan. Pavyzdžiui:

cat libro | grep love | more

Kaip matote, galimybių yra daug, viskas, ką galite įsivaizduoti ir yra leidžiama. Net rodykite tik pirmąją ir paskutinę failo eilutes, suskaičiuokite eilutes, įvedančias wc, kurios yra iš sąrašo, ir netgi jas rūšiuokite:

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

Taip pat galite dirbti su klaidos su | ir, pavyzdžiui, scenarijaus išvestyje ieškokite žodžio įspėjimas, jei jis nepavyksta:

./miscript |& grep alerta 

Galiausiai yra dvi komandos, glaudžiai susijusios su vamzdžiais tee ir xargs ir kad jie gali dar labiau išplėsti jų galimybes. „Tee“ atveju tai leis parodyti ankstesnės programos rezultatą standartiniame išvestyje, kad galėtumėte jį pamatyti, be to, jis gali perkelti jį į kitą failą. Pavyzdys galėtų būti toks: jei išvardysite katalogo turinį ir norite pamatyti ls -l išvestį šiuo metu, taip pat turėsite jį išsaugoti faile list.txt:

ls -l | tee listado.txt

Jei nenaudosite „tee“, negalėsite matyti išvesties konsolėje ...

Y xargs kai kuriais atvejais tai dar įdomiau. Tokiu atveju jis sugeba sukurti komandą iš standartinio įvesties, kurią gauna per dujotiekį. Kitaip tariant, jis sugeba užfiksuoti viską, ką ankstesnė programa paleido per savo išvestį ir kuri pasiekia „xargs“ per dujotiekį, kad paeiliui perduotų ją kitai komandai kaip argumentus.

Vis dar nesuprantate? Tai pamatysite daug geriau su pavyzdžiu. Įsivaizduokite, kad norite pašalinti visus prakeiktus thumbs.db failus iš katalogo, disko ar skaidinio. Jei jų yra daug, gali būti neįmanoma pereiti po vieną su komanda rm, kad jas ištrintumėte rankiniu būdu. Bet naudodami „xargs“ galite viską automatizuoti. Ir jūs galite tai padaryti naudodami „Find“, kad surastumėte juos, išsiųstumėte išvestį per „xargs“ įvestį, o tai savo ruožtu suteiks rm pavadinimus kaip argumentus. Todėl visi esantys bus automatiškai ištrinti:

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

Pvz., Tarkime, suraskite /home/name/thumbs.db, /media/test/thumbs.db ir /tmp/thumbs.db. Na, xargs juos pristatys į rm, tarsi jie būtų argumentai. Tai yra, tarsi mes būtume įvykdę: rm /home/name/thumbs.db, tada rm /media/test/thumbs.db ir tada rm /tmp/thumbs.db.


Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Už duomenis atsakingas: AB Internet Networks 2008 SL
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.

  1.   Chosė sakė

    Puiku, ši informacija yra labai svarbi mums „Linux“ vartotojams

  2.   Danielis sakė

    Koks geras straipsnis, dabar, kai studijuoju įvesties / išvesties peradresavimą „Linux“ komandų eilutės knygoje. Man aiškiau apie vamzdžius (vamzdyną) ir tris duomenų srautus. Indėlis vertinamas. Sveikinimai.

  3.   01101001b sakė

    Pavyzdys su „xargs“ man tiko kaip pirštinė. Lygiai šiandien susidūriau su ta maža daugkartinio išėjimo detale, kurią turėjau išsiųsti „dalimis“. xargs ėjo pinturita.
    Labai dėkinga!