GNU/Linux >> Znalost Linux >  >> Linux

Naučte se základy toho, jak funguje přesměrování I/O (vstup/výstup) v systému Linux

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:

  1. výsledek příkazu – data, která má program vytvořit, a
  2. 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ů:

  1. stdin nebo 0 – je připojen ke klávesnici, většina programů čte vstup z tohoto souboru.
  2. stdout nebo 1 – je připojen k obrazovce a všechny programy odesílají své výsledky do tohoto souboru a
  3. 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:

  1. -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.
  2. -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:

  1. -l – umožňuje formát dlouhého výpisu
  2. -t – řazení podle času úpravy, přičemž nejnovější soubory jsou zobrazeny jako první
  3. -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:

  1. -n 1 – instruuje xargs, aby použil maximálně jeden argument na příkazový řádek a poslal jej do příkazu cp
  2. cp – zkopíruje soubor
  3. -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.


Linux
  1. Jak uložit výstup příkazu do souboru v Linuxu

  2. Jak používat příkaz Tar v Linuxu

  3. Jak zajistit, aby Iconv nahradil vstupní soubor převedeným výstupem?

  1. Jak připojit výstup do souboru?

  2. Jak zachytit výstup top příkazu do souboru v linuxu?

  3. Jak má mapování paměti souboru výrazné zvýšení výkonu oproti standardním I/O systémovým voláním?

  1. Práce s Input Output a přesměrováním chyb v Linuxu

  2. Jak zachytit terminálové relace a výstup pomocí příkazu skriptu Linux

  3. Přesměrování vstupu/výstupu v Linuxu/Unixu