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řesměrování výstupu

Příklad:

ls -al > listings

Zde je výstup příkazu ls -al přesměrován do souboru „listings“ namísto vaší obrazovky.

Přesměrování výstupu

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.

Přesměrování výstupu

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řesměrování vstupu

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

Přesměrování vstupu

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.

Chyba přesměrování

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

Proč došlo k chybě přesměrování

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“

Proč došlo k chybě přesměrování

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

Proč došlo k chybě přesměrování

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.