GNU/Linux >> LINUX-Kenntnisse >  >> Linux

/dev/null unter Linux

/dev/null in Linux ist eine Null-Gerätedatei. Dies verwirft alles, was darauf geschrieben wurde, und gibt EOF zurück beim Lesen.

Dies ist ein Befehlszeilen-Hack, der als Vakuum fungiert und alles aufsaugt, was ihm zugeworfen wird.

Werfen wir einen Blick darauf, was es bedeutet und was wir mit dieser Datei tun können.

/dev/null-Eigenschaften

Dadurch wird ein Dateiende (EOF) zurückgegeben ) Zeichen, wenn Sie versuchen, es mit dem cat-Befehl zu lesen.

cat /dev/null

Dies ist eine gültige Datei, die mit

verifiziert werden kann
stat /dev/null

Dies gibt mir eine Ausgabe von

  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

Dies zeigt, dass diese Datei eine Größe von 0 Bytes hat und ihr null Blöcke zugewiesen sind. Die Dateiberechtigungen sind auch so eingestellt, dass jeder sie lesen/schreiben, aber nicht ausführen kann.

Da es sich nicht um eine ausführbare Datei handelt, können wir kein Piping mit | verwenden Operator zum Umleiten auf /dev/null . Die einzige Möglichkeit ist die Verwendung von Dateiumleitungen (> , >> , oder < , << ).

Das folgende Diagramm zeigt, dass /dev/null ist tatsächlich eine gültige Datei.

Werfen wir nun einen Blick auf einige gängige Anwendungsfälle für /dev/null .

Umleitung zu /dev/null unter Linux

Wir können jede Ausgabe eines von uns verwendeten Skripts verwerfen, indem wir zu /dev/null umleiten .

Beispielsweise können wir versuchen, echo zu verwerfen Nachrichten mit diesem Trick.

echo 'Hello from JournalDev' > /dev/null

Sie erhalten keine Ausgabe, da sie verworfen wird!

Lassen Sie uns versuchen, einen Befehl falsch auszuführen und seine Ausgabe an /dev/null weiterzuleiten .

cat --INCORRECT_OPTION > /dev/null

Wir erhalten immer noch eine Ausgabe wie diese:

cat: unrecognized option '--INCORRECT'
Try 'cat --help' for more information.

Warum passiert das? Das liegt daran, dass die Fehlermeldungen von stderr kommen , aber wir verwerfen nur die Ausgabe von stdout .

Wir müssen stderr nehmen ebenfalls berücksichtigen.

Fehlermeldungen verwerfen

Lassen Sie uns stderr nach /dev/null umleiten , zusammen mit stdout. Wir können den Dateideskriptor für stderr(=2 verwenden ) dafür.

cat --INCORRECT_OPTION > /dev/null 2>/dev/null

Das wird uns geben, was wir brauchen!

Es gibt einen anderen Weg, dasselbe zu tun; indem Sie stderr zuerst auf stdout und dann stdout auf /dev/null umleiten .

Die Syntax dafür lautet:

command > /dev/null 2>&1

Beachten Sie 2>&1 Am Ende. Wir leiten stderr(2 ) nach stdout(1 ). Wir verwenden &1 um der Shell mitzuteilen, dass die Zieldatei ein Dateideskriptor ist und kein Dateiname.

cat --INCORRECT_OPTION > dev/null 2>&1

Wenn wir also 2>1 verwenden , werden wir nur stderr umleiten in eine Datei namens 1 . Das wollen wir nicht!

Schlussfolgerung

Hoffentlich klärt dies die Dinge ein wenig auf, sodass Sie jetzt /dev/null verwenden können in Linux, wissen, was es bedeutet! Fühlen Sie sich frei, Fragen im Kommentarbereich unten zu stellen.

Referenzen

  • StackOverflow-Frage

Linux
  1. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  2. Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0?

  3. Wie portabel sind /dev/stdin, /dev/stdout und /dev/stderr?

  4. Ist>&- effizienter als>/dev/null?

  5. Wann sollte /dev/random vs. /dev/urandom verwendet werden?

tty (/dev/tty ) vs. pts (/dev/pts) unter Linux

Was ist „/dev/null 2&1“ unter Linux

So leiten Sie die Ausgabe unter Linux nach /dev/null um

Was ist /dev/null unter Linux

echo oder print /dev/stdin /dev/stdout /dev/stderr

Gibt es unter Linux ein Verzeichnisäquivalent zu /dev/null?