BASH: Kolony: Porovnání verzí

Z Milan Kerslager
Přejít na: navigace, hledání
(+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říkaz2 Propojení standardního výstupu programu příkaz1 do standardního vstupu programu příkaz2
 příkaz1 2>&1 | příkaz2  Nasměrování spojeného standardního výstupu a standardního chybového výstupu programu příkaz1 do standardního vstupu programu pří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*

Externí odkazy