Pipes: amit tudnod kell, hogy elkezdd használni GNU / Linux rendszerben

csővezetékek

egy cső vagy pipaAz e valójában egy UNIX / Linux számára elérhető folyamat, és nagyon praktikus. De annak teljes megértéséhez, hogy mi a cső, tudnia kell, hogy * nix környezetben 3 beépített adatfolyam van. Ez azok számára, akik nem tudják, azt jelenti, hogy az adatok három pontra vagy onnan indulhatnak.

Akkor ezt jobban meg fogja érteni, de amit most szeretnék világossá tenni számodra, az az, hogy egy csővezetékkel azt teheted, hogy csatornázol egyik pontból a másikba. Ez lehetővé teszi annak a kimenetnek vagy eredménynek a felvételét, amelyet a program egy másik bemenete felé dob, hogy ezt használhassa stb. Megpróbálom elmagyarázni néhány gyakorlati példával, amelyek segítenek nagyon jól megérteni.

Azok a pontok, amelyekről beszéltem, ill adatfolyamok, vannak:

  • stdin: 0-nak felel meg és a standard bemenet. Általában a * nix rendszer szokásos bemenete a billentyűzet. Vagyis amit beír, az a felhasznált információ lesz. Van hozzá egy speciális eszköze, amely a / dev / stdin.
  • stdout: 1-vel azonosítva, ez a standard kimenet. Általában a számítógép monitorának vagy képernyőjének felel meg, ahol láthatja az információkat. Például, amikor futtat egy ls parancsot, a tartalomjegyzék megjelenik a képernyőn, igaz? A társított eszköz a / dev / stdout.
  • stderr: 2-vel azonosítva, ez a szokásos hibakimenet, ha egy programban hiba lép fel. A társított eszköz a / dev / stderr.

Egy csővezeték segítségével az egyik parancs normál kimenetét vagy stdoutját közvetlenül a másik standard bemenetére adhatja át. Vagyis megteheti, hogy az egyik program betáplálja a másikat. A billentyűzet által beírt paraméterek használata helyett egy cső az előző parancs által generált információkat ezen a |

a a példák jobban meg fogod érteni. Tegyük fel, hogy fel akarja sorolni egy könyvtár tartalmát, de csak a doc szóval egyező nevek érdeklik. Tehát egy csővezeték segítségével az ls kimenetét a grep szűrő bemenetébe vezetheti, hogy azt mondhassa neki, hogy csak azokat jelenítse meg, amelyek megfelelnek az adott mintának:

ls -l | grep doc

Tehát ahelyett, hogy megmutatná az összes nevet, csak megmutatja azok, amelyek valóban érdekelnek. Ugyanezt megteheti egy fájl tartalmával is. Képzelje el, hogy csak a Firefox nevű folyamatok információit szeretné látni, nem pedig az összeset:

ps aux | grep firefox

Ahelyett, hogy a ps program összes kimenetét megjelenítené a képernyőn (stdout), a csatorna azt a grep szűrő bemenete felé irányítja, és a kimenetben csak azt mutatja meg, ami ebben az esetben megfelel a Firefox mintának ...

Ha akarod, használhatod különféle csövek hogy az egyik parancs kimenetét egy másik második parancs bemenetére, a második kimenetét pedig a harmadik bemenetére hozzuk stb. Például:

cat libro | grep love | more

Mint látod, a lehetőségek sokak, mindazt, amit el tud képzelni, és megengedett. Akár csak egy fájl első és utolsó sorát jelenítse meg, számolja meg a listából származó sorokat, amelyek beírják a wc-t, és még rendezni is őket:

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

Dolgozni is lehet hibák a & & val és például keresse meg a figyelmeztetést a parancsfájl kimenetén, ha nem sikerül:

./miscript |& grep alerta 

És végül két parancs szorosan kapcsolódik a csövekhez tee és xargs és hogy tovább bővíthetik ezek lehetőségeit. A tee esetében az megengedi, hogy az előző program eredményét megjelenítse a szabványos kimeneten, hogy láthassa, és ezen felül egy másik fájlba is csempészhesse. Erre példa lehet, ha felsorolja egy könyvtár tartalmát, és meg akarja tekinteni az ls -l kimenetét, és el is menti azt a list.txt fájlba:

ls -l | tee listado.txt

Ha nem használja a tee-t, akkor nem fogja látni a kimenetet a konzolján ...

Y xargs egyes esetekben még érdekesebb. Ebben az esetben képes parancsot építeni a csővezetéken keresztül kapott standard bemenetből. Más szavakkal, képes rögzíteni mindazt, amit egy korábbi program elindított a kimenete révén, és amely eléri az xargs-t a folyamaton keresztül, hogy argumentumként továbbítsa egy másik parancsnak.

Még mindig nem érted? Sokkal jobban fogja látni egy példával. Képzelje el, hogy el akarja távolítani az összes átkozott thumbs.db fájlt egy könyvtárból, lemezről vagy partícióról. Ha sok van, lehet, hogy az rm paranccsal egyesével nem lehet manuálisan törölni őket. De az xargs segítségével mindent automatizálhat. És megteheti a find használatával, hogy megtalálja őket, elküldje a kimenetet az xargs bemenetén keresztül, és ez viszont rm-nek adja meg a neveket argumentumként. Ezért az összes elhelyezett automatikusan törlődik:

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

Tegyük fel például, hogy a keresés megkeresi a /home/name/thumbs.db, /media/test/thumbs.db és /tmp/thumbs.db fájlokat. Nos, az xargs úgy fogja őket eljuttatni rm-hez, mintha érvek lennének. Vagyis mintha végrehajtottuk volna: rm /home/name/thumbs.db, majd rm /media/test/thumbs.db, majd rm /tmp/thumbs.db.


Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: AB Internet Networks 2008 SL
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.

  1.   Jose dijo

    Kiváló, ezek az információk nagyon fontosak nekünk, linux felhasználóknak

  2.   Daniel dijo

    Milyen jó cikk, most, amikor az I / O átirányítást tanulmányozom a Linux parancssori könyvében. Számomra egyértelműbb a csövek (Pipeline) és a három adatfolyam. A hozzájárulást értékelik. Üdvözlet.

  3.   01101001b dijo

    Az xargs példája nekem kesztyűként illett. Pontosan ma a többszörös kilépés részleteivel foglalkoztam, amelyet "részenként" kellett küldenem. xargs egy pinturitát sétált.
    Szuper hálás!