Rouru (|) znáte? A co < a >? Víte jak tyhle věcí fungují a k čemu je můžete použít? Liší se to nějak mezi operačními systémy?
Každý program má standardní vstup (stdin), standardní výstup (stdout) a často taky standardní chybový výstup (stderr). V rámci toho jsou pak |, < a > operátory přesměrování – rourou se propojí výstup z jednoho programu jako vstup do jiného. A menšítko a většítko umožní propojit soubor místo klávesnice/obrazovky.
Pipe | – roura mezi programy
Obecná idea (ve všech systémech stejná):
program1 | program2
Postará se o to, že stdout (výstup) programu1 putuje ns stdin (vstup) programu2. Tedy to co “leze ven” z prvního, se stane vstupem pro druhý.
Příklad z Linuxu:
ls | grep txt
ls vypíše obsah složky a grep txt ho dostane jako vstup aby v něm vyhledal “txt” a poskytl to jako finální výstup.
Důležité je, že ve většině shellů je do pípy přenášen jen stdout nikoliv stderr.
Pozor, v PowerShell (Windows, Linux, macOS) nepředává text, ale .NET objekty.
Get-Process | Where-Object CPU -gt 10 | Sort-Object CPU -Descending
Když ale pipujete do externího programu (typicky klasické exe jako findstr, git), PowerShell ty objekty převádí na řetězce
ipconfig | findstr IPv4
PowerShell má navíc datové proudy 1–6 (oprotí běžným 0 – stdin, 1 – stdout a 2 – stderr):
1 – Success (běžný výstup)
2 – Error
3 – Warning
4 – Verbose
5 – Debug
6 – Information
Přesměrování: < a >
Základní významy (platí ve všech světech, jen drobné odchylky):
> – přesměruj stdout do souboru, soubor přepiš
ls > soubor.txt
ls vypisuje obsah složky, tady přesměrováním dojde k uložení výpisu do souboru. Soubor ale bude vytvořen znovu, pokud tedy existuje, bude přepsán.
>> – přesměruj stdout do souboru, připoj na konec
Pokud chcete aby výstup byl přidán na konec souboru (pokud existuje, jinak bude vytvořen), tak je nutné použít >>
< – čti stdin ze souboru místo z klávesnice
sort < soubor.txt
Vezme obsah souboru soubor.txt a pustí ho do sort, ten ho utřídí a výsledek zobrazí (protože půjde na stdout).
2> – přesměruj stderr do souboru
Jak bylo naznačeno výše, pípa nepracuje s stderr, tedy chybovými hláškami. Můžete ale využít 2> a chybové výstupy ukládat do souboru.
2>&1 – přesměruj stderr tam, kam už jde stdout
ls > vse.log 2>&1
Speciální „černá díra“
/dev/null v Unixu, NUL ve Windows. Můžete používat například takto:
příkaz > /dev/null 2>&1 # zahodí všechen výstup (stdout i stderr)
příkaz > NUL 2>&1 # totéž ve Windows CMD
„Černá díra“ v PowerShellu
cmd | Out-Null
&> – stdout i stderr do jednoho souboru
|& – pipe pro stdout + stderr:
Nefunguje všude – bash/zsh, ale ne čisté POSIX sh
cmd &> vse.log
cmd |& grep error
Shrnutí v jedné tabulce (pozor, sestavila ChatGPT)
| Operátor | Název / význam | Unix (bash/zsh) | CMD/DOS | PowerShell |
| ` | ` | pipe / roura, pipeline | stdout → stdin | stdout → stdin |
| > | přesměrování stdout, přepsat soubor | ano | ano | přesměruje success stream (1), alias Out-File |
| >> | přesměrování stdout, připojit na konec | ano | ano | ano (append) |
| < | přesměrování stdin ze souboru | ano | ano | funguje, ale méně používané (častěji Get-Content) |
| 2> | přesměrování stderr / error | ano (2> → stderr) | ano (2> → stderr) | ano (error stream 2) |
| 2>&1 | stderr → tam, kam jde stdout | ano | ano | funguje (přesměruje stream 2 na cíl streamu 1) |
| &> | stdout+stderr → soubor | bash/zsh rozšíření | ne | ne, místo toho *> |
| *> | všechny streamy → soubor | ne | ne | ano |
| /dev/null / NUL | „černá díra“ pro výstup | /dev/null | NUL | NUL, $null, Out-Null |
Pár praktických příkladů
Unix/Linux/MacOS
# Spočítej, kolik řádků obsahuje "error" v logu
grep error /var/log/syslog | wc -l
# Ulož seznam souborů, chyby bokem
ls /etc > seznam.txt 2> chyby.txt
# Zahoď všechen výstup
příkaz > /dev/null 2>&1
Windows CMD
REM Vyhledej "ERROR" ve výpisu služeb a ulož jen nalezené řádky
sc query | find "ERROR" > error_services.txt
REM Zahoď výstup i chyby
příkaz > NUL 2>&1
PowerShell
# Seznam procesů podle CPU
Get-Process | Where-Object CPU -gt 1 | Sort-Object CPU -Descending
# Ulož běžný výstup a chyby samostatně
příkaz 1> out.log 2> err.log
# Varování a chybové hlášky do souborů, výstup nech na obrazovce
příkaz 3> warnings.log 2> errors.log
Další tipy týkající se Linuxu (a podobných věcí)
-
TIP#3233: Jak se připojit k souborům sdíleným na Macu přes síť
V Jak na MacOS zpřístupnit soubory pro další počítače přes síť můžete zjistit jak na Macu zpřístupnit složky pro sdílení přes síť. A v tomto tipu, jak k nim přistupovat z dalších…
-
TIP#3213: Jak na MacOS, Windows i jinde mít snadného a praktického SSH klienta?
SSH klient, terminál, prostě cokoliv co vám umožní přístup na stroje co mají “linuxový shell” je vesmírně užitečná věc. A je dost jisté, že si nevystačíte s tím co má daný systém…
-
TIP#3165: Jak uspat/hibernovat Ubuntu z terminalu (příkazové řádky)
Pokud máte počítač s displejem, klávesnici a myší, tak uspání či hibernace bývají jednoduché. Prostě je to tam někde v menu a stačí kliknout. Nebo použít zapínací tlačítko. Co když ale máte…
-
TIP#3164: Acemagic Mini PC jako alternativa k velké PC krabici
Pořídil jsem Acemagic A3A i3-1215U (16+512GB) Silver, mám v plánu u z toho udělat “homelab server” pro nějaké věci, které nechci páchat na QNAP NAS ani na “klasickém PC”, natož na Mac…
-
TIP#3160: Jak v terminálu v Linuxu hledat v souborech. Grep a ripgrep
Něco co budete potřebovat často, zjistit zda v nějakém textovém souboru je něco obsaženo (a kde). Případně ve kterém ze souborů ve složce to něco jeho. Související příspěvky TIP#3213: Jak na MacOS,…
-
TIP#3126: Aplikace pro Chromebook? To nejlepší ze tří světů. Vlastní, pro Android a pro Linux
Pro Chromebooky existují tři hlavní typy aplikací. Nativní, pro Android a pro Linux. Dává to dost velké možnosti najít nejen ty rozšířené a oblíbené, ale přesně to co potřebujete. Související příspěvky TIP#2805: Historie…
-
TIP#3123: Jak na používání Chromebooku a iPhone? Platí i na používání čehokoliv, co není od Apple a k tomu iPhone
Co když máte iPhone a k tomu Chromebook? Jak tohle vhodně skloubit? Prakticky stejně, jako když máte iPhone a k tomu Windows či Linux. Prostě něco co není uzavřený jablečný svět. Související…
-
TIP#3119: Jak v ChromeOS mít terminál (shell). Jak na virtuální stroj s Linuxem. Vývojářský režim a co je to VT2 shell
Chromebooky umí normální linuxový terminál – stačí v nastavení zapnout Vývojové prostředí Linux. Tím se vytvoří virtuální stroj s Debianem (Crostini) a dostanete plnohodnotný shell, aniž byste museli zapínat Developer Mode. Související…
-
TIP#3115: Jak v příkazové řádce spustit více příkazů než jeden
Příkazovou řádku znáte. Ve Windows je CMD (a nově PowerShell), v Linuxu/Macu je to terminál zpřístupňující shell, v různých provedeních (bash, zsh, atd). Je velmi snadné tam prostě spustit jeden příkaz, ale…
-
TIP#3113: K čemu použít starší Chromebook? Ale i starší notebook či počítač
Pokud jste si pořídili něco novějšího či jiného a zbyl vám Chromebook, je řada možností jak ho začít používat na něco trochu jiného, než byla práce či zábava. Související příspěvky TIP#3131: Chromebook:…
-
TIP#3111: Umíte používat rouru/pipe (|)? Jaké další podobné operátory můžete využívat?
Rouru (|) znáte? A co < a >? Víte jak tyhle věcí fungují a k čemu je můžete použít? Liší se to nějak mezi operačními systémy? Každý program má standardní vstup (stdin),…
-
TIP#486: Jak zkontrolovat otevřené TCP/IP porty ve Windows. Poznejte příkaz netstat a další možnost jak na to
Po vysvětlení k čemu slouží ve Windows příkaz ipconfig je čas na další související příkaz (spustitelný z příkazové řádky). Jmenuje se netstat a můžete si ho nejprve vyzkoušet jako netstat /? (případně…
-
TIP#3092: Jak v Linuxu kopírovat soubory a složky? Naučte se cp
cp je základní příkaz v Linuxu pro kopírování souborů, stejně jako copy ve Windows. Ostatně je zkratka právě z oné delší verze. Související příspěvky TIP#2989: Jak na (nejen) Raspberry Pi (rychle) vidět…
-
TIP#3091: Jak na MacOS mít (spustit) Linux?
MacOS je “tak trochu” Linux, ale se záplavou změn a omezení vytvořených Apple. Pokud potřebujete skutečný Linux, tak je na to třeba jít trochu jinak. Související příspěvky TIP#3226: Jak na Macu s…
















