/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