Jedním z nejdůležitějších a nejzajímavějších témat pod správou Linuxu je přesměrování I/O. Tato funkce příkazového řádku umožňuje přesměrovat vstup a/nebo výstup příkazů ze souborů a/nebo do souborů nebo spojit více příkazů dohromady pomocí kanálů, aby vytvořily to, co je známé jako „potrubí příkazů “.
Všechny příkazy, které spouštíme, v zásadě produkují dva druhy výstupu:
- výsledek příkazu – data, která má program vytvořit, a
- stav programu a chybové zprávy, které informují uživatele o podrobnostech provádění programu.
V Linuxu a dalších unixových systémech existují tři výchozí soubory pojmenované níže, které jsou také identifikovány shellem pomocí čísel deskriptorů souborů:
- stdin nebo 0 – je připojen ke klávesnici, většina programů čte vstup z tohoto souboru.
- stdout nebo 1 – je připojen k obrazovce a všechny programy odesílají své výsledky do tohoto souboru a
- stderr nebo 2 – programy odesílají stavové/chybové zprávy do tohoto souboru, který je také připojen k obrazovce.
Přesměrování I/O vám proto umožňuje změnit zdroj vstupu příkazu a také to, kam se odesílají jeho výstupy a chybové zprávy. A to je možné díky “<”
a “>”
operátory přesměrování.
Jak přesměrovat standardní výstup do souboru v Linuxu
Standardní výstup můžete přesměrovat jako v příkladu níže, zde chceme uložit výstup příkazu top pro pozdější kontrolu:
$ top -bn 5 >top.log
Kde jsou vlajky:
-b
– umožňuje nahoře spustit v dávkovém režimu, abyste mohli přesměrovat jeho výstup do souboru nebo jiného příkazu.-n
– určuje počet iterací před ukončením příkazu.
Můžete si prohlédnout obsah top.log
soubor pomocí příkazu cat takto:
$ cat top.log
Chcete-li připojit výstup příkazu, použijte “>>”
operátor.
Chcete-li například připojit výstup příkazu top výše do souboru top.log soubor, zejména ve skriptu (nebo na příkazovém řádku), zadejte následující řádek:
$ top -bn 5 >>top.log
Poznámka :Pomocí čísla deskriptoru souboru je výše uvedený příkaz pro přesměrování výstupu stejný jako:
$ top -bn 5 1>top.log
Jak přesměrovat standardní chybu do souboru v Linuxu
Chcete-li přesměrovat standardní chybu příkazu, musíte explicitně zadat číslo deskriptoru souboru, 2
aby shell pochopil, co se snažíte udělat.
Například níže uvedený příkaz ls způsobí chybu při spuštění normálním uživatelem systému bez oprávnění root:
$ ls -l /root/
Standardní chybu můžete přesměrovat do souboru, jak je uvedeno níže:
$ ls -l /root/ 2>ls-error.log $ cat ls-error.log


Chcete-li připojit standardní chybu, použijte příkaz níže:
$ ls -l /root/ 2>>ls-error.log
Jak přesměrovat standardní výstup/chybu do jednoho souboru
Je také možné zachytit veškerý výstup příkazu (jak standardní výstup, tak standardní chybu) do jednoho souboru. To lze provést dvěma možnými způsoby zadáním čísel deskriptorů souborů:
1. První je poměrně stará metoda, která funguje následovně:
$ ls -l /root/ >ls-error.log 2>&1
Výše uvedený příkaz znamená, že shell nejprve odešle výstup příkazu ls do souboru ls-error.log (pomocí >ls-error.log
) a poté zapíše všechny chybové zprávy do deskriptoru souboru 2 (standardní výstup), který byl přesměrován do souboru ls-error.log (pomocí 2>&1
). To znamená, že standardní chyba je také odeslána do stejného souboru jako standardní výstup.
2. Druhá a přímá metoda je:
$ ls -l /root/ &>ls-error.log
Můžete také připojit standardní výstup a standardní chybu k jedinému souboru, jako je to:
$ ls -l /root/ &>>ls-error.log
Jak přesměrovat standardní vstup do souboru
Většina příkazů, pokud ne všechny, získává svůj vstup ze standardního vstupu a ve výchozím nastavení je standardní vstup připojen ke klávesnici.
Chcete-li přesměrovat standardní vstup ze souboru jiného než klávesnice, použijte “<”
operátor, jak je uvedeno níže:
$ cat <domains.list


Jak přesměrovat standardní vstup/výstup do souboru
Můžete provést standardní přesměrování vstupu a standardního výstupu současně pomocí příkazu sort, jak je uvedeno níže:
$ sort <domains.list >sort.output
Jak používat přesměrování I/O pomocí potrubí
Chcete-li přesměrovat výstup jednoho příkazu jako vstup jiného, můžete použít roury, což je mocný prostředek k vytváření užitečných příkazových řádků pro složité operace.
Například níže uvedený příkaz vypíše prvních pět naposledy upravených souborů.
$ ls -lt | head -n 5
Zde jsou možnosti:
-l
– umožňuje formát dlouhého výpisu-t
– řazení podle času úpravy, přičemž nejnovější soubory jsou zobrazeny jako první-n
– určuje počet řádků záhlaví, které se mají zobrazit
Důležité příkazy pro vytváření potrubí
Zde si stručně zopakujeme dva důležité příkazy pro vytváření kanálů příkazů a jsou to:
xargs který se používá k vytváření a spouštění příkazových řádků ze standardního vstupu. Níže je uveden příklad kanálu, který používá xargs , tento příkaz se používá ke zkopírování souboru do více adresářů v Linuxu:
$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh


A možnosti:
-n 1
– instruuje xargs, aby použil maximálně jeden argument na příkazový řádek a poslal jej do příkazu cpcp
– zkopíruje soubor-v
– zobrazuje průběh příkazu kopírování.
Další možnosti použití a informace naleznete vxargs manuálová stránka:
$ man xargs
Tričko příkaz čte ze standardního vstupu a zapisuje na standardní výstup a soubory. Můžeme předvést, jak tee funguje následovně:
$ echo "Testing how tee command works" | tee file1


Souborové nebo textové filtry se běžně používají s rourami pro efektivní operace se soubory Linuxu, ke zpracování informací výkonnými způsoby, jako je restrukturalizace výstupu příkazů (to může být životně důležité pro generování užitečných linuxových sestav), úprava textu v souborech a několik dalších správ systému Linux. úkoly.
Chcete-li se dozvědět více o linuxových filtrech a kanálech, přečtěte si tento článek Najít 10 nejlepších IP adres přistupujících k serveru Apache, ukazuje užitečný příklad použití filtrů a kanálů.
V tomto článku jsme vysvětlili základy přesměrování I/O v Linuxu. Nezapomeňte se podělit o své myšlenky prostřednictvím sekce zpětné vazby níže.