GNU/Linux >> Znalost Linux >  >> Linux

Co je „/dev/null 2&1“ v Linuxu

/dev/null je soubor pseudozařízení v Linuxu, který se používá k vyřazení výstupu přicházejícího z programů, zejména těch spouštěných na příkazovém řádku. Tento soubor se chová jako jímka, tj. cílový soubor, do kterého lze zapisovat, ale jakmile je do tohoto souboru zapsán jakýkoli proud dat, je okamžitě smazán.

To je užitečné, abyste se zbavili výstupu, který uživatel nevyžaduje. Programy a procesy dokážou generovat výstupní protokoly obrovské délky a analyzovat protokol je občas složité.

Například někdy program vyvolá dvě chyby, ale chybové protokoly se ztratí někde mezi stovkami protokolů informačních zpráv. V takovém případě můžeme protokoly informačních zpráv uložit do /dev/null .

Ve výše uvedeném příkladu se chybový výstup programu nazývá STDERR (Standardní chyba ) v Linuxu a je reprezentován celým číslem ‘2‘ , zatímco úspěch a výstup informací se nazývá STDOUT (Standardní výstup ) a je reprezentován celým číslem ‘1‘ .

Nyní jste mohli velmi často vidět následující příkaz příkazového řádku, který zahazuje obě STDERR a STDOUT na /dev/null .

$ command_name > /dev/null 2>&1

Pokusme se pochopit, co to znamená.

Operátor '>' se nazývá operátor přesměrování. Přesměruje výstup do souboru zadaného za ním, což je v tomto případě /dev/null , namísto tisku na terminálu.

Znamená to VŠECHNY výstup příkazu je přesměrován na /dev/null pomocí '>' operátor? Ne. Při použití výše uvedeným způsobem operátor pouze přesměruje STDOUT .

Máme tedy poslední část příkazu. '2>&1' znamená:přesměrovat STDERR (2) na STDOUT (1) . Důvod, proč musíme zadat ‘&1‘ a ne jednoduše „1“ je to prostě napsat ‘1‘ přesměruje výstup do textového souboru s názvem ‘1‘ . Se znakem ampersand (&) systém rozpozná, že 1 není název souboru, ale deskriptor souboru STDOUT .

Proto přesměrováváme STDOUT na /dev/null a STDERR na STDOUT a tímto způsobem je úplný výstup programu (programů) zahozen v /dev/null .

Například spuštění příkazu mv s a bez ‘>/dev/null 2>&1’ .

Bez přesměrování:

$ mv tmp.txt test/tmp2.txt /tmp

S přesměrováním STDOUT:

$ mv tmp.txt test/tmp2.txt /tmp > /dev/null

S přesměrováním STDOUT a STDERR:

$ mv tmp.txt test/tmp2.txt /tmp > /dev/null 2>&1
Závěr

V tomto článku jsme se pokusili pochopit, co znamená populárně používaná příkazová fráze v Linuxu:'> /dev/null 2>&1' . Pokud se chcete dozvědět o ‘/dev/null ‘ podrobněji, můžete tak učinit zde.

Pokud máte nějaké dotazy nebo připomínky, dejte nám vědět v komentářích níže!


Linux
  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Jak přenosné jsou /dev/stdin, /dev/stdout a /dev/stderr?

  3. Co jsou soubory /dev/zero a /dev/null v Linuxu

  1. Je špatné propojit /dev/random s /dev/urandom v Linuxu?

  2. Výstup ls -l v adresáři /dev systému Unix/Linux

  3. Existuje v Linuxu ekvivalent adresáře /dev/null?

  1. Linux:Rozdíl mezi /dev/console, /dev/tty a /dev/tty0?

  2. Kdy použít /dev/random vs /dev/urandom?

  3. Linux – Co znamená písmeno „u“ v /dev/urandom?