GNU/Linux >> Znalost Linux >  >> Linux

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

Každý proces v Linuxu je vybaven třemi otevřenými soubory (obvykle nazývanými deskriptor souborů). Tyto soubory jsou standardními vstupními, výstupními a chybovými soubory. Ve výchozím nastavení:

  • Standardní vstup je klávesnice abstrahovaná jako soubor, aby bylo snazší psát skripty shellu.
  • Standardní výstup je okno shellu nebo terminál, ze kterého se skript spouští, abstrahovaný jako soubor, aby se opět usnadnilo psaní skriptů a programů
  • Standardní chyba je stejný jako standardní výstup:okno shellu nebo terminál, ze kterého se skript spouští.

Deskriptor souboru je jednoduše číslo, které odkazuje na otevřený soubor. Ve výchozím nastavení je deskriptor souboru 0 (nula) odkazuje na standardní vstup a často se zkracuje jako stdin . Deskriptor souboru 1 odkazuje na standardní výstup (stdout ) a deskriptor souboru 2 odkazuje na standardní chybu (stderr ). Tato čísla jsou důležitá, když potřebujete získat přístup k určitému souboru, zvláště když chcete tyto soubory přesměrovat do jiných umístění, čísla deskriptorů souborů stoupají od nuly.

Přesměrování standardního výstupu

Syntaxe pro přesměrování výstupu příkazu do souboru.

# Command_options_and_arguments> výstupní_soubor

Příklad :

[e-mail chráněný]:~$ cat /proc/cpuinfo> command.txt

Můžeme vidět data, která by se dostala na obrazovku pomocí příkazu more:

 [Chráněný emailem]:~ $ více Command.txt Procesor:0Vendor_id:OrenuIntelcpu Family:6model:37model Jméno:Intel (R) Core (TM) I3 CPU M 370 @ 2,40GHzstepping:5Microcode:0x616CPU MHz:0x616CPU MHz:0.000Cache Velikost :6144 kB fyzické id   :0sourozenci     :2jádrové id       :0jádrů procesoru     :2apicid         :0počáteční apicid    :0fpu  :   5 výjimka:p        ano     výjimka:                  výjimka 

Operátor> říká shellu, aby přesměroval výstup příkazu do daného souboru. Pokud soubor existuje, smaže starý obsah souboru a nahradí jej výstupem příkazu.

Přesměrování vstupu příkazu

Syntaxe pro přesměrování vstupu příkazu tak, aby pocházel ze souboru.

# Command_options_and_arguments

Pomocí operátoru

[e-mail chráněný]:~$ wc -l <​​command.txt52

V tomto příkladu je vstup do „wc ‘ příkaz pochází ze souboru s názvem command.txt. Shell odešle obsah souboru command.txt jako standardní vstup pro příkaz wc.

Poznámka: Můžeme také kombinovat obě přesměrování s následující syntaxí :

# command_options_and_agruments výstupní_soubor.

Standardní chyba přesměrování

Kromě přesměrování standardního vstupu a výstupu pro skript nebo příkaz můžeme také přesměrovat standardní chybu. I když standardní chyba ve výchozím nastavení jde na stejné místo jako standardní výstup – okno shellu nebo terminál. Existují dobré důvody, proč jsou stdout a stderr zpracovány odděleně. Hlavním důvodem je, že můžeme přesměrovat výstup příkazu nebo příkazů do souboru, ale nemáte možnost zjistit, zda došlo k chybě. Oddělení stderr od stdout umožňuje, aby se na obrazovce objevila chybová zpráva, zatímco výstup stále jde do souboru.

Syntaxe pro přesměrování stderr z příkazu do souboru.

# command_options_and_agruments 2> výstupní_soubor.

2 v 2> odkazuje na deskriptor souboru 2, číslo deskriptoru pro stderr.

Příklad:

[e-mail protected]:~$ lsash /usr/bin 2> commands-error.txt[email protected]:~$ cat commands-error.txt Nebyl nalezen žádný příkaz 'lsash', měli jste na mysli:Příkaz 'sash' z balíček 'sash' (universe)lsash:příkaz nenalezen

Přesměrování standardního výstupu i standardní chyby

Použijte 2>&1 Syntaxe pro přesměrování standardní chyby do stejného umístění jako standardní výstup .

Příklad:1

[e-mail chráněný]:~$ ls /usr/bin> command.txt 2>&1

Nad příkazem jsou tři části.

  • ls /usr/bin je spuštění příkazu
  • > command.txt přesměruje výstup příkazu ls
  • 2>&1 odešle výstup deskriptoru souboru 2, stderr , do stejného umístění jako deskriptor souboru 1, stdout.

Příklad:2

[e-mail chráněný]:~$ ls /usr2222/bin> command.txt 2>&1[e-mail chráněný]:~$ další command.txtls:nelze získat přístup k /usr2222/bin:Žádný takový soubor nebo adresář

Všimněte si, že výše uvedený příklad předpokládá, že váš systém nemá názvy adresářů „/usr2222/bin“

Přesměrování stderr i stdout najednou

[e-mail chráněný]:~$ ls /usr2222/bin &> command.txt[email protected]:~$ more command.txtls:nelze získat přístup k /usr2222/bin:Žádný takový soubor nebo adresář

Ve výše uvedeném příkazu je ls příkaz , /usr2222/bin je argument pro „ls příkaz ‘ a ‘&> command.txt ‘ přesměrovat stdout i stderr do souboru s názvem command.txt.

Připojování k souborům

Pomocí operátoru „>>“ přesměrujte výstup příkazu, ale připojte jej k souboru, pokud existuje. Syntaxe je uvedena níže:

# Příkaz>> file_to_append.

Příklad:

[chráněno e-mailem]:~$ doba provozu>> sysload.txt[chráněno e-mailem]:~$ doba provozu>> sysload.txt[chráněno e-mailem]:~$ doba provozu>> sysload.txt[chráněno e-mailem]:~$ více sysload.txt11:49:17 až 1:22, 3 uživatelé, průměr zatížení:0,28, 0,12, 0,1111:49:28 až 1:22, 3 uživatelé, průměr zatížení:0,40, 0,15, 0,1211:49:36 až 1:23, 3 uživatelé, průměrná zátěž:0,33, 0,14, 0,12

Zkrácení souborů:

Pro zkrácení souborů můžeme použít zkrácenou syntaxi vynecháním příkazu před> operátorem . Syntaxe je uvedena níže:

#> název_souboru

Můžeme také použít alternativní formát s dvojtečkou :

# :> název_souboru

Oba tyto příkazy bez příkazů vytvoří soubor, pokud neexistuje, a zkrátí soubor na nula bajtů, pokud soubor existuje.

[e-mail chráněný]:~$ ls /usr/bin> command.txt[e-mail chráněný]:~$ ls -l command.txt-rw-rw-r-- 1 linuxtechi linuxtechi 19713 2. prosince 12:18 příkaz .txt[e-mail chráněný]:~$> command.txt[e-mail chráněný]:~$ ls -l command.txt-rw-rw-r-- 1 linuxtechi linuxtechi 0. prosince 12:18 command.txt

Rychlé odesílání výstupu nikam

Existují některé scénáře, kdy nejen chcete přesměrovat výstup příkazu, ale chcete výstup zahodit. Můžete to udělat přesměrováním výstupu příkazu do nulového souboru „/dev/null“ Nulový soubor spotřebovává veškerý výstup, který se mu posílá, jako kdyby /dev/null byla hvězda černé díry.

[e-mail chráněný]:~$ ls /usr/bin> /dev/null

Poznámka:Soubor /dev/null se často nazývá bit bucket.

Doporučená četba :Jak používat šifrované heslo ve skriptu Linux Bash Shell


Linux
  1. Zkopírujte a vložte na příkazový řádek Linuxu pomocí xclip

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

  3. Jak interpretovat a opravit chybu vstupu/výstupu v Linuxu?

  1. Třídit příkaz v Linuxu s příklady

  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

  1. Najděte soubory a adresáře v Linuxu pomocí příkazu find

  2. Čtěte a zapisujte data odkudkoli s přesměrováním v terminálu Linux

  3. Pipes a přesměrování v Linuxu – vysvětleno!