Wenn wir bereits einige Begriffe des GNU / Linux-Verzeichnisbaums haben, sollten wir zumindest mit der / dev / -Referenz vertraut sein, auf die sich alle Dateien beziehen Hardwaregeräte.
Wenn wir in das Verzeichnis schauen / Dev / Wir werden eine "Datei" namens sehen nullWenn wir es jedoch öffnen möchten, um seinen Inhalt anzuzeigen, teilt uns das System mit, dass dies nicht möglich ist, da es sich nicht um normalen Inhalt handelt. Ich habe die Wortdatei beigefügt, da, wie Sie alle für Linux wissen, alles (Hardware und Software) als Datei dargestellt wird. |
Welchem Gerät entspricht / dev / null?
Stellen Sie sich aus praktischen Gründen eine Mülltonne, eine bodenlose Grube oder einen Weltraum vor, in den Sie alles werfen können, ohne es wiederherstellen zu können (egal wie sehr sich die Jungs von der NASA bemühen).
Aber wenn ich bereits Befehle wie rm habe, warum soll etwas Neues gelöscht werden?
Weil die Art und Weise, wie beide „Schwarzen Löcher“ funktionieren, völlig unterschiedlich ist: Wie würden Sie die Standardausgabe eines Fehlers in einem Befehl in einem Shell-Skript zur Laufzeit überschreiben? Hier kommt / dev / null ins Spiel.
Lassen Sie es uns anhand eines Beispiels sehen.
Wir haben eine Datei namens tests erstellt, die die Zeichenfolge "Hello World" enthält. Wenn wir den Inhalt dieser Datei in der Befehlszeile darstellen möchten, können Sie dies folgendermaßen tun:
Benutzer @ Laptop: ~ $ Katzentest
Hallo Welt
Wenn die Datei nicht vorhanden wäre oder als Test benannt wurde (mit einem 's' am Ende), wird in der Konsole der folgende Fehler angezeigt:
user @ Laptop: ~ $ Katzentests
cat: tests: Die Datei oder das Verzeichnis existiert nicht
Was können wir tun, um die Fehlermeldung zu vermeiden? Nun, leiten Sie die Ausgabe des Befehls im Fehlerfall einfach in eine "Mülltonne" um, dh nach / dev / null
Wie spezifizieren wir es im Fehlerfall? Hier geben Sie die Standardeingabe-, Ausgabe- und Fehlerwerte für ein Programm ein: STDIN, STDOUT und STDERR (die durch 0, 1 bzw. 2 ersetzt werden können). Auf diese Weise, wenn wir ...
Benutzer @ Laptop: ~ $ cat testet 2> / dev / null
Benutzer @ Laptop: ~ $
… Wir werden sehen, dass die Fehlermeldung nicht auf der Konsole angezeigt wird.
Sie müssen vorsichtig sein, da die Syntax wichtig ist: Zwischen den Zeichen 2 und> sollte kein Leerzeichen stehen. Andernfalls würde es Folgendes geben:
Benutzer @ Laptop: ~ $ cat testet 2> / dev / null
cat: tests: Die Datei oder das Verzeichnis existiert nicht
cat: 2: Die Datei oder das Verzeichnis existiert nicht
Im Gegensatz dazu wirkt sich ein Leerzeichen zwischen> und / dev / null nicht negativ auf das Ergebnis aus.
Wir könnten auch die Fehlerumleitung verwenden, um beispielsweise Fehler in einer Protokolldatei wie folgt zu erfassen:
user @ Laptop: ~ $ cat tests 2> err.log
Ein weiterer interessanter Fall wäre die Erfassung von Ergebnissen in einer anderen Datei, solange kein Fehler auftritt, für den wir Folgendes angeben würden:
user @ Laptop: ~ $ cat test 1> output_result 2> err.log
Schließlich ist es möglich, den Ausdruck «> / dev / null 2> & 1» einzufügen, in dem die Standardausgabe und die Fehlerausgabe kombiniert werden, und sie so umzuleiten, dass in keinem Fall Ausgabeinformationen erhalten werden.
Ah, aber eines der am häufigsten verwendeten Dienstprogramme von / dev / null fehlt, nämlich das Leeren von Dateien: $ cat / dev / null> file.log Auf diese Weise ist die Datei file.log leer. Füge es hinzu!
Es war genau die Erklärung, nach der er suchte.
Ich unterstütze den Antrag, ihn hinzuzufügen =)
Saludos!
Hallo, vor allem ist der Artikel sehr gut! Zum zweiten möchte ich mit diesem Link etwas zum Thema beitragen Cron Job in PHP von Cpanel und die dritten Glückwünsche für den Blog!
Schöner Artikel über dev / null, was für eine Schande, ich glaube, ich habe ihn fälschlicherweise an der falschen Stelle kommentiert! Ich entschuldige mich
Dank guter Beitrag
Grüße Ich bekomme keinen Angriff. Ich benutze andrirc und bekomme einen privaten von meinem Spitznamen mit dem Wort Null. 2 Sekunden später schließt das Programm, das ich gelesen habe, und soweit ich sehe, kann dies nur von der Shell durchgeführt werden, nicht von einer externen Person. Ich habe versucht, mich selbst zu ignorieren / -lrpcntikd zu ignorieren und nichts überrascht mich, dass der Befehl immer wieder kommt. Wenn Sie versuchen können, es zu blockieren, würde ich es begrüßen. Prost
Was passiert, wenn bei der Ausführung des Satzes das Symbol> nicht platziert wird?
Könnte mich bitte jemand führen?
Guten Morgen, ich habe Debian netinst in ACER Extensa 5620Z – 32 Bit installiert.Sobald die Installation von USB abgeschlossen ist und der Pendrive entfernt wird, bootet er von der Festplatte (nicht vom Stift neu installieren), sondern im Moment des Bootens das system sie fragt mich:
Debian-Login: xxxxxxxx (ok)
Passwort: xxxxxxxx (ok)
nil@debian:~$ ???? was ist das? Was soll ich da hinstellen?
Ohne diesen Befehl kann ich nicht mit dem Systemstart fortfahren.
Kannst du mir helfen? Ich weiß nicht, wie ich weitermachen soll.
Danke sehr. Mit freundlichen Grüßen.