BASH: Kolony: Porovnání verzí
(+kat) |
(Doplnění) |
||
| Řádka 1: | Řádka 1: | ||
| − | '''Kolona v shellu BASH''' ('''roura''', '''pipe''') umožňuje propojit vstupy a výstupy jednoduchých programů a provést tak najednou složitější operaci. Kolony jsou charakteristickým a velmi silným nástrojem unixových systémů. | + | '''Kolona v shellu BASH''' ('''roura''', '''pipe''') umožňuje propojit vstupy a výstupy jednoduchých programů a provést tak najednou složitější operaci. Kolony jsou charakteristickým a velmi silným nástrojem unixových systémů. Kombinují se často s [[BASH: Přesměrování|přesměrováním]]. |
| + | == Filtry == | ||
| + | Filtry jsou programy, které jsou naprogramovány tak, že zpracovávají svůj ''standardní vstup'' a výsledek tisknou na ''standardní výstup''. Díky tomu mohou být snadno spojovány do kolon. Většina základních unixových nástrojů je naprogramována jako filtry, avšak zároveň tak, že v případě poskytnutí parametru nečtou ze standardního vstupu, ale ze souboru, který je dán tímto parametrem. | ||
| + | |||
| + | == Vytváření roury == | ||
:{| class=wikitable | :{| class=wikitable | ||
! Konstrukce | ! Konstrukce | ||
| Řádka 17: | Řádka 21: | ||
grep rp /etc/passwd | sort | grep rp /etc/passwd | sort | ||
cut -d: -f3 /etc/passwd | sort -n | cut -d: -f3 /etc/passwd | sort -n | ||
| + | ps xauOT | grep bash | ||
| + | ps xauOT | grep '[b]ash' | ||
| + | last | cut -d\ -f1 | sort | ||
last | cut -d\ -f1 | sort | uniq -c | sort -n | last | cut -d\ -f1 | sort | uniq -c | sort -n | ||
| + | grep root: /etc/* | nl | ||
| + | grep root: /etc/* 2>&1 | nl | ||
| + | ls /var/spool/mqueue/* | xargs grep -l SPAM | ||
| + | |||
| + | == Chybné použití roury == | ||
| + | Při používání rour se velmi často dělá chyba označovaná jako ''nadbytečný <code>cat</code>'' (ale může se jednat i o jiný nadbytečný příkaz). Chyba je způsobena tím, že si uživatel neuvědomí, že filtr může mít i parametr a zpracovávat soubor přímo (viz výše). Použití nadbytečného příkazu nemá vliv na funkčnost, ale je obvykle považováno za chybu, protože je zbytečně spuštěn další příkaz (plýtvání systémovými prostředky) a data musí procházet rourou (což provedení příkazů zpomaluje). | ||
| + | |||
| + | Ukázka chybně použitých konstrukcí: | ||
| + | |||
| + | cat /etc/passwd | sort # správně: sort /etc/passwd | ||
| + | cat /etc/passwd | grep root # správně: grep root /etc/passwd | ||
| + | cat /etc/passwd | nl # správně: cat -n /etc/passwd nebo: nl /etc/passwd | ||
| + | ls /bin | grep sh # správně: ls /bin/*sh* | ||
== Externí odkazy == | == Externí odkazy == | ||
| + | * [http://cs.wikipedia.org/wiki/Roura_%28Unix%29 http://cs.wikipedia.org/wiki/Roura (Unix)] | ||
* http://www.linuxexpres.cz/praxe/bash-6-dil | * http://www.linuxexpres.cz/praxe/bash-6-dil | ||
[[Kategorie:Práce s Linuxem]] | [[Kategorie:Práce s Linuxem]] | ||
Verze z 27. 10. 2009, 10:58
Kolona v shellu BASH (roura, pipe) umožňuje propojit vstupy a výstupy jednoduchých programů a provést tak najednou složitější operaci. Kolony jsou charakteristickým a velmi silným nástrojem unixových systémů. Kombinují se často s přesměrováním.
Filtry
Filtry jsou programy, které jsou naprogramovány tak, že zpracovávají svůj standardní vstup a výsledek tisknou na standardní výstup. Díky tomu mohou být snadno spojovány do kolon. Většina základních unixových nástrojů je naprogramována jako filtry, avšak zároveň tak, že v případě poskytnutí parametru nečtou ze standardního vstupu, ale ze souboru, který je dán tímto parametrem.
Vytváření roury
Konstrukce Funkce příkaz1 | příkaz2Propojení standardního výstupu programu příkaz1do standardního vstupu programupříkaz2příkaz1 2>&1 | příkaz2Nasměrování spojeného standardního výstupu a standardního chybového výstupu programu příkaz1do standardního vstupu programupříkaz2
Příklady
Činnost níže uvedených příkladů zkoumejte tak, že nejprve provedete první příkaz (včetně jeho parametrů až ke znaku roury) a pak postupně přidávejte další. Sledujte, jak se výstup mění a zjistěte proč.
grep rp /etc/passwd | sort cut -d: -f3 /etc/passwd | sort -n ps xauOT | grep bash ps xauOT | grep '[b]ash' last | cut -d\ -f1 | sort last | cut -d\ -f1 | sort | uniq -c | sort -n grep root: /etc/* | nl grep root: /etc/* 2>&1 | nl ls /var/spool/mqueue/* | xargs grep -l SPAM
Chybné použití roury
Při používání rour se velmi často dělá chyba označovaná jako nadbytečný cat (ale může se jednat i o jiný nadbytečný příkaz). Chyba je způsobena tím, že si uživatel neuvědomí, že filtr může mít i parametr a zpracovávat soubor přímo (viz výše). Použití nadbytečného příkazu nemá vliv na funkčnost, ale je obvykle považováno za chybu, protože je zbytečně spuštěn další příkaz (plýtvání systémovými prostředky) a data musí procházet rourou (což provedení příkazů zpomaluje).
Ukázka chybně použitých konstrukcí:
cat /etc/passwd | sort # správně: sort /etc/passwd cat /etc/passwd | grep root # správně: grep root /etc/passwd cat /etc/passwd | nl # správně: cat -n /etc/passwd nebo: nl /etc/passwd ls /bin | grep sh # správně: ls /bin/*sh*