GNU/Linux >> Znalost Linux >  >> Linux

Co jsou Pipes v Linuxu? Jak funguje přesměrování potrubí?

Možná jste použili syntaxi jako cmd0 | cmd1 | cmd2 ve vašem terminálu příliš často.

Pravděpodobně také víte, že je to přesměrování potrubí, které se používá k přesměrování výstupu jednoho příkazu jako vstupu do příkazu dalšího.

Ale víte, co se skrývá pod tím? Jak vlastně funguje přesměrování potrubí?

Nebojte se, protože dnes demystifikuji unixové dýmky, takže až příště půjdete na rande s těmi luxusními svislými pruhy, budete přesně vědět, co se děje.

Poznámka:Někdy jsem použil termín Unix, protože koncept rour (jako mnoho dalších věcí v Linuxu) pochází z Unixu.

Pipes v Linuxu:Obecná myšlenka

Zde je to, co všude uvidíte ohledně „co jsou unixové roury?“:

  • Unixové kanály jsou mechanismem IPC (Inter Process Communication), který přeposílá výstup jednoho programu na vstup jiného programu.

Toto je obecné vysvětlení, které každý poskytuje. Chci jít hlouběji. Přeformulujme předchozí řádek techničtějším způsobem tím, že odstraníme abstrakce:

  • Unixové kanály jsou mechanismem IPC (Inter Process Communication), který přebírá stdout programu a předá jej do stdin jiného programu prostřednictvím vyrovnávací paměti.

Mnohem lepší. Odstraněním abstrakce to bylo mnohem čistší a přesnější. Jak potrubí funguje, můžete se podívat na následující diagram:

Jedním z nejjednodušších příkladů příkazu roura je předání nějakého výstupu příkazu příkazu grep pro vyhledání konkrétního řetězce.

Můžete například vyhledávat soubory s názvem obsahujícím txt takto:

Mějte na paměti:Pipe přesměruje stdout na stdin, ale ne jako argument příkazu

Jedna velmi důležitá věc k pochopení je, že roura přenáší stdout příkazu do stdin jiného, ​​ale ne jako argument příkazu. Vysvětlím to na příkladu.

Pokud použijete cat příkaz bez jakýchkoli argumentů, bude implicitně číst z stdin . Zde je příklad:

$ cat
Subscribe to Linux Handbook for more articles like this
^D
Subscribe to Linux Handbook for more articles like this

Zde jsem použil cat bez předávání jakýchkoli souborů, takže výchozí nastavení je stdin . Dále jsem napsal řádek a pak pomocí Ctrl+d dal vědět, že jsem se psaním skončil (Ctrl+d znamená EOF nebo End Of File). Jakmile jsem dokončil psaní, kočka četla z stdin a napsal tento řádek do stdout .

Nyní zvažte následující příkaz:

echo hey | cat

Druhý příkaz NENÍ ekvivalentní příkazu cat hey . Zde je stdout , "hej", je přenesen do vyrovnávací paměti a přenesen do stdin z cat . Protože nebyly k dispozici žádné argumenty příkazového řádku, jako výchozí byl nastaven příkaz cat stdin pro čtení a ve stdin už něco bylo, takže příkaz cat to vzal a vytiskl do stdout .

Ve skutečnosti jsem vytvořil soubor s názvem hej a vložil do něj nějaký obsah. Rozdíl můžete jasně vidět na obrázku níže:

Typy kanálů v systému Linux

V Linuxu existují dva druhy kanálů:

  • Nepojmenované kanály, nazývané také anonymní kanály
  • Pojmenované kanály

Přečíst celý příběh

Zbytek článku je k dispozici pouze členům LHB. Nyní se můžete ZDARMA zaregistrovat a přečíst si zbytek tohoto článku spolu s přístupem ke všem příspěvkům pouze pro členy. Také se přihlásíte k odběru našeho čtrnáctidenního zpravodaje o Linuxu.

OdebíratUž máte účet?Přihlaste se
Linux
  1. Pipes a přesměrování v Linuxu – vysvětleno!

  2. Co znamená - v tomto linuxovém příkazu?

  3. Jak přejdu pomocí kanálu na příkaz rozdělení Linuxu?

  1. Co je příkaz Chown v Linuxu a jak jej používat

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

  3. Co znamená symbol linux pipe | dělat?

  1. Jak zjistit, co dělá příkaz Linuxu

  2. Jak funguje Tee Command?

  3. Jak používat přesměrování příkazů pod Linuxem