Eines der bestimmenden Merkmale von Linux und anderen UNIX-ähnlichen Betriebssystemen ist, dass „alles eine Datei ist“. Dies ist eine zu starke Vereinfachung, aber zu verstehen, was es bedeutet, wird Ihnen helfen zu verstehen, wie Linux funktioniert.
Viele Dinge unter Linux erscheinen in Ihrem Dateisystem, aber es sind keine Dateien. Es sind spezielle Dateien, die Hardwaregeräte, Systeminformationen und andere Dinge darstellen – einschließlich eines Zufallszahlengenerators.
Diese speziellen Dateien können sich in Pseudo- oder virtuellen Dateisystemen befinden, wie /dev, das spezielle Dateien enthält, die Geräte darstellen, und /proc, das spezielle Dateien enthält, die System- und Prozessinformationen darstellen.
/proc
Angenommen, Sie möchten Informationen zu Ihrer CPU finden. Das Verzeichnis /proc enthält eine spezielle Datei – /proc/cpuinfo – die diese Informationen enthält.

Sie benötigen keinen speziellen Befehl, der Ihnen Ihre CPU-Informationen mitteilt – Sie können den Inhalt dieser Datei einfach mit jedem Standardbefehl lesen, der mit Klartextdateien funktioniert. Zum Beispiel könnten Sie den Befehl verwenden Katze /proc/cpuinfo um den Inhalt dieser Datei an das Terminal zu drucken – Ihre CPU-Informationen an das Terminal zu drucken. Sie können /proc/cpuinfo sogar in einem Texteditor öffnen, um den Inhalt anzuzeigen.
Denken Sie daran, dass /proc/cpuinfo eigentlich keine Textdatei ist, die diese Informationen enthält – der Linux-Kernel und das proc-Dateisystem stellen uns diese Informationen als Datei zur Verfügung. Dadurch können wir vertraute Tools verwenden, um die Informationen anzuzeigen und mit ihnen zu arbeiten.

Das Verzeichnis /proc enthält auch andere ähnliche Dateien, zum Beispiel:
- /proc/uptime – Zeigt die Betriebszeit Ihres Linux-Kernels an – mit anderen Worten, wie lange Ihr System eingeschaltet war, ohne heruntergefahren zu werden.
- /proc/version – Zeigt die Version Ihres Linux-Kernels an.
/dev
Im Verzeichnis /dev finden Sie Dateien, die Geräte repräsentieren – sowie Dateien, die andere spezielle Dinge repräsentieren. /dev/cdrom ist beispielsweise Ihr CD-ROM-Laufwerk. /dev/sda steht für Ihre erste Festplatte, während /dev/sda1 die erste Partition auf Ihrer ersten Festplatte darstellt.
Möchten Sie Ihre CD-ROM mounten? Führen Sie den Befehl mount aus und geben Sie /dev/cdrom als das Gerät an, das Sie mounten möchten. Möchten Sie Ihre erste Festplatte partitionieren? Führen Sie ein Dienstprogramm zur Festplattenpartitionierung aus und geben Sie /dev/sda als die zu bearbeitende Festplatte an. Möchten Sie die erste Partition auf Ihrer ersten Festplatte formatieren? Führen Sie einen Formatierungsbefehl aus und weisen Sie ihn an, /dev/sda1 zu formatieren.

Wie Sie sehen, hat die Bereitstellung dieser Geräte als Teil des Dateisystems seine Vorteile. Das Dateisystem stellt einen konsistenten „Namensraum“ zur Verfügung, über den alle Anwendungen die Geräte adressieren und darauf zugreifen können.
/dev/null, /dev/random und /dev/zero
Das Dateisystem /dev enthält nicht nur Dateien, die physische Geräte darstellen. Hier sind drei der bemerkenswertesten Spezialgeräte, die es enthält:
- /dev/null – Verwirft alle darauf geschriebenen Daten – betrachte es als Mülleimer oder schwarzes Loch. Wenn Sie jemals einen Kommentar sehen, in dem Sie aufgefordert werden, Beschwerden an /dev/null zu senden – das ist eine geekige Art zu sagen, „wirf sie in den Papierkorb“.
- /dev/random – Erzeugt Zufälligkeit unter Verwendung von Umgebungsrauschen. Es ist ein Zufallszahlengenerator, den Sie anzapfen können.
- /dev/zero – Erzeugt Nullen – einen konstanten Strom von Nullen.
Wenn Sie sich diese drei als Dateien vorstellen, werden Sie keine Verwendung für sie sehen. Betrachten Sie sie stattdessen als Werkzeuge.
Beispielsweise erzeugen Linux-Befehle standardmäßig Fehlermeldungen und andere Ausgaben, die sie auf der Standardausgabe, normalerweise dem Terminal, ausgeben. Wenn Sie einen Befehl ausführen möchten und sich nicht um seine Ausgabe kümmern, können Sie diese Ausgabe nach /dev/null umleiten. Wenn Sie die Ausgabe eines Befehls nach /dev/null umleiten, wird dieser sofort verworfen. Anstatt dass jeder Befehl seinen eigenen „stillen Modus“ implementiert, können Sie diese Methode mit jedem Befehl verwenden.
Befehl > /dev/null

Wenn Sie eine Zufallsquelle haben möchten – zum Beispiel um einen Verschlüsselungsschlüssel zu generieren, müssten Sie keinen eigenen Zufallszahlengenerator schreiben – können Sie /dev/random verwenden.
Um den Inhalt einer Festplatte durch Schreiben von Nullen zu löschen, benötigen Sie kein spezielles Dienstprogramm zum Nullsetzen eines Laufwerks – Sie können Standard-Dienstprogramme und /dev/zero verwenden. Zum Beispiel die dd Befehl liest von einem Speicherort und schreibt an einen anderen Speicherort. Der folgende Befehl würde Nullen aus /dev/zero lesen und sie direkt auf die erste Festplattenpartition Ihres Systems schreiben, wodurch der Inhalt vollständig gelöscht wird.
(Warnung: Dieser Befehl löscht alle Daten auf Ihrer ersten Partition, wenn Sie ihn ausführen. Führen Sie diesen Befehl nur aus, wenn Sie Daten zerstören möchten.)
dd if=/dev/null von=/dev/sda1
Hier verwenden wir dd mit speziellen Dateien (/dev/zero und /dev/sda1), aber wir könnten auch dd verwenden, um aus tatsächlichen Dateien zu lesen und in sie zu schreiben. Derselbe Befehl funktioniert sowohl für die direkte Manipulation von Geräten als auch für die Arbeit mit Dateien.
Klärung
In der Praxis ist es zutreffender zu sagen, dass „alles ein Strom von Bytes“ ist als „alles eine Datei“. /dev/random ist keine Datei, aber sicherlich ein Strom von Bytes. Und obwohl diese Dinge technisch gesehen keine Dateien sind, sind sie im Dateisystem zugänglich – das Dateisystem ist ein universeller „Namensraum“, in dem alles zugänglich ist. Möchten Sie auf einen Zufallszahlengenerator zugreifen oder direkt von einem Gerät lesen? Sie finden beides im Dateisystem; keine andere Form der Adressierung erforderlich.
Natürlich sind manche Dinge keine eigentlichen Dateien – Prozesse, die auf Ihrem System laufen, sind kein Teil des Dateisystems. „Alles ist eine Datei“ ist ungenau, aber viele Dinge verhalten sich wie Dateien.