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 Martin Šimůnek Datum 16. 1. 2013 Stupeň atypvzdělávání Střední odborné vzdělávání Odvětví / Vzdělávací oblast dle RVP.cz Vzdělávací obor Obchodní akademie / Informační technologie Tematická oblast GNU/Linux a příkazový řádek Druh učebního materiálu Výukový materiál Cílová skupina Žák, 15 19 let Anotace a popis způsobu použití ve výuce Vybavení, pomůcky Klíčová slova 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ň: Čí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
Řekli jsme si, že filtry čtou data ze standardního vstupu a zpracovávají je. ÚVOD 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.
S přepsáním souboru PŘESMĚROVÁNÍ VÝSTUPU 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/commandprompt.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í
Doporučení: VYZKOUŠEJTE SI PŘÍKAZY PSÁT! 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í.)