Pipes: co potřebujete vědět, abyste je mohli začít používat v GNU / Linux

potrubí

A potrubí nebo potrubíe je vlastně potrubí dostupné pro UNIX / Linux a velmi praktické. Ale abyste plně pochopili, co je to roura, měli byste vědět, že v prostředí * nix má 3 vestavěné datové toky. To pro ty, kteří to nevědí, znamená, že data mohou cestovat do nebo ze tří bodů.

Pak to pochopíte lépe, ale to, co vám teď chci objasnit, je to, že s potrubím, co můžete udělat, je přesměrovat z jednoho z těchto bodů do ostatních. To umožňuje převzít výstup nebo výsledek, který program hodí k vstupu jiného, ​​aby jej mohl použít atd. Pokusím se to vysvětlit několika praktickými příklady, které vám pomohou to velmi dobře pochopit.

O těch bodech, o kterých jsem mluvil, nebo datové toky, jsou:

  • stdin: odpovídá 0 a je standardním vstupem. Obvykle je standardním vstupem pro systém * nix klávesnice. To znamená, že to, co napíšete, budou použité informace. Má k tomu přidružené speciální zařízení, kterým je / dev / stdin.
  • stdout: identifikováno jako 1, jedná se o standardní výstup. Obvykle to odpovídá monitoru nebo obrazovce vašeho počítače, kde můžete tyto informace vidět. Když například spustíte příkaz ls, na obrazovce se zobrazí seznam obsahu, že? Přidružené zařízení je / dev / stdout.
  • stderr: identifikováno jako 2, jedná se o standardní chybový výstup, pokud dojde k chybě v programu. Přidružené zařízení je / dev / stderr.

Pomocí kanálu můžete standardní výstup nebo výstup jednoho příkazu předat přímo na standardní vstup jiného. To znamená, že můžete jeden program přivést k dalšímu. Místo použití parametrů zadaných pomocí klávesnice doručí potrubí informace generované předchozím příkazem prostřednictvím tohoto kanálu představovaného |

s příklady pochopíš to lépe. Předpokládejme, že chcete vypsat obsah adresáře, ale zajímá vás pouze zobrazení jmen, která odpovídají slovu doc. Takže můžete použít potrubí k propojení výstupu ls na vstup filtru grep, abyste mu řekli, aby zobrazoval pouze ty, které odpovídají tomuto vzoru:

ls -l | grep doc

Takže místo toho, aby vám ukázala všechna jména, vám to jen ukáže ty, které vás opravdu zajímají. Totéž můžete udělat s obsahem souboru. Představte si, že chcete vidět pouze informace o procesech s názvem firefox a ne všechny:

ps aux | grep firefox

Místo toho, aby na obrazovce zobrazoval veškerý výstup programu ps (stdout), to, co dělá, je nasměrovat jej na vstup filtru grep a na výstupu zobrazí pouze to, co v tomto případě odpovídá vzoru firefoxu ...

Pokud chcete, můžete použít různé trubky přivést výstup jednoho příkazu na vstup dalšího druhého příkazu a výstup tohoto druhého na vstup třetího atd. Například:

cat libro | grep love | more

Jak vidíte, možností je mnoho, vše, co si dokážete představit a je povoleno. Dokonce zobrazit pouze první a poslední řádek souboru, spočítat řádky, které vstupují do wc, které pocházejí ze seznamu, a dokonce je řadit:

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

Můžete také pracovat s chyby s | & a například hledejte slovo výstraha ve výstupu skriptu, pokud selže:

./miscript |& grep alerta 

A konečně existují dva příkazy úzce spojené s kanály, které jsou tričko a xargs a že mohou dále rozšiřovat jejich možnosti. V případě trička to, co dovolí, je ukázat výsledek předchozího programu na standardním výstupu, abyste ho mohli vidět, a kromě toho jej můžete převést do jiného souboru. Příkladem by bylo, kdybyste vypsali obsah adresáře a chtěli byste vidět výstup ls -l v tuto chvíli a také ho uložit v souboru listing.txt:

ls -l | tee listado.txt

Pokud nepoužíváte tričko, nebudete moci vidět výstup na konzole ...

Y xargs v některých případech je to ještě zajímavější. V tomto případě je schopen sestavit příkaz ze standardního vstupu, který přijímá prostřednictvím kanálu. Jinými slovy, je schopen zachytit vše, co předchozí program spustil prostřednictvím svého výstupu a co dosáhne xargs potrubím, aby jej předal zase jinému příkazu jako argumenty.

Stále to nechápete? Na příkladu to uvidíte mnohem lépe. Představte si, že chcete odstranit všechny ty zatracené soubory thumbs.db z adresáře, disku nebo oddílu. Pokud je jich mnoho, může být nemožné přejít jeden po druhém pomocí příkazu rm k jejich ručnímu odstranění. Ale s xargs můžete vše automatizovat. A můžete to udělat pomocí find k jejich vyhledání, odeslat výstup prostřednictvím vstupu xargs a to zase dá rm jména jako argumenty. Proto budou všechny nalezené automaticky odstraněny:

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

Předpokládejme například, že najde locates /home/name/thumbs.db, /media/test/thumbs.db a /tmp/thumbs.db. Xargs je přenese do rm, jako by to byly argumenty. To znamená, jako bychom provedli: rm /home/name/thumbs.db, pak rm /media/test/thumbs.db a poté rm /tmp/thumbs.db.


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Za data odpovídá: AB Internet Networks 2008 SL
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.

  1.   Jose řekl

    Výborně, tyto informace jsou pro nás linuxové uživatele velmi důležité

  2.   Daniel řekl

    Jaký dobrý článek, právě teď, když studuji přesměrování I / O v knize Linux Command Line. Je mi jasnější o potrubích (Pipeline) a třech datových tocích. Příspěvek si ceníme. Pozdravy.

  3.   01101001b řekl

    Příklad s xargs mi vyhovoval jako rukavice. Přesně dnes jsem se zabýval podrobností vícenásobného opuštění, které jsem musel poslat „po částech“. xargs prošel pinturitou.
    Super vděčný!