Úvod GNU/Linux Software Ke stažení Odkazy

Vaše IP: 18.207.106.142
Počet návštěv: 1508201
Hledání příkazů operačního systému Linux podle syntaxe nebo popisu.

Nastavení vzhledu stránek
Dark
Silver
Green
Grey

Radek Tříška

E-mail a Jabber :
radek(at)fastlinux(dot)eu
mseed@njs.netlab.cz

Sekce V.I.P. uživatelů


Vstup / Výstup a PIPE

Velká síla Linuxu spočívá také v propojování vstupů a výstupů jednotlivých programů.

V interpretu příkazů jsou tři základní datové proudy.

stdin - vstupní proud (in) - většinou klávesnice
stdout - výstupní proud (out) - většinou monitor
stderr - chybový proud (error)

Většina programů v Linuxu funguje tak, že čte vstupní data z klávesnice konzole a zapisuje výstup na obrazovku konzole. Chybové zprávy se zapíší do proudu stderr - ten je propojen s konzolí (obrazovkou).

Pro příklad:

ls > /home/radek/obsah - výstup programu ls se zapíše do souboru /home/radek/obsah (neexistuje-li, vytvoří se / existuje-li přepíše se)

>soubor Přesměruje výstup do souboru
>>soubor Přesměruje výstup do souboru (výstup přidá na konec souboru - nepřepíše ho)
2>soubor Přesměruje chybový výstup do souboru
2>>soubor Přesměruje chybový výstup do souboru (výstup přidá na konec souboru)
&>soubor Přesměruje výstup a chybový výstup do souboru
 < soubor 
Přesměruje vstup do zadaného souboru
 << název 
Čte vstup až po slovo název. (Slovo název je jen příklad)
prvni | druhy Výstup programu prvni se připojí na vstup programu druhy. (Toto se jmenuje PIPE neboli ROURA)

Příklad použití PIPE:

cat dokument | more - cat vypíše obsah souboru dokument - výstup připojí na vstup programu more - to způsobí, že obsah souboru dokument budeme moci stránkovat :-)

Doplnění od Zdeňka H.

stdin/stdout:

Ve skutečnosti to není jen stdin, stdout, stderr - pokud si napíšete vlastní program, může zapisovat a přesměrovávat do dalších front.

Nicméně platí, e stdin|stdout|stderr jsou přiřazeny vždy.

A ještě bych doplnil pro začátečníky nejtěžší na pochopení: spojení přesměrování více front do jedné (např. stdout a stderr):

příkaz > /cesta/soubor 2>&1

čili přesměrujete standardní do souboru a chybový do standardního

BTW, v souvislosti s tím ještě zmíním příkaz tee (rozdvojka na frontu)

příkaz | tee /cesta/soubor | less

čili stand. výstup se zobrazí na obrazovce a ještě se uloží do souboru

Velmi užitečné je rovněž vytvoření a použití pojmenované roury:

mkfifo /tmp/xxx
příkaz > /tmp/xxx
cat /tmp/xxx

Dále se poměrně často hodí průběžné sledování výstupu nějakého příkazu utilitou watch

watch [-n <sekund>] 'příkaz'

Dále poznamenám, že např. přesměrování, kdy stdout (resp. stdin) ze stroje A předhodíme na stdin (resp. stdout) jinému příkazu na stroji B, vůbec nemusejí dopadnout dobře, protože pokud verze příkazu na obou strojích používají různé velikosti bloku (např. tar, dd etc.), budou se v některých implementacích těchto příkazů doplňovat neúplné bloky pomocí prázdných byte, což se může projevit velmi zákeřnými chybami. V takovém případě důsledně ověřovat CRC (cksum, md5sum), nebo zjistit a důsledně použít stejnou velikost bloku, nebo použít upravené příkazy (star, sdd - http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/index.html ) Velmi důležité pro uživatele může být i užitečné default chování terminalu - stiskem CTRL+S[Q][C][resp Z] pozastaví|obnoví|preruší|upozadi výstup na terminál (resp. proces). Než ukončím terminál jen proto, že se "nějak zasekl", není na škodu stisknout pro jistotu CTRL+Q s tím souvisí také nastavení terminálu - man stty

| Verze projektu: 1.52 | © 2000 - 2011 | Historie |