GNU/Linux >> Znalost Linux >  >> Linux

/dev/null v Linuxu

/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

Linux
  1. Jak vygenerovat náhodné heslo v linuxu pomocí /dev/random

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

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

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

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

  3. Jak spustit soubor sh z jiného souboru sh

  1. DD z /dev/zero do /dev/null...co se vlastně stane

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

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