/dev/null v Linuxu je soubor zařízení null. Tím se zahodí vše, co je do něj zapsáno, a vrátí se EOF při čtení.
Toto je hack příkazového řádku, který funguje jako vakuum, které vysává vše, co je na něj vrženo.
Pojďme se podívat na to, co to znamená a co s tímto souborem můžeme dělat.
/dev/null Vlastnosti
Tím se vrátí konec souboru (EOF ), pokud se jej pokusíte přečíst pomocí příkazu cat.
cat /dev/null
Toto je platný soubor, který lze ověřit pomocí
stat /dev/null
To mi dává výstup
File: /dev/null Size: 0 Blocks: 0 IO Block: 4096 character special file Device: 6h/6d Inode: 5 Links: 1 Device type: 1,3 Access: (0666/crw-rw-rw-) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2020-02-04 13:00:43.112464814 +0530 Modify: 2020-02-04 13:00:43.112464814 +0530 Change: 2020-02-04 13:00:43.112464814 +0530
To ukazuje, že tento soubor má velikost 0 bajtů a nemá přidělené žádné bloky. Oprávnění souboru jsou také nastavena tak, že do něj může kdokoli číst/zapisovat, ale nemůže jej spustit.
Protože se nejedná o spustitelný soubor, nemůžeme použít potrubí pomocí |
operátor pro přesměrování na /dev/null
. Jediným způsobem je použití přesměrování souborů (>
, >>
, nebo <
, <<
).
Níže uvedený diagram ukazuje, že /dev/null
je skutečně platný soubor.
Pojďme se nyní podívat na některé běžné případy použití /dev/null
.
Přesměrování na /dev/null v Linuxu
Jakýkoli výstup skriptu, který používáme, můžeme zahodit přesměrováním na /dev/null
.
Můžeme například zkusit zahodit echo
zprávy pomocí tohoto triku.
echo 'Hello from JournalDev' > /dev/null
Nedostanete žádný výstup, protože je zahozen!
Zkusme spustit příkaz nesprávně a jeho výstup převedeme do /dev/null
.
cat --INCORRECT_OPTION > /dev/null
Stále dostáváme výstup jako tento:
cat: unrecognized option '--INCORRECT' Try 'cat --help' for more information.
Proč se tohle děje? Je to proto, že chybové zprávy pocházejí z stderr
, ale zahazujeme pouze výstup z stdout
.
Musíme vzít stderr
v úvahu také.
Zahodit chybové zprávy
Přesměrujeme stderr na /dev/null , spolu se stdout. Můžeme použít deskriptor souboru pro stderr(=2 ) za to.
cat --INCORRECT_OPTION > /dev/null 2>/dev/null
To nám dá to, co potřebujeme!
Existuje jiný způsob, jak udělat totéž; přesměrováním stderr nejprve na stdout a poté přesměrováním stdout na /dev/null .
Syntaxe pro toto bude:
command > /dev/null 2>&1
Všimněte si 2>&1
na konci. Přesměrujeme stderr(2 ) na stdout(1 ). Používáme &1
zmínit shellu, že cílový soubor je deskriptor souboru a nikoli název souboru.
cat --INCORRECT_OPTION > dev/null 2>&1
Pokud tedy použijeme 2>1
, přesměrujeme pouze stderr
do souboru s názvem 1
. To není to, co chceme!
Závěr
Doufejme, že se tím věci trochu vyjasní, takže nyní můžete používat /dev/null v Linuxu, vědět, co to znamená! Neváhejte se zeptat v sekci komentářů níže.
Odkazy
- Otázka StackOverflow