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.