Fast alle Dateien unter /dev
sind Gerätedateien . Während das Lesen und Schreiben in einer regulären Datei Daten auf einer Festplatte oder einem anderen Dateisystem speichert, kommuniziert der Zugriff auf eine Gerätedatei mit einem Treiber im Kernel, der im Allgemeinen wiederum mit einer Hardware (einem Hardwaregerät, daher der Name) kommuniziert.
Es gibt zwei Arten von Gerätedateien: Blockgeräte (angezeigt b
als erstes Zeichen in der Ausgabe von ls -l
) und Zeichengeräte (angezeigt durch c
). Die Unterscheidung zwischen Block- und Zeichengeräten ist nicht ganz universell. Blockgeräte sind Dinge wie Festplatten, die sich wie große Dateien mit fester Größe verhalten: Wenn Sie ein Byte mit einem bestimmten Versatz schreiben und später mit diesem Versatz vom Gerät lesen, erhalten Sie dieses Byte zurück. Zeichengeräte sind fast alles andere, bei denen das Schreiben eines Bytes eine unmittelbare Auswirkung hat (z. B. wenn es auf einer seriellen Leitung ausgegeben wird) und das Lesen eines Bytes eine unmittelbare Auswirkung hat (z. B. wenn es von der seriellen Schnittstelle gelesen wird).
Die Bedeutung einer Gerätedatei wird durch ihre Nummer bestimmt, nicht durch ihren Namen (der Name ist für Anwendungen wichtig, nicht aber für den Kernel). Die Nummer besteht eigentlich aus zwei Nummern: Die Hauptnummer gibt an, welcher Treiber für dieses Gerät verantwortlich ist, und die untergeordnete Nummer ermöglicht es einem Fahrer, mehrere Geräte zu steuern¹. Diese Zahlen erscheinen in der ls -l
Liste, wo Sie normalerweise die Dateigröße finden würden. ZB brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda
→ dieses Gerät ist Dur 8, Moll 0.
Einige Gerätedateien unter /dev
entsprechen nicht den Hardwaregeräten. Eines, das auf jedem Unix-System existiert, ist /dev/null
: Das Schreiben darauf hat keine Auswirkung, und das Lesen darauf gibt keine Daten zurück. In Shell-Skripten ist es oft praktisch, wenn Sie die Ausgabe eines Befehls ( >/dev/null
) ignorieren oder einen Befehl ohne Eingabe ( </dev/null
) ausführen möchten . Andere gebräuchliche Beispiele sind /dev/zero
(die null Bytes und unendlich zurückgeben ) /dev/urandom
(die zufällige Bytes und unendlich zurückgeben ).
Einige Gerätedateien haben eine Bedeutung, die vom Prozess abhängt, der darauf zugreift. Zum Beispiel /dev/stdin
bezeichnet die Standardeingabe des aktuellen Prozesses; Das Öffnen von hat ungefähr die gleiche Wirkung wie das Öffnen der Originaldatei, die als Standardeingabe für den Prozess geöffnet wurde. /dev/tty
Bezeichnet in ähnlicher Weise das Terminal, an das der Prozess angeschlossen ist. Unter Linux werden heutzutage /dev/stdin
und Freunde nicht als Zeichengeräte implementiert, sondern als symbolische Links zu einem allgemeineren Mechanismus, mit dem auf jeden Dateideskriptor verwiesen werden kann (im Gegensatz zu nur 0, 1 und 2 bei der herkömmlichen Methode). Zum Beispiel /dev/stdin
ist ein symbolischer Link zu /proc/self/fd/0
. Siehe In welcher Beziehung steht / dev / fd zu / proc / self / fd /? .
Unter finden Sie eine Reihe symbolischer Links /dev
. Dies kann aus historischen Gründen auftreten: Eine Gerätedatei wurde von einem Namen in einen anderen verschoben, einige Anwendungen verwenden jedoch weiterhin den alten Namen. Zum Beispiel /dev/scd0
ist eine symbolische Verknüpfung zu /dev/sr0
unter Linux; beide bezeichnen das erste CD-Gerät. Ein weiterer Grund für symbolische Verknüpfungen ist die Organisation: Unter Linux finden Sie Ihre Festplatten und Partitionen an mehreren Stellen: /dev/sda
und /dev/sda1
und Freunde (jede Festplatte mit einem beliebigen Buchstaben und Partitionen entsprechend dem Partitionslayout), /dev/disk/by-id/*
(Festplatten mit einem eindeutige Seriennummer) /dev/disk/by-label/*
(Partitionen mit einem Dateisystem, gekennzeichnet durch ein vom Menschen gewähltes Etikett); und mehr. Symbolische Links werden auch verwendet, wenn ein generischer Gerätename einer von mehreren sein kann. zum Beispiel/dev/dvd
Dies kann eine symbolische Verknüpfung zu /dev/sr0
oder eine Verknüpfung zu sein, /dev/sr1
wenn Sie zwei CD-Leser haben und der zweite der Standard-DVD-Leser sein soll.
Schließlich gibt es noch ein paar andere Dateien, die Sie /dev
aus traditionellen Gründen möglicherweise unter finden . Sie werden nicht auf jedem System dasselbe finden. Bei den meisten Unices /dev/log
ist dies ein Socket , über den Programme Protokollnachrichten ausgeben. /dev/MAKEDEV
ist ein Skript, das Einträge in erstellt /dev
. Auf modernen Linux-Systemen werden Einträge in /dev/
automatisch durch udev erstellt und sind obsolet MAKEDEV
.
¹ Unter Linux ist dies nicht mehr der Fall, aber dieses Detail ist nur für Gerätetreiber relevant.