PŘESMĚROVÁNÍ VÝSTUPU DO SOUBORU Název školy
Obchodní akademie, Vyšší odborná škola a Jazyková škola s právem státní jazykové zkoušky Uherské Hradiště
Název DUMu
Přesměrování výstupu do souboru
Autor Datum
Martin Šimůnek 16. 1. 2013
Stupeň a typ vzdělávání Odvětví / Vzdělávací oblast Vzdělávací obor Tematická oblast Druh učebního materiálu Cílová skupina Anotace a popis způsobu použití ve výuce
Střední odborné vzdělávání ‐‐ dle RVP.cz ‐‐ ‐‐ Obchodní akademie / Informační technologie ‐‐ GNU/Linux a příkazový řádek Výukový materiál Žák, 15 – 19 let Výukový materiál určen k frontální prezentaci učitelem, případně jako materiál pro samostudium, nutno doplnit výkladem, náplň: …
Vybavení, pomůcky Klíčová slova
‐
Číslo projektu Název šablony
CZ.1.07/1.5.00/34.0534 III/2 – Inovace a zkvalitnění výuky prostřednictvím ICT
ZLÍNSKÝ KRAJ
ÚVOD Řekli jsme si, že filtry čtou data ze standardního vstupu a zpracovávají je. Nyní si ukážeme, jak výstup filtrů (i jiných programů) uložit do souboru.
VÝSTUP PROCESŮ Procesy standardně ukládají data na standardní výstup a chyby píší na standardní chybový výstup.
Standardní výstup • Standardním výstupem souborů je obrazovka. • Z hlediska programátora je standardní výstup zastoupen virtuálním souborem /dev/stdout.
Standardní chybový výstup • Standardním výstupem souborů je obrazovka. • Z hlediska programátora je standardní výstup zastoupen virtuálním souborem /dev/stderr.
PŘESMĚROVÁNÍ VÝSTUPU S přepsáním souboru • Pro uložení výstupu procesu do souboru použijeme operátor: > • Příklad: ls > seznam.txt … vypíše obsah složky do souboru seznam.txt. • Pokud soubor seznam.txt neexistuje, vytvoří se. • Pokus soubor seznam.txt existuje, přepíše se jeho obsah (původní obsah se smaže).
Se zachováním obsahu souboru • Pro připojení výstupu procesu ke stávajícímu obsahu souboru použijeme operátor: >> • Příklad: echo "‐‐‐Konec seznamu!‐‐‐" >> seznam.txt … přidá hlášení na konec souboru seznam.txt. • Pokud soubor seznam.txt neexistuje, vytvoří se. • Pokus soubor seznam.txt existuje, přepíše se jeho obsah (původní obsah se smaže).
PŘESMĚROVÁNÍ CHYBOVÉHO VÝSTUPU Používáme operátor 2> resp. 2>> • Rozdíl mezi 2> a 2>> je stejný jako mezi > a >> . • Příklad: cp a.txt b.txt 2> chyby.log … zkopíruje soubor, případné chyby nepíše na obrazovku, ale do souboru chyby.log • Pokud soubor chyby.log neexistuje, vytvoří se. • Pokus soubor chyby.log existuje, přepíše se jeho obsah (původní obsah se smaže).
SPOJENÍ VÝSTUPNÍCH SOUBORŮ Operátor 2>&1 resp. 1>&2 • Standardní výstup zastupuje deskriptor &1. • Chybový výstup zastupuje deskriptor &2. • Operátor: 2>&1 způsobí, že se soubor &2 přesměruje do stejného souboru jako &1. • Čísla vstupů lze samozřejmě propojit. • Příklad: listování chybovými hláškami $ find / –name *.jpg 2>&1 > obrazky.list | less Do souboru obrazky.list umístí názvy nalezených obrázků. Chybové hlášení bude vypisovat po obrazovkách.
ZDVOJENÍ SOUBORU: TEE Filtr tee • Pokud potřebujeme (chybový či standardní) výstup zapsat na obrazovku i do souboru zároveň, použijeme filtr tee. • Filtr tee bere data ze vstupu a zapisuje je na výstup + do souborů, zadaných jako parametry. • Příklad: echo "Začátek výpisu" | tee s.txt ls | tee s.txt … Zapíše do souboru s.txt obsah složky uvozený hlášením „Začátek výpisu".
ÚKOL 1: STANDARDNÍ VÝSTUP Zapište kolonu příkazů, která: • Obsah složky vypíše do souboru vypis.txt . • Seřadí jména ze souboru vstup.txt a prvních 10 v abecedním pořadí zapíše do souboru zacatek.txt . • Spustí program rozbaluj, který vypisuje velké množství informací na obrazovku. Proto standardní výstup zahodí. • Vypíše uživatelské jméno aktuálně přihlášeného uživatele do souboru login.log i na obrazovku. (Uživatelské jméno je uloženo v proměnné $USER.)
ÚKOL 2: CHYBOVÝ VÝSTUP Zapište kolonu příkazů, která: • Zkopíruje všechny soubory z domovského adresáře do adresáře zaloha, chyby zapíše do souboru chyby.log.
Pokročilejší: • Přesune adresář pokusy z vaší domovské složky do složky kos v kořenovém adresáři. Případné chyby vypíše na obrazovku + do souboru error.log.
POUŽITÉ ZDROJE 1)
MACH, Petr. ÚSL úvod do systému Linux. MACH, Petr. Wraithovy stránky [online]. 2003, 2004‐ 03‐12 [cit. 2012‐10‐29]. Dostupné z: http://usl.wraith.cz/usl.html
2)
FISHER, Tim. Command Prompt: What It Is and How To Use It. About.com [online]. c2012, c2012 [cit. 2012‐10‐29]. Dostupné z: http://pcsupport.about.com/od/termsc/p/command‐ prompt.htm
3)
http://www.abclinuxu.cz/ucebnice/zaklady/prikazova‐radka/standardni‐vstup‐a‐vystup
4)
ŠIMŮNEK, Martin. Vstup a výstup procesů, přesměrování. e‐MiŠ.cz [online]. c2010, c2012 [cit. 2012‐11‐26]. Dostupné z: http://mis.e‐mis.cz/index.php/Vstup a výstup procesů, přesměrování
VYZKOUŠEJTE SI PŘÍKAZY PSÁT! Doporučení: • Doporučujeme příkazy opravdu vyzkoušet napsat. • Není těžké pochopit, jak příkazy fungují, žáci ale mívají často problém s vytvořením příkazu, když ho mají zapsat.
KLÍČ ŘEŠENÍ: ÚKOL 1 Řešení úkolů • • • •
$ ls > vypis.txt $ cat vstup.txt | sort | head > zacatek.txt $ rozbaluj > /dev/null $ echo "Přihlášený uživatel: $USER" | tee login.log
KLÍČ ŘEŠENÍ: ÚKOL 2 Řešení úkolů • $ cp ~/* zalohy 2> chyby.log • $ mv pokusy ~/kos 2>&1 > /dev/null | tee chyby.log (Standardní výstup se úplně zahodí.)