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#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#3111: Umíte používat rouru/pipe (|)?…
-
TIP#3082: Končí (podpora) Windows 10. Co to znamená? Co dělat, když mám Windows 10
14. října skončily WIndows 10. Nebudou k dispozici opravy ani nové funkce, přestane být dostupná i technická podpora. Pro jednotlivce to ještě chvíli tak velký problém nebude, ale pro firmy to problém…
-
TIP#3019: Jak z YouTube v terminalu (Mac, Linux, atd) stáhnout video z youtube? A získat zvukovou stopu?
Nejlepší na věcech jako je příkazová řádka (terminál) v Linuxu či Mac OS (ale máte to i ve Windows i jinde) je, že tam hodně věci jde udělat mnohem snáz, než v…
-
TIP#2989: Jak na (nejen) Raspberry Pi (rychle) vidět chyby/problémy, ke kterým v systému došlo?
Občas je užitečné vědět jak se snadno/rychle podívat, jestli někde v hloubí vaše Rasberry nedošlo či nedochází k nějakým chybám. Nejčastěji když něco zlobí, ale vyplatí se to čas od času kontrolovat…
-
TIP#2970: Jak v terminálu v Linuxu otevřít či si prohlédnout soubor?
V okamžiku kdy se ocitnete v terminálu v LInux, tedy nikoliv v grafickém rozhraní, tak narazíte na něco co právě v GUI bývá snadné, jenže tady nic takového není. Jak se podívat…
-
TIP#2961: Jak změnit mapování portů (či IP adresu) na které běží kontejner v Dockeru?
Taková nepraktická věc, kterou vlastně moc nechápu proč nejde udělat jednoduše. Máte kontejner, spuštěný třeba na portu 5566 a chcete (potřebujete) ho dát na jiný port. Nebo běží na nějaké vnější IP…
-
TIP#2950: Ve Windows je NET VIEW. Je něco podobného v Linuxu? Jak zjistit jaké servery v síti mají jaké síťové disky?
NET VIEW ve Windows slouží k zkoumání toho, co za sdílené disky/prostředky je dostupné na serveru či počítači (a případně i v celém sítí či doméně). Související příspěvky TIP#2765: Raspberry Pi a…
-
TIP#2944: Jak v Linuxu zjistit kde se nachází (a odkud se spustí) konkrétní příkaz? Použijte which
Tohle je dost užitečná vychytávka v Linuxu/unixu, pokud hledáte kde se nachází nějaký příkaz a odkud se spouští, tak můžete použít which doplněný o jméno hledaného (případně i více jmen). Související příspěvky…
-
TIP#2940: Docker na Raspberry Pi. Je to snadné
Když už jsem konečně jedno z mých RPi5 osvobodil od SD karty a startuje z 256 GB SSD, tak je to dobrá příležitost si tam dát Docker a rozjet nějaké věci. Možná…
-
TIP#2933: Jak RaspBerry Pi spouštět z USB externího disku?
Tohle je vlastně snadné. Nové RaspBerry už umí bootovat z SD karty, USB disku či SSD připojeného přímo na RPi bez komplikaci s nastavením. Nastavit se to dá přímo v raspi-config (Advanced…
-
TIP#2858: Přechod z Windows na Mac: Doporučené aplikace pro snadnou změnu
Máte zprovozněný Mac (Mini) tak, že je připojený k Internetu, displeji a myš a klávesnice ho umožňují ovládat. Takže můžete pokračovat instalacemi aplikací, aby to také k něčemu bylo. Budu to brát…
-
TIP#2842: Espanso coby náhrada AutoHotKey (AHK) a proč je to nejlepší text-expander pro Mac, Windows i Linux
Čistá instalace MacBooku pomohla zbavit se kupy aplikací, které jsem tam měl a nepoužíval. A také najít případně jiné lepší, než používané doposud. Velmi dobrý příklad je Espanso, open source pro automatické…
















