/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 kannstat /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