GNU/Linux >> Znalost Linux >  >> Linux

Jak používat Pipes a Named Pipes v Linuxu (s příklady)

Jedním z nejvýkonnějších shellových operátorů v Linuxu je roura. V tomto článku uvidíme, jak běžné a pojmenované roury fungují, jak je používat a jak se od sebe liší.

Pipes jsou jednou z nejcennějších funkcí příkazového řádku operačních systémů Linux a Unix. Trubky se používají v různých aplikacích. Pokud se podíváte na jakýkoli článek příkazového řádku systému Linux, všimnete si, že se často objevují kanály.

Symbol svislé čáry | označuje potrubí. Díky rouře můžete převzít výstup z jednoho příkazu a vložit jej do jiného příkazu jako vstup.

Výsledkem je, že výstup jednoho příkazu lze použít jako vstup pro jiný a výstup tohoto příkazu lze použít jako vstup pro další příkaz atd.

Nejste tedy omezeni na jeden zadaný příkaz. Můžete je naskládat, kolikrát chcete.

Jinými slovy, roura je forma přesměrování používaná v Linuxu k odeslání výstupu jednoho programu do jiného programu k dalšímu zpracování. Trubky vám umožňují provádět operace, které shell po vybalení nepodporuje.

Syntaxe příkazu kanálu nebo nepojmenovaného kanálu je | znak mezi libovolnými dvěma příkazy:

command1 | command2 | ... | commandN

Jak funguje potrubí v Linuxu

Chcete-li vidět, jak potrubí funguje, podívejme se na příklady níže.

Máme adresář plný mnoha různých typů souborů. Chceme tedy vědět, kolik souborů určitého druhu je v tomto adresáři.

Seznam souborů tedy můžeme snadno získat pomocí ls příkaz:

ls -l

K oddělení typů souborů, které hledáme, použijeme grep. Například hledáme soubory se slovem txt v jejich názvu nebo jako přípona souboru.

Použijeme speciální shellový znak | směrovat ls ‘ výstup do grep .

ls | grep txt

Jak můžete vidět z obrázku výše, výstup ls příkaz nebyl odeslán do okna terminálu.

Výsledek se proto na obrazovce nezobrazí. Místo toho je přesměrován na vstup grep příkaz. Výstup, který vidíme výše, pochází z grep , poslední příkaz v tomto řetězci.

Nyní začněme prodlužovat náš řetězec. Můžeme počítat soubory txt přidáním wc příkaz k řetězu. Použijeme -l možnost (počet řádků) s wc .

ls | grep txt | wc -l

Ve výše uvedeném příkladu grep již není posledním příkazem v řetězci, takže nevidíme jeho výstup. Místo toho výstup grep se přivádí do wc příkaz.

Výsledek, který vidíme v okně terminálu, pochází z wc . Hlásí dva soubory, txt v adresáři.

Co je to Named Pipe v Linuxu?

Jak už sám název napovídá, jedná se o dýmky s názvy. Jedním z klíčových rozdílů mezi běžnými kanály a pojmenovanými kanály je to, že pojmenované kanály jsou přítomny v systému souborů . To znamená, že se zobrazují jako soubory.

Pojmenovaná roura v Linuxu je metoda pro předávání informací z jednoho počítačového procesu do druhého pomocí roury, která má konkrétní název. Pojmenované dýmky jsou také známé jako FIFO, což znamená First In, First Out .

Pojmenovaný kanál můžete vytvořit pomocí mkfifo příkaz. Například:

mkfifo mypipe

Zda je soubor pojmenovaným kanálem, poznáte podle p bit v sekci oprávnění k souboru.

ls -l mypipe
prw-r--r--  1 root     root         0 Mar 20 12:58 mypipe

Pojmenované kanály jsou soubory v samotném systému souborů. Na rozdíl od standardního kanálu je pojmenovaný kanál přístupný jako součást souborového systému, stejně jako jakýkoli jiný typ souboru.

Obsah pojmenovaného kanálu je umístěn v paměti, nikoli zapisován na disk. Prochází se tedy pouze tehdy, když jsou oba konce trubky otevřeny. A do roury můžete zapisovat několikrát, než se otevře na druhém konci a přečte.

Použití pojmenovaných kanálů vám umožní vytvořit proces, ve kterém jeden proces zapisuje do kanálu a jiný z něj čte, aniž byste se museli starat o načasování nebo pečlivé uspořádání jejich interakce.

Chcete-li vidět, jak fungují pojmenované kanály, podívejme se na příklady níže. Nejprve vytvoříme naše pojmenované potrubí:

mkfifo mypipe

Nyní pojďme používat zprávy s tímto potrubím.

tail -f mypipe

Otevřete další okno terminálu a napište zprávu do tohoto kanálu:

echo "hi" >> mypipe

Nyní v prvním okně můžete vidět vytištěné „ahoj“:

tail -f pipe1
hi

Protože je to roura a zpráva byla spotřebována, pokud zkontrolujeme velikost souboru, můžete vidět, že je stále 0:

ls -l mypipe
prw-r--r-- 1 root root 0 Mar 20 14:11 mypipe

Vzhledem k tomu, že pojmenovaná roura je pouze linuxový soubor, můžeme k odstranění jednoho použít příkaz rm. Pro odstranění potrubí, které jsme vytvořili v předchozích příkladech, bychom tedy spustili:

rm mypipe

Kdy použít běžné nebo pojmenované potrubí

Použití běžného kanálu místo pojmenovaného kanálu v Linuxu závisí na vlastnostech, které hledáme. Některé mohou být persistence, obousměrná komunikace, název souboru, vytvoření filtru a omezení přístupových oprávnění.

Pokud například chceme filtrovat výstup příkazu vícekrát, jeví se jako nejvhodnější možnost použití anonymního kanálu.

Na druhou stranu, pokud potřebujeme název souboru a nechceme ukládat data na disk, hledáme pojmenovaný kanál.

Na závěr, až budete příště pracovat s příkazy na linuxovém terminálu a zjistíte, že přesouváte data mezi příkazy, doufejme, že pomocí potrubí bude tento proces rychlý a snadný.

Závěr

Tento článek vám ukázal všestrannost potrubí při použití v příkazech Linuxu. Je však relativně jednoduchý, ale dokáže vyřešit širokou škálu komplikovaných dotazů.

Tento nástroj příkazového řádku je navíc jednoduchý a funguje s platformami UNIX a Linux.

Další informace o pipe příkaz v systému Linux, podívejte se na stránku jeho příručky.


Linux
  1. Jak používat Linux Hexdump Command s praktickými příklady

  2. Jak používat Sed Command v Linuxu s příklady

  3. Jak používat Dig Command v Linuxu s příklady

  1. Příkaz SCP v Linuxu:Jak jej používat, s příklady

  2. Jak používat příkaz Rmmod v systému Linux s příklady

  3. Jak používat Linux Shutdown and Reboot Command s příklady

  1. Úvod do rour a pojmenovaných rour v Linuxu

  2. Jak používat Linux Shutdown Command s příklady

  3. Jak používat w Command v Linuxu s příklady