Wenn Sie Shell-Programmierung gelernt haben, sind Sie vielleicht schon auf etwas wie /dev/null gestoßen. In diesem Artikel werden wir verstehen, was es ist und wie es verwendet wird. Beginnen wir damit, zu verstehen, was /dev ist.
Was ist /dev?
Im Linux-Dateisystem ist alles eine Datei oder ein Verzeichnis. Auch auf Geräte wird als Datei zugegriffen. Für Ihre Festplattenpartitionen, Ihren USB-Stick und Ihre Lautsprecher gibt es eine Datei, über die auf diese zugegriffen werden kann. Um nun zu verstehen, wie auf Geräte als Dateien zugegriffen wird, stellen Sie sich Folgendes vor: Was machen wir mit einer Datei? Wir lesen Daten daraus und schreiben Daten darauf. Ein Gerät wie ein Lautsprecher kann Daten eingeben, um Ton zu erzeugen, eine Festplatte kann zum Lesen und Schreiben von Daten verwendet werden, ein Drucker nutzt die Eingabe, um Dateien zu drucken usw. Dateien und Geräte ähneln sich in dieser Hinsicht
/dev ist ein Verzeichnis, das alle physischen und virtuellen Geräte eines Linux-Systems speichert. Physische Geräte sind leicht zu verstehen, es handelt sich um greifbare Geräte wie USB-Sticks, Lautsprecher, Drucker usw. Ein Linux-System verfügt auch über virtuelle Geräte, die als Gerät fungieren, aber kein physisches Gerät darstellen.
So enthüllen Sie versteckte Apps
Was ist /dev/null?
Es handelt sich um ein virtuelles Gerät, das über eine besondere Eigenschaft verfügt: Alle nach /dev/null geschriebenen Daten verschwinden oder verschwinden. Aufgrund dieser Eigenschaft wird es auch Bitbucket oder Blackhole genannt. Lassen Sie uns eine Demonstration sehen.
Leiten Sie die Ausgabe nach /dev/null um

In dieser Demo können Sie sehen, dass wir einige Daten hinzugefügt haben, diese Daten jedoch nicht gespeichert wurden. Diese besondere Eigenschaft von /dev/null hat einige Anwendungsfälle. Schauen wir sie uns an.
Verwendung von /dev/null
Da alles, was darauf geschrieben wird, verworfen wird, können Sie Dateien nach /dev/null verschieben, um sie zu löschen. Dies ist jedoch kein weit verbreiteter Anwendungsfall. Es wird hauptsächlich verwendet, um Standardausgabe und Standardfehler aus einer Ausgabe zu entfernen.
Was sind Standardausgabe und Standardfehler?
Die Ausgabe eines Linux-Befehls enthält zwei Datenströme: Standardausgabe (stdout) und Standardfehler (stderr0). Während die Standardausgabe die normale Ausgabe ist, wenn der Befehl keine Fehler aufweist, ist der Standardfehler der vom Befehl generierte Fehler. Die Ausgabe kann sowohl Standardausgabe als auch Standardeingabe enthalten. Beispiel für stdout und stderr:
Lassen Sie uns das folgende Shell-Skript ausführen
# /bin/sh ls apt update>

Der erste Befehl wurde erfolgreich ausgeführt, der zweite generierte jedoch einen Fehler. Da stdout und stderr zwei separate Datenströme sind, können sie separat verarbeitet werden.
Wie greife ich auf stderr und stdout zu?
Stdout und stderr sind Datenströme, die beide unter Linux als Datei behandelt werden. Wenn Sie eine Aktion für diese ausführen möchten, verwenden Sie einen Dateideskriptor, der den Dateistream eindeutig identifiziert. Der Dateideskriptor für stdout ist 1 und für stderr ist 2.
Um separat darauf zuzugreifen, sehen wir uns den folgenden Befehl an, der für dieselbe Skriptdatei ausgeführt wird, die im vorherigen Beispiel verwendet wurde.
./script.sh 1>stdout.txt>

Darin sehen Sie, dass die Ausgabe Standardfehler enthält, die Standardausgabe jedoch nicht angezeigt wurde. Dies liegt daran, dass der stdout-Stream an die Datei stdout.txt gesendet wurde und Sie sehen, dass die Datei stdout.txt die Standardausgabe enthält.
Beim Schreiben eines Shell-Skripts möchten wir möglicherweise den Standardfehler aus der Ausgabe verwerfen. Welchen Stream wir auch immer aus der Ausgabe unterdrücken möchten, dieser Datenstrom kann in /dev/null geschrieben werden. Sie könnten diese Daten wie im obigen Beispiel in eine andere Datei schreiben. Wenn Sie diese Daten jedoch nicht benötigen, warum sollten Sie dann Speicher dafür verschwenden? Es ist besser, sie vollständig zu verwerfen. Sehen wir uns das folgende Beispiel an
./script.sh 2>/dev/null>

Und einfach so haben wir den stderr aus der Ausgabe entfernt. Wenn Sie die gesamte Ausgabe verwerfen möchten, können Sie den folgenden Befehl verwenden
command>/dev/null 2>&1>
Der Befehl &> leitet die Ausgabe des links genannten Dateideskriptors (im obigen Befehl die Ausgabe von 2) an den Stream des rechts genannten Dateideskriptors um. Die Ausgabe von stderr (2) wird also an stdout(1) umgeleitet, das wiederum in /dev/null geschrieben und somit zerstört wird.
Sicheres Löschen von Dateien
„/dev/null“ findet Nutzen beim sicheren Löschen von Dateien. Durch die Umleitung von „/dev/null“ auf eine Datei können Sie deren Inhalt effektiv mit Nullbytes überschreiben, was die Wiederherstellung sinnvoller Daten erschwert.
Zum Beispiel:
cat /dev/null>sensible_Datei>
Dieser Befehl ersetzt den Inhalt von „sensitive_file“ durch Nullbytes und gewährleistet so das sichere Löschen.
lokales Datum
Bereinigen von Protokolldateien
Protokolldateien können im Laufe der Zeit erhebliche Datenmengen ansammeln. Um Protokolldateien zu löschen, ohne laufende Dienste zu unterbrechen, können Sie deren Inhalt nach „/dev/null“ umleiten.
Zum Beispiel:
cat /dev/null>/var/log/syslog>
Dieser Befehl leert die Datei „syslog“, indem er ihren Inhalt nach „/dev/null“ umleitet, wodurch das Protokoll effektiv bereinigt wird, ohne die Datei selbst zu löschen.
Tipps und Tricks:
- Standardausgabe nach „/dev/null“ umleiten: „command> /dev/null“
- Standardfehler nach „/dev/null“ umleiten: „Befehl 2> /dev/null“
- Sowohl Ausgabe als auch Fehler werden nach „/dev/null“ umgeleitet: „command>/dev/null 2>&1“
Abschluss
In diesem Artikel haben wir besprochen, dass „/dev/null“ unter Linux ein virtuelles schwarzes Loch ist, in dem Daten verschwinden, wenn sie darauf geschrieben werden. Es wird häufig verwendet, um Ausgaben und Fehler zu verwerfen und so die Befehlsausführung sauberer zu gestalten. Es kann auch zum sicheren Löschen von Dateien und zum Bereinigen von Protokolldateien verwendet werden. Das Verständnis seiner Funktionalität ermöglicht effiziente Befehlszeilenoperationen unter Linux.