Vstup a výstup procesů, přesměrování
Z MiS
„Write programs that do one thing and do it well.
Write programs to work together.
Write programs that handle text streams, because that is an universal interface.“
(McIlroy)
Obsah |
K čemu to je? (modelová situace)
- Zpracovávám fotku pomocí utilit v příkazovém řádku.
- Filozofie Unixu:
- předepisuje jednoduché programy, které dělají jednu věc a dělají ji dobře.
- Tedy potřebuji:
- vzít fotku-> doostřit -> upravit kontrast -> uložit výslednou fotku
- Abych nemusel pokaždé ukládat a znovu načítat, mohly by si programy výsledky předávat přímo???
- Filozofie Unixu:
- programy by měly umět snadno komunikovat,
- dobrým prostředkem pro komunikaci jsou textové proudy.
Poznámka
Vlastně se tedy jedná o způsob komunikace mezi procesy.
Hrátky: program cat
- ukončení vstupu: Ctrl+D
Varianty přesměrování
- Přesměrování standardního výstupu do souboru
- program > soubor
- Zápis výstupu programu do souboru.
- Spustíme program s názvem program (tedy vznikne proces).
- Výstup procesu budeme zapisovat do souboru soubor.
- Pokud soubor neexistuje, vytvoří se. Pokud soubor již existuje, nová data přepíší ta, která v něm byla.
ls -l > ~/obsah_adresare.txt
- program >> soubor
- Stejně jako předchozí, ale pokud soubor již existuje, nově zapisovaná data se připojí na konec souboru.
echo "Druhy adresar:" >> ~/obsah_adresare.txt ls druhy -l >> ~/obsah_adresare.txt
- Přesměrování chybového výstupu do souboru
- program 2> soubor
- Chyby, které vypisuje program program se zapisují do souboru soubor.
cp a b 2> /dev/null mv archiv.tar.gz zalohy 2> ~/zaloha_chyby.log
- Přesměrování standardního vstupu
- program < soubor
- program čte data ze souboru soubor místo ze standardního vstupu (z klávesnice).
- Propojení programů
- program1 | program2
- Roura (anglicky pipe). Slouží k propojení dvou procesů.
- Spustí se program2. Jako vstup dostane „konec roury“ (anglicky pipe). Pak se spustí program program1. Výstup z programu program1 se posílá do „roury“ a program2 ho dále zpracovává.
ls | sort | head cat /etc/passwd | cut -d : -f 1 | sort
Speciální soubory
- Virtuální soubory reprezentující standardní vstup a výstup
- /dev/stdin... reprezentuje standardní vstup (klávesnici)
- /dev/stdout... reprezentuje standardní výstup (obrazovku)
- /dev/stderr... reprezentuje standardní chybový výstup (obrazovku)
- Pomocné
- /dev/null... jakákoli data zapsaná do tohoto souboru se zahodí
cp ~/ahoj.txt /home/student/ahoj.txt 2> /dev/null
- /dev/zero... kdykoli budeme číst z tohoto souboru, dostaneme znak s ASCII kódem 0. Můžeme číst libovolně dlouho.
Pojmy
- filtr
- kolona
- roura (pipe)
Roura jako způsob komunikace mezi procesy
- Příklady
- cat /proc/meminfo
- cat /proc/meminfo | head
- cat /proc/meminfo | head -n 1 > memory.txt
- cat /proc/meminfo | grep Free
- cat /etc/passwd | grep student
Filtry
- cat
- grep
- less
tar --help | less
- head
- tail
tail /var/log/apache2/error_log
- wc -l
ls | wc -l
- tar, gzip
tar -c * | gzip > archiv.tar.gz tar -czf archiv.tar.gz * tar -xzf archiv.tar.gz
- unzip
- sort
cat /etc/passwd | cut -d : -f 1,5 | sort
- cut
- tee
- výstup do souboru i na obrazovku
$ date | tee file1 file2 Thu Jun 10 11:10:34 CEST 2004 $ cat file1 Thu Jun 10 11:10:34 CEST 2004
- unique
- filtruje duplicity
- tr.. anslate
Zopakujte si
- co je to „filtr“ v kontextu povídání o Linuxu a příkazové řádce,
- na jaká zařízení jsou přesměrovány: standardní vstup, výstup a chybový výstup.
- jaký je rozdíl mezi |, >, 2> a >>?
Vyzkoušejte si
- Vypište obsah adresáře do souboru vypis.txt.
- Spočtěte, kolik souborů a složek je v adresáři.
- V předchozím úkolu zahrňte jen soubory obsahující písmeno w.
- Výsledek předchozího úkolu připojte na nový rádek do souboru vypis.txt.
- Zobrazte seznam souborů v adresáři /bin. Pokud se výpis nevleze na obrazovku, zařiďte, aby se vypsala jen první obrazovka a výpisem šlo listovat (nahoru, dolů, o celé stránky, vyhledávat).
- Vypište uživatelská jména uživatelů registrovaných v systému s GNU/Linuxem. Každé jméno na jeden řádek.