Přesměrování vstupu a výstupu v příkladech Linux/Unix
Co je přesměrování?
Přesměrování je funkce v Linuxu, takže při provádění příkazu můžete změnit standardní vstupní/výstupní zařízení. Základní pracovní postup každého Linuxový příkaz je, že bere 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.
S přesměrováním lze změnit výše uvedený standardní vstup/výstup.
klikněte zde pokud video není přístupné
Přesměrování výstupu
Jedno '>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“ namísto vaší obrazovky.
Pozor: Při přesměrování výstupu příkazu do souboru použijte správný název souboru. Pokud existuje soubor se stejným názvem, přesměrovaný příkaz smaže obsah tohoto souboru a pak může být přepsán.“
Pokud nechcete, aby byl soubor přepsán, ale chcete do existujícího souboru přidat další obsah, měli byste použít '>>' operátor.
Standardní výstup můžete přesměrovat nejen na soubory, ale i na zařízení!
$ cat music.mp3 > /dev/audio
Příkaz cat načte soubor music.mp3 a odešle výstup do /dev/audio, což je zvukové zařízení. Pokud jsou konfigurace zvuku ve vašem PC správné, tento příkaz přehraje soubor music.mp3
Přesměrování vstupu
Jedno 'symbol ' se používá pro přesměrování vstupu (STDIN).
Příklad: Poštovní program v Linuxu vám může pomoci odesílat e-maily z Terminálu.
Obsah e-mailu můžete zadat pomocí standardní klávesnice zařízení. Pokud však 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
Tím by se soubor připojil k e-mailu a byl by odeslán příjemci.
Výše uvedené příklady byly jednoduché. Podívejme se na některé pokročilé techniky přesměrování, které využívají File Descriptnebo
Soubor Descriptors (FD)
V Linuxu/Unixu je vše soubor. Běžný soubor, adresáře a dokonce i zařízení jsou soubory. Každý soubor má přiřazené číslo s názvem Soubor Descriptnebo (FD).
Vaše obrazovka má také soubor Descriptnebo. Když je program spuštěn, výstup je odeslán do souboru Descriptnebo na obrazovce a na monitoru uvidíte výstup programu. Pokud je výstup odeslán do souboru Descriptnebo tiskárny, výstup programu by byl vytištěn.
Chyba přesměrování
Kdykoli spustíte program/příkaz na terminálu, jsou vždy otevřeny 3 soubory, viz. standardní vstup, standardní výstup, standardní chyba.
Tyto soubory jsou vždy přítomny při každém spuštění programu. Jak bylo vysvětleno výše, deskriptor souboru je spojen s každým z těchto souborů.
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 chybový proud. Přesměrování chyby je směrování chyb do jiného souboru, než je obrazovka.
Proč došlo k chybě přesměrování?
Přesměrování chyb je jednou z velmi oblíbených funkcí Unix / Linux.
Častí uživatelé UNIXu budou počítat s tím, že mnoho příkazů vám způsobí obrovské množství chyb.
- Například při hledání souborů se obvykle objeví chyby s odepřeným oprávněním. Tyto chyby obvykle nepomohou osobě hledající konkrétní soubor.
- Při provádění skriptů shellu často NECHCETE, aby chybové zprávy zaplňovaly běžný výstup programu.
Řešením je přesměrování chybových zpráv do souboru.
Příklad 1
$ myprogram 2>errorsfile
Výše jsme spustili program s názvem myprogram.
Deskriptor souboru pro standardní chybu je 2.
Pomocí „2>“ přesměrujeme chybový výstup do souboru s názvem „errorfile“
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 "najít" hledáme "." aktuální adresář pro soubor s „jménem“ začínajícím na „my“
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 zpracovat později. Zde je příkaz.
ls Documents ABC> dirlist 2>&1
Zde,
- který zapíše výstup z jednoho souboru na vstup jiného souboru. 2>&1 znamená, že STDERR přesměruje na cíl STDOUT (což je adresář souborů)
- Přesměrováváme chybový výstup na standardní výstup, který je zase přesměrován do souboru dirlist. Proto je výstup zapsán do souboru dirlist
Shrnutí
- Každý soubor v Linuxu má odpovídající soubor Descriptnebo s ním spojené
- Klávesnice je standardní vstupní zařízení, zatímco vaše obrazovka je standardní výstupní zařízení
- „>“ je operátor přesměrování výstupu. „>>“ připojí výstup k existujícímu souboru
- „<“ je operátor přesměrování vstupu
- „>&“ přesměruje výstup jednoho souboru na jiný.
- Chybu můžete přesměrovat pomocí odpovídajícího souboru Descriptnebo 2.