====== Redirection (Přesměrování) ====== **Redirection** je schopnost shellu změnit standardní cíle nebo zdroje datových proudů. Zatímco [[it_encyklopedie:pipeline|pipeline]] propojuje dva programy mezi sebou, **přesměrování** propojuje program se souborem nebo jiným datovým tokem. ===== 1. Základní operátory přesměrování ===== V shellu používáme k ovládání toků speciální znaky, které řídí [[it_encyklopedie:stdout|stdout]], [[it_encyklopedie:stderr|stderr]] a [[it_encyklopedie:stdin|stdin]]. ==== Přesměrování výstupu (Output) ==== * **`>` (Overwrite):** Přesměruje výstup do souboru a přepíše jeho obsah. * Příklad: ''ls > soubory.txt'' (Vytvoří seznam souborů, starý obsah smaže). * **`>>` (Append):** Přesměruje výstup na konec souboru (připojí ho). * Příklad: ''date >> log.txt'' (Přidá aktuální čas na konec logu). ==== Přesměrování vstupu (Input) ==== * **`<`:** Místo čtení z klávesnice čte program ze souboru. * Příklad: ''mail -s "Předmět" admin@firma.cz < zprava.txt'' ===== 2. Práce s deskriptory (Pokročilé přesměrování) ===== Jak už víme, systémy používají čísla pro označení proudů (0=stdin, 1=stdout, 2=stderr). Tato čísla můžeme v syntaxi využít pro jemnější kontrolu: ^ Zápis ^ Význam ^ | **2>** | Přesměruje pouze chybový výstup (stderr). | | **&>** | Přesměruje stdout i stderr najednou do jednoho souboru. | | **1>&2** | Pošle standardní výstup do chybového kanálu. | | **2>&1** | Pošle chybový výstup do standardního kanálu. | ===== 3. Here Documents (EOF) ===== Speciální formou přesměrování je tzv. **Here Document** (značka ''<<''). Umožňuje předat víceřádkový blok textu přímo do příkazu v rámci skriptu. * **Příklad:** cat << EOF > konfigurace.conf server_name = localhost port = 8080 EOF Tento blok vytvoří soubor s daným obsahem bez nutnosti otevírat editor. ===== 4. Černá díra systému: /dev/null ===== Při přesměrování se často setkáte s virtuálním zařízením **/dev/null**. Cokoli do něj pošlete, nenávratně zmizí. * **Využití:** ''prikaz 2> /dev/null'' – Spustí příkaz, ale schová všechny chyby (nepotřebujeme je vidět, ani ukládat). ===== 5. Praktické využití v automatizaci ===== Redirection je základem pro: * **Logování:** Ukládání běhu skriptů pro pozdější analýzu. * **Generování souborů:** Dynamické vytváření konfiguračních souborů na základě proměnných. * **Tiché skripty:** Potlačení zbytečných výpisů (tzv. "verbose" výstupy), které by v [[it_encyklopedie:cron|cronu]] zbytečně generovaly e-maily. > **Tip:** Dávejte pozor na rozdíl mezi `>` a `>>`. Jedno zapomenuté znaménko navíc (použití `>` místo `>>`) může vést k nechtěnému smazání důležitého logu, který se budoval měsíce. [[it_encyklopedie:linux_rozcestnik|Zpět na Linux]]