Detaillierte Erläuterung verschiedener praktischer Verwendungen virtueller Gerätedateien im Linux-System

Detaillierte Erläuterung verschiedener praktischer Verwendungen virtueller Gerätedateien im Linux-System

Hallo zusammen, ich bin Liang Xu.

Wie wir alle wissen, ist unter Linux alles eine Datei, auch Gerätedateien. Während der Arbeit sehen wir oft /dev/null . Was also ist das?

Technisch gesehen ist /dev/null eine virtuelle Gerätedatei. Für das Programm werden diese virtuellen Gerätedateien wie echte Dateien behandelt. Programme können Daten aus dieser Datenquelle anfordern und die resultierenden Daten werden vom Betriebssystem bereitgestellt. Allerdings werden diese Daten nicht von der Platte gelesen, sondern dynamisch vom Betriebssystem erzeugt. Ein typisches Beispiel für eine virtuelle Gerätedatei ist /dev/zero .

Wenn Sie jedoch Daten in /dev/null schreiben möchten, werden alle in /dev/null geschriebenen Daten letztendlich verworfen, als würden sie in ein schwarzes Loch geworfen.

Was ist in diesem Fall der Nutzen von /dev/null ? Um dieses Problem zu verstehen, müssen Sie zunächst über grundlegende Kenntnisse der Standardausgabe und Standardfehlerausgabe von Linux-Systemen oder Unix- und Unix-ähnlichen Systemen verfügen.

Standardausgabedatei und Standardfehlerausgabedatei

Ein Befehlszeilenprogramm kann zwei Arten von Ausgaben generieren: Standardausgabe und Standardfehlerausgabe. Die Standardausgabe wird in der Standardausgabedatei stdout aufgezeichnet, und die Standardfehlerausgabe wird in der Standardfehlerausgabedatei stderr aufgezeichnet.

Standardmäßig sind Standardausgabe- und Standardfehlerdateien Ihrem Terminalfenster (oder Ihrer Konsole) zugeordnet. Dies bedeutet, dass alles, was an die Standardausgabe oder den Standardfehler gesendet wird, auf Ihrem Bildschirm angezeigt wird.

Durch eine Umleitung in der Shell können Sie dieses Verhalten jedoch ändern. Sie können beispielsweise die Standardausgabe in eine Datei umleiten. Auf diese Weise werden die Standardausgabeinformationen nicht auf dem Bildschirm angezeigt, sondern in dieser Datei gespeichert, sodass Sie sie später anzeigen können. Alternativ können Sie die Standardausgabeinformationen auf ein anderes physisches Gerät umleiten, beispielsweise ein digitales LED- oder LCD-Display.

Einige gängige Umleitungsmethoden sind wie folgt:

  • Mit 2> können Sie die Standardfehlerausgabe umleiten. Beispiel: 2>/dev/null oder 2>/home/user/error.log .
  • Mit 1> können Sie die Standardausgabe umleiten.
  • Mit &> können Sie sowohl die Standardfehlermeldung als auch die Standardausgabe umleiten.

Verwenden Sie /dev/null, um unnötige Ausgaben zu löschen

Da es zwei Arten von Ausgabe gibt: Standardausgabe und Standardfehlerausgabe, besteht die erste Verwendung von /dev/null darin, eine Art von Ausgabe herauszufiltern. Die obige Verwendung lässt sich anhand des folgenden praktischen Beispiels leichter verstehen.

Wenn Sie Dateien im Zusammenhang mit den Energieeinstellungen finden möchten, indem Sie im Ordner /sys nach Dateien mit der Zeichenfolge power im Dateinamen suchen, können Sie den Befehl wie folgt schreiben:

$ grep -r Leistung /sys/

Da sich im Ordner /sys viele Dateien befinden, auf die Nicht-Root-Benutzer nicht zugreifen können, führt dies zu vielen Permission denied , die auf dem Bildschirm ausgegeben werden.

Diese Fehlermeldungen können den Bildschirm überladen und wichtige Informationen verwischen. Da Fehlermeldungen Permission denied Teil der Standardfehlerausgabe sind, können Sie sie an /dev/null umleiten.

$ grep -r power /sys/ 2>/dev/null

Auf diese Weise sind die angezeigten Informationen viel klarer und klarer.

Manchmal möchten wir nicht den Inhalt der Standardausgabe, sondern stattdessen den Inhalt des Standardfehlers sehen. In diesem Fall können wir die Standardausgabe nach /dev/null umleiten.

$ ping baidu.com 1>/dev/null

Der obige Screenshot zeigt, dass der Ping-Befehl ohne Umleitung der Ausgabe seine normale Ausgabe anzeigt, wenn die Pakete den Zielhost erreichen können. Beim ersten Befehl wird bei bestehender Netzwerkverbindung nichts auf dem Bildschirm angezeigt. Sobald die Verbindung zum Zielcomputer getrennt wird, wird auf dem Bildschirm jedoch nur die Fehlermeldung angezeigt.
Natürlich können Sie die Standardausgabe und die Standardfehlerausgabe auch in zwei unterschiedliche Dateien umleiten.

$ ping baidu.com 1>/dev/null 2>error.log

In diesem Beispiel wird die Standardausgabe nicht angezeigt und Fehlermeldungen werden in einer Datei namens error.log gespeichert.

Leiten Sie die gesamte Ausgabe nach /dev/null um.

Manchmal möchten wir möglicherweise keine Ausgabe sehen. Daher gibt es hierfür zwei Möglichkeiten.

$ grep -r power /sys/ >/dev/null 2>&1

Die Zeichenfolge >/dev/null bedeutet,將標準輸出重定向到/dev/null 中, und der zweite Teil, 2>&1 , bedeutet, dass die Standardfehlerausgabe an die Standardausgabedatei umgeleitet wird. Hier müssen Sie die Standardausgabedatei &1 schreiben, anstatt einfach 1 zu schreiben. Wenn Sie 2>1 schreiben, wird die Standardausgabe nur in eine Datei mit dem Namen 1 umgeleitet.

Ein wichtiger Punkt, den Sie hier beachten sollten, ist, dass auch die Reihenfolge sehr wichtig ist. Wenn Sie die Umleitungsparameter so austauschen, dass sie wie folgt aussehen:

$ grep -r power /sys/ 2>&1 >/dev/null

Es funktioniert einfach nicht so, wie Sie es erwartet haben. Das liegt daran, dass, sobald 2>&1 zuerst vom Interpreter interpretiert wird, die Standardfehlerausgabe in die standardmäßige Standardausgabedatei stdout umgeleitet und auf dem Bildschirm angezeigt wird. Wenn die Standardausgabe anschließend nach /dev/null umgeleitet wird, werden die Informationen der Standardausgabe gelöscht. Das Endergebnis ist, dass Fehlermeldungen auf dem Bildschirm angezeigt werden. Falls Sie die richtige Reihenfolge vergessen, gibt es eine einfachere Möglichkeit:

$ grep -r power /sys/ &>/dev/null

In diesem Beispiel ist &>/dev/null gleichbedeutend mit重定向標準輸出與標準錯誤輸出到/dev/null .

Weitere praktische Beispiele für die Umleitung der Ausgabe nach /dev/null

Wenn Sie wissen möchten, wie schnell Ihre Festplatte sequentielle Daten lesen kann, können Sie dies mit dem Befehl dd testen. Der Befehl dd gibt die Ausgabe jedoch entweder in die Standardausgabedatei aus oder gibt die Ausgabe in eine Datei an. Um den Einfluss geschriebener Daten auf das Ergebnis auszuschließen, verwenden wir den Parameter of=/dev/null , sodass die dd Ausgabe in diese virtuelle Datei statt auf die reale Festplatte geschrieben werden kann. Sie müssen hierfür nicht einmal die Shell-Umleitung verwenden.

Beim folgenden Befehl gibt der Parameter if= den Dateinamen für die Eingabe an; der Parameter of= gibt den Dateinamen für die Ausgabe an, das heißt, er gibt an, wohin die Ausgabe geschrieben wird.

Der folgende Test ist nicht sehr genau, reicht jedoch aus, um das Problem zu veranschaulichen.

$ dd if=debian-disk.qcow2 von=/dev/null status=progress bs=1M iflag=direct

Das oben genannte ist ein praktisches Szenario. Hier ist ein anderes Szenario.

Irgendwann möchten Sie vielleicht wissen, wie schnell Sie etwas von einem bestimmten Server herunterladen können. Da Sie jedoch nichts Unnötiges auf die Festplatte schreiben möchten, können Sie den Inhalt zu diesem Zeitpunkt in /dev/null schreiben.

$ wget -O /dev/null http://ftp.halifax.rwth-aachen.de/ubuntu-releases/18.04/ubuntu-18.04.2-desktop-amd64.iso

abschließend

Dieser Artikel stellt mehrere praktische Verwendungsmöglichkeiten der Datei /dev/null vor. Ich hoffe, er wird Ihnen bei Ihrer Arbeit hilfreich sein. Kennen Sie weitere interessante Einsatzmöglichkeiten für diese spezielle Gerätefeile? Hinterlassen Sie mir eine Nachricht!

Damit ist dieser Artikel über die verschiedenen praktischen Verwendungsmöglichkeiten virtueller Gerätedateien in Linux-Systemen abgeschlossen. Weitere relevante Inhalte zur Verwendung virtueller Gerätedateien unter Linux finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • So erkennen Sie die Dateisystemintegrität basierend auf AIDE in Linux
  • Detaillierte Erläuterung der Befehle zum Lesen und Schreiben von Remotedateien mit Vim im Linux-System
  • Lösung für die Eingabeaufforderung „Keine solche Datei oder kein solches Verzeichnis“ beim Ausführen ausführbarer Dateien unter Linux
  • So kopieren Sie schnell große Dateien unter Linux
  • Detaillierte Erläuterung des Problems, dass der Speicherplatz nach dem Löschen der Linux-Datei nicht freigegeben wird
  • Beispielanalyse von Linux-Dateiverwaltungsbefehlen [Anzeige, Ansicht, Statistiken usw.]
  • Implementierung der Deduplizierung von Dateiinhalten sowie von Schnittmengen und Unterschieden in Linux

<<:  Wie lang ist eine Funktion in js?

>>:  MySQL-Kodierung utf8 und utf8mb4 utf8mb4_unicode_ci und utf8mb4_general_ci

Artikel empfehlen

So verwenden Sie tcpdump zum Erfassen von Paketen im Linux-System

Lassen Sie mich zunächst einen Blick auf den Beis...

Erfahren Sie mehr über die Verwendung regulärer Ausdrücke in JavaScript

Inhaltsverzeichnis 1. Was ist ein regulärer Ausdr...

So verwenden Sie Umgebungsvariablen in der Nginx-Konfigurationsdatei

Vorwort Nginx ist ein auf Leistung ausgelegter HT...

Tutorial zur Installation von Odoo14 aus dem Quellcode unter Ubuntu 18.04

Inhaltsverzeichnis Hintergrund dieser Serie Überb...

Adaptive HTML-Tabellenmethode

<body style="scroll:no"> <Tabe...

Wie oft werden mehrere setStates in React aufgerufen?

Inhaltsverzeichnis 1. Zwei setState, wie oft soll...

SQL-Implementierung LeetCode (176. Zweithöchstes Gehalt)

[LeetCode] 176. Zweithöchstes Gehalt Schreiben Si...

Vue verwendet dynamische Komponenten, um einen TAB-Umschalteffekt zu erzielen

Inhaltsverzeichnis Problembeschreibung Was ist di...

So verwenden Sie den Linux-Befehl „locate“

01. Befehlsübersicht Der Befehl „locate“ ist eige...

So installieren Sie Graphviz und beginnen mit dem Tutorial unter Windows

Herunterladen und installierenUmgebungsvariablen ...

JavaScript zum Erzielen eines einfachen Lupeneffekts

In einem großen Kästchen befindet sich ein Bild. ...

Verwenden Sie Docker, um den Kong-Clusterbetrieb aufzubauen

Es ist sehr einfach, einen Kong-Cluster unter dem...

HTML-Grundstruktur_Powernode Java Academy

Wenn wir lernen, Webseiten zu entwickeln, ist das...