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 jakéhokoli příkazu Linuxu spočívá v tom, že přijímá vstup a poskytuje výstup.
Typy přesměrování
1. Přepsat
- “>“ Standardním vstupním (stdin) zařízením je klávesnice.
- „<“ Standardním výstupním (stdout) zařízením je obrazovka.
2. Přikládá
- Standardní výstup „>>“
- Standardní vstup „<<“
3. Sloučita
- „p> &q“ Sloučí výstup z proudu p s proudem q
- „p <&q“ Sloučí vstup z proudu p s proudem q
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“ namísto vaší obrazovky.
Poznámka :„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 poté 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 však konfigurace zvuku ve vašem PC správné, tento příkaz přehraje soubor music.mp3
Přesměrování vstupu
‘< symbol ‘ se používá pro přesměrování vstupu (STDIN)
Tím by se soubor připojil k e-mailu a byl by odeslán příjemci.
„News Today“ je předmět e-mailu, „[email protected]“ je e-mailová adresa a „NewsFlash“ je soubor přílohy.
Výše uvedené příklady byly jednoduché. Podívejme se na některé pokročilé techniky přesměrování, které využívají deskriptory souborů.
Deskriptory souborů (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 nazývané deskriptor souboru (FD).
Vaše obrazovka má také deskriptor souboru. Když je program spuštěn, je výstup odeslán do File Descriptor na obrazovce a výstup programu vidíte na svém monitoru. Pokud je výstup odeslán do deskriptoru souboru 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, tj. 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 dříve, deskriptor souboru je spojen s každým z těchto souborů.
Soubor | Deskriptor souboru |
---|---|
Standardní vstupní STDIN | 0 |
Standardní výstup STDOUT | 1 |
Standardní chyba STDERR | 2 |
Ve výchozím nastavení se na obrazovce zobrazuje chybový proud. Chyba přesměrování 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í Unixu/Linuxu.
Č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 odepřené oprávnění. Tyto chyby obvykle nepomohou osobě, která hledá 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í „najít “, hledáme „. “ aktuální adresář pro soubor s „název “ začínající na „moje “
Příklad 3
Podívejme se tedy 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
Tady,
- který zapíše výstup z jednoho souboru na vstup jiného souboru. 2>&1 znamená, že STDERR přesměrovává 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. Výstup je tedy zapsán do souboru dirlist
Shrnutí
- Každý soubor v systému Linux má přiřazený odpovídající deskriptor souboru
- 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í příslušného deskriptoru souboru 2.