Přesměrování vstupu a výstupu v příkladech Linux/Unix
⚡ Chytré shrnutí
Přesměrování v Linuxu a Unixu mění, kde příkaz čte vstup nebo odesílá výstup, swapping klávesnici a obrazovku pro soubory nebo zařízení pomocí operátorů, jako je znaménko „větší než“, znaménko „menší než“ a operátor připojení.
Přesměrování je jednou z nejužitečnějších funkcí Linux a Unixový shell, protože vám umožňuje rozhodnout se, kam příkaz čte svůj vstup a odesílá svůj výstup. Tato stránka vysvětluje výstup, vstup a přesměrování chyb s pomocí praktických příkladů.
Co je přesměrování?
Přesměrování je funkce v Linuxu, která umožňuje při provádění příkazu změnit standardní vstupní a výstupní zařízení. Základní pracovní postup jakéhokoli Linuxový příkaz je to, že přijímá vstup a dává výstup.
- Standardním vstupním (stdin) zařízením je klávesnice.
- Standardním výstupním (stdout) zařízením je obrazovka.
Pomocí přesměrování lze změnit výše uvedený standardní vstup a výstup.
Přesměrování výstupu
Níže uvedený obrázek označuje začátek příkladů přesměrování výstupu.
Symbol '>' se používá pro přesměrování výstupu (STDOUT).
Příklad:
ls -al > listings
Zde je výstup příkazu ls -al přesměrován do souboru „listings“ místo na vaši obrazovku. Výsledek ukazuje snímek obrazovky níže.
Poznámka: Při přesměrování výstupu příkazu do souboru použijte správný název souboru. Pokud soubor se stejným názvem již existuje, přesměrovaný příkaz jeho obsah smaže a poté jej přepíše.
Pokud nechcete, aby byl soubor přepsán, ale chcete do existujícího souboru přidat další obsah, použijte operátor '>>'. Níže uvedený snímek obrazovky ukazuje obsah doplněný znakem '>>'.
Standardní výstup můžete přesměrovat nejen do souborů, ale také do zařízení.
$ cat music.mp3 > /dev/audio
Příkaz cat přečte soubor music.mp3 a odešle výstup do /dev/audio, což je zvukové zařízení. Pokud je konfigurace zvuku na vašem počítači správná, tento příkaz přehraje hudební soubor.mp3.
Přesměrování vstupu
Níže uvedený obrázek představuje přesměrování vstupu.
Symbol '<' se používá pro přesměrování vstupu (STDIN).
Příklad: Poštovní program v Linuxu vám může pomoci s odesíláním e-mailů z terminálu.
Obsah e-mailu můžete zadat pomocí klávesnice, standardního vstupního zařízení. Pokud ale chcete k e-mailu připojit soubor, můžete použít operátor přesměrování vstupu v následujícím formátu.
mail -s "Subject" to-address < Filename
Níže uvedený snímek obrazovky ukazuje příkaz mail, který čte soubor jako svůj vstup.
Tím se soubor připojí k e-mailu a ten se odešle příjemci.
Výše uvedené příklady byly jednoduché. Nyní se podívejme na některé pokročilé techniky přesměrování, které využívají deskriptory souborů.
Soubor Descriptors (FD)
V Linuxu a Unixu je všechno soubor. Běžné soubory, adresáře a dokonce i zařízení jsou soubory. Každý soubor má přiřazené číslo nazývané souborový deskriptor (FD).
Níže uvedený diagram ukazuje standardní streamy a jejich deskriptory souborů.
Vaše obrazovka má také deskriptor souboru. Když je program spuštěn, výstup se odešle do deskriptoru souboru obrazovky a výstup programu se zobrazí na monitoru. Pokud by byl výstup odeslán do deskriptoru souboru tiskárny, výstup programu by se vytiskl.
Chyba přesměrování
Kdykoli spustíte program nebo příkaz v terminálu, jsou vždy otevřeny tři soubory, a to standardní vstup, standardní výstup a standardní chybový soubor.
Tyto soubory jsou vždy přítomny při spuštění programu. Jak již bylo vysvětleno, ke každému z těchto souborů je přiřazen souborový deskriptor.
| Soubor | Soubor Descriptor |
|---|---|
| Standardní vstup STDIN | 0 |
| Standardní výstup STDOUT | 1 |
| Standardní chyba STDERR | 2 |
Ve výchozím nastavení se na obrazovce zobrazuje proud chyb. Přesměrování chyb směruje chyby do souboru jiného než na obrazovku.
Proč došlo k chybě přesměrování?
Přesměrování chyb je jednou z velmi oblíbených funkcí Unixu a Linuxu.
Častí uživatelé Unixu vědí, že mnoho příkazů způsobuje obrovské množství chyb. Například při vyhledávání souborů se obvykle objeví povolení odepřené chyby, které obvykle nepomáhají osobě hledající konkrétní soubor. Při spouštění skriptů shellu často nechcete, aby chybové zprávy zahlcovaly normální výstup programu.
Řešením je přesměrovat chybové zprávy do souboru.
Příklad 1
$ myprogram 2>errorsfile
Níže uvedený snímek obrazovky ukazuje tento příkaz v terminálu.
Výše uvedený příklad spouštíme program s názvem můjprogram. Deskriptor souboru pro standardní chybu je 2. Pomocí „2>“ přesměrujeme výstup chyby do souboru s názvem „errorsfile“. Výstup programu tak není zahlcen chybami.
Příklad 2
Zde je další příklad, který používá příkaz find.
find . -name 'my*' 2>error.log
Pomocí příkazu find hledáme v aktuálním adresáři „.“ soubor, jehož název začíná na „my“, a všechny chyby odesíláme do souboru error.log.
Příklad 3: Podívejme se na složitější příklad.
Správci serveru často vypisují adresáře a ukládají chybový i standardní výstup do souboru, který lze později zpracovat. Zde je příkaz.
ls Documents ABC> dirlist 2>&1
Níže uvedený diagram ukazuje zachycení obou streamů do jednoho souboru.
Zde:
- 2>&1 znamená, že STDERR je přesměrován na stejný cíl jako STDOUT (což je seznam adresářů souborů).
- Výstup chyby je přesměrován na standardní výstup, který je následně přesměrován do adresáře souboru. Oba streamy jsou tedy zapisovány do adresáře souboru.
Níže uvedený diagram shrnuje, jak do sebe vstup, výstup a přesměrování chyb zapadají.







.png)