Co přesně dělá 2>/dev/null?

What Exactly Does 2 Dev Null Do



Ať už jste nový uživatel Linuxu nebo zkušený programátor bash, je vysoce pravděpodobné, že jste narazili na kryptický příkaz 2>/dev/null. Přestože tento příkaz vypadá technicky složitě, jeho účel je velmi jednoduchý. Vztahuje se na nulové zařízení, které se používá k potlačení výstupů různých příkazů. Tento článek rozdělí každou část příkazu 2>/dev/null, vysvětlí jeho účel a ukáže příklady jeho použití.

Nulové zařízení - „/dev/null“

Všechny systémy založené na Linuxu mají funkci zvanou virtuální zařízení. Tato virtuální zařízení spolupracují jako skutečné soubory v operačním systému. Fungování takových virtuálních zařízení je podobné skutečným zařízením; slouží k zápisu a čtení dat. Hlavní rozdíl mezi nimi je v tom, že data pro virtuální zařízení dodává operační systém.







/dev/null je nulové zařízení - speciální typ virtuálního zařízení. Je přítomen v každém systému Linux a účelem tohoto zařízení je zahodit cokoli, co mu bylo odesláno, a přečíst si Konec souboru (EOF). Většina virtuálních zařízení slouží ke čtení dat; /dev /null je však jedinečný, protože se používá k potlačení jakýchkoli dat do něj zapsaných. Jednoduše řečeno, funguje jako černá díra pro všechna data, která jsou do něj zapsána v operačních systémech Linux.



Nyní se podívejme na zbývající části příkazu 2> /dev /null



Popisovač souboru - „2“

Každé spuštění příkazu v systému Linux generuje tři přidružené soubory: standardní vstup, standardní výstup a standardní chybové soubory. Operační systém Linux odkazuje na každý z těchto souborů jedinečným nezáporným celým číslem.





  • „0“ pro standardní vstup
  • „1“ pro standardní výstup
  • „2“ pro standardní chybu

Technické termíny pro standardní vstup, standardní výstup a standardní chybové toky jsou stdin, stdout a stderr.

Víme, že číslo „2“ v příkazu „2>/dev/null“ odkazuje na standardní chybový (stderr) stream.



Operátor přesměrování souborů - „>“

Symbol „>“ je známý jako operátor přesměrování souborů. Jeho účelem je nasměrovat to, co je nalevo, na příkazy na pravé straně. Jednodušeji řečeno, jakýkoli řetězec dat vlevo bude směrován na pravou stranu operátora.

Doposud jsme pochopili účel každé složky příkazu 2>/dev/null. Odešle chybový proud do /dev /null, který jej zahodí. Jinými slovy, tento příkaz se používá k vyřazení a potlačení chybových výstupů. Pokud jste však zkušený Linuxový veterán, můžete se podívat na obsah souboru /dev /null spuštěním následujícího příkazu v terminálu:

$ls -ten /dev/nula

Tento příkaz se obvykle používá ve scénářích, kde potřebujeme filtrovat výstup na základě chyb nebo když chceme zahodit jakýkoli výstup spojený s chybnými popisy. V budoucnu se podíváme na příklady jeho použití v systému Ubuntu.

Pomocí 2>/dev/null

Protože víme, že příkaz 2>/dev/null slouží k vyřazení chyb, bude vždy použit ve spojení s jinými příkazy. Podobný přístup uvidíme v následujících příkladech. Terminál můžete otevřít buď přístupem z nabídky aplikací, nebo pomocí klávesové zkratky Ctrl + Alt + T.

V prvním příkladu budeme hledat v adresáři / sys / náhodný řetězec (v tomto případě helloworld). Příkaz pro vyhledávání je grep a jeho argumentem bude vyhledávací řetězec. Chcete -li vyhledat řetězec, zadejte následující příkaz.

$rukojeť -rAhoj světe/sys/

Tento vyhledávací příkaz je povinen zobrazit mnoho chyb, protože je používán bez přístupu root. Jeho chybový proud odešleme do/dev/null pomocí příkazu 2>/dev/null, abychom tyto chyby zahodili.

$rukojeť -rAhoj světe/sys/ 2> /dev/nula

Vidíme, že výstup příkazu je mnohem úhlednější a jednodušší než ten poslední. Důvodem je, že chyby jsou odstraněny pomocí 2> /dev /null, a protože příkaz grep nebyl schopen najít žádný soubor odpovídající našemu řetězci „helloworld“, nezobrazuje žádný výstup.

Abychom lépe porozuměli používání /dev /null, podíváme se na následující příklad pingování jakékoli webové stránky (v našem případě google.com). Chcete -li odeslat příkaz ping na google.com, proveďte následující příkaz:

$pingGoogle com

Pokud chceme vyloučit všechny neúspěšné pingy, můžeme použít příkaz 2>/dev/null:

$pingGoogle com2> /dev/nula

V tomto případě je standardní chybový proud (který ukazuje neúspěšné pingy na google.com) odeslán na virtuální zařízení /dev /null, které je zahodí.

Pokud však chceme vidět pouze neúspěšné pingy, můžeme provést následující příkaz:

$pingGoogle com1> /dev/nula

Zde odešleme standardní výstupní proud (stdout) do zařízení /dev /null, které jej zahodí. V důsledku toho nám zbývají pouze pingy, které se nedostaly na server google.com. V našem případě však nebyly žádné neúspěšné pingy. Můžeme také směrovat stdout a stderr na různá místa. To je užitečné, pokud chceme zahodit výstup a uložit chyby do protokolu nebo naopak. Můžete spustit následující příkaz pro uložení neúspěšných příkazů ping do protokolu chyb a zahodit standardní výstup příkazu ping:

$pingGoogle com1> /dev/nula2>error.log

V některých případech můžete chtít potlačit veškerý výstup příkazu (včetně standardního výstupu a standardních chyb). Můžeme toho dosáhnout použitím zařízení /dev /null trochu jiným způsobem. Chcete -li potlačit veškerý výstup, můžete zadat následující příkaz:

$pingGoogle com> /dev/nula2> &1

Pořadí příkazů je zde velmi důležité. Po provedení příkazu ping „>/dev/null“ řekne systému, aby potlačil výstup, a „2> & 1“ směruje standardní chybový tok na standardní výstup. Tímto způsobem je veškerý výstup příkazu zahozen.

Závěr

V tomto článku jsme rozebrali příkaz 2>/dev/null a jednoduché příklady a doufejme, že teď chápete, co každý jeho kousek dělá. To je však jen špička ledovce; v programování bash se null zařízení používají mnoha způsoby. Mezi pokročilejší použití patří kontrola existence souboru, automatizace instalací balíčků a zamezení spouštění skriptů v nechtěných výjimkách.