next up previous contents index
Next: Der Arbeitsspeicher Up: Reise durch's Dateisystem Previous: Rootpartition und Wurzelverzeichnis

Das Verzeichnis /dev

    Eines der Charakteristika von Linux ist die vollständige Abschirmung der Hardware- von der Benutzerebene. Wann immer ein Anwenderprogramm Daten an ein angeschlossenes Gerät oder eine Hardwarekomponente (Device) schicken oder von dort lesen will, muß es eine Spezialdatei öffnen und die Daten in diese Datei schreiben oder aus dieser Datei lesen.

Die Systemverwalterin hat die gleichen Möglichkeiten, Zugriffsrechte auf die Gerätedateien zu erteilen oder zu verweigern, wie bei allen anderen Dateien auch. Indem nur bestimmten Benutzern, beispielsweise Dämonprozessen, der Zugriff auf kritische Gerätedateien erlaubt wird, lassen sich bereits viele Sicherheitsrisiken und Blockadesituationen verhindern. Außerdem kann der Gerätetreiber im Kernel konkurrierende Zugriffe mehrerer Programme auf ein Gerät verhindern.

Ein weiterer entscheidender Vorteil dieses auf den ersten Blick vielleicht etwas restriktiv anmutenden Mechanismus ist die Fähigkeit des Kernels, Prozesse bis zum Eintreten eines Hardwareereignisses in Schlaf zu versetzen. Auf diese Weise kann die Rechenzeit, die sonst in einer Warteschleife für das sogenannte polling  verschwendet würde, sinnvoll für andere Prozesse verwendet werden.

In dem Verzeichnis /dev sind die ''Bilder'' der Hardwarekomponenten und Geräte des Systems abgelegt. Solche Bilder sind keine Dateien im herkömmlichen Sinne. Sie belegen keine Datenblöcke auf der Festplatte, sondern nur I-Nodes. Diese Spezialdateien stellen eine Verbindung zwischen den Anwenderprogrammen und den Gerätetreibern im Kernel her. In die meisten dieser Dateien kann geschrieben oder aus ihnen gelesen werden wie bei normalen Dateien. Der Datenstrom wird vom Kernel übernommen und an das entsprechende Gerät weitergeleitet.

       Die Verbindung zum Kernel wird über Slots oder Kanäle hergestellt, die numeriert sind und hinter denen sich die Treiber für die Geräte verbergen. Die Nummer des Gerätetreibers wird als Hauptgerätenummer (Major Device Number) bezeichnet. Ein Treiber kann mehrere Geräte des gleichen Typs verwalten. Um die einzelnen Geräte zu unterscheiden, wird dem Treiber eine zweite Zahl, die Untergerätenummer (Minor Device Number), übergeben. Diese beiden Zahlen charakterisieren jede Datei im /dev Verzeichnis. Zusätzlich werden noch zwei Arten von Geräten unterschieden: Die blockorientierten Geräte mit direktem Zugriff, wie z. B. Disketten oder Festplatten, und die zeichenorientierten sequentiellen Geräte, wie Drucker, Terminal oder Maus. Damit hat jede Gerätedatei drei ''Koordinaten'', mit der sie vom Kernel, unabhängig von ihrem Namen, eindeutig identifiziert werden kann.

Bei einem langen Listing des Verzeichnisses mit ` ls -l' werden die Haupt- und Untergerätenummern anstelle der Dateigröße angezeigt. Ob ein Gerät als Zeichen- oder Blockdevice angesprochen wird, kann man am ersten Buchstaben der Zugriffsrechte sehen. Da steht ` b' für block- und ` c' für zeichenorientierte Gerätedatei.

Die Zahl der vom Linux-Kernel unterstützten Geräte wächst mit der Beliebtheit von Linux ständig an. Die offizielle Liste der registrierten Gerätenummern ist in der Kerneldatei <linux/major.h> enthalten.

Bei der Installation einer neuen Linux-Distribution wird durch das Shellscript MAKEDEV  automatisch ein Satz Gerätedateien erzeugt. In dieser Datei sind die Gerätenummern aller fest im Kernel enthaltenen Treiber gespeichert. Mit MAKEDEV lassen sich auch nachträglich Gerätedateien erzeugen. Zusätzliche Gerätedateien mit statischen Gerätenummern können von der Superuserin mit dem mknod-Kommando angelegt werden.

Weil es bei der Zuordnung neuer Gerätenummern für zusätzliche Treiber immer wieder zu Konflikten gekommen ist, wird zur Zeit an einer Methode zur dynamischen Belegung der Gerätenummern gearbeitet. Die Hauptgerätenummern der im laufenden Kernel arbeitenden Treiber können aus der Datei /proc/devices gelesen werden. Indem das MAKEDEV Script diese Daten auswertet, kann durch '' MAKEDEV updateßichergestellt werden, daß die entsprechenden Gerätedateien vorhanden sind.

Die Namensgebung für die Gerätedateien ist Konvention. Jede Datei kann beliebig umbenannt oder durch Links mit anderen Namen verbunden werden, die Benutzung des Gerätes ändert sich dadurch nicht. Der File-System-Standard sieht aber vor, daß bei der Installation einer Linux-Distribution keine symbolischen Links automatisch erzeugt werden sollen.

Bei der Beschreibung der Gerätedateien werden gleichartige Geräte durch Wildcards bezeichnet, wie sie in der Shell verwendet werden. Ein Fragezeichen steht hier für ein einziges Zeichen, ein Asterisk (Stern) steht für mehrere Zeichen. Sie können sich die vollständige Liste der angesprochenen Gerätedateien mit dem ls-Kommando anzeigen lassen, indem Sie genau den in der Beschreibung angegebenen Ausdruck als Argument verwenden. Beispielsweise die Bezeichnungen /dev/fd? und /dev/hd* erweitern sich so:

$ ls /dev/fd?
/dev/fd0  /dev/fd1
$ ls /dev/hd*
/dev/hda   /dev/hda3  /dev/hda6  /dev/hdb   /dev/hdb3  /dev/hdb6
/dev/hda1  /dev/hda4  /dev/hda7  /dev/hdb1  /dev/hdb4  /dev/hdb7
/dev/hda2  /dev/hda5  /dev/hda8  /dev/hdb2  /dev/hdb5  /dev/hdb8
$ _

Für den Anwender sind speziell die Dateien /dev/fd?, /dev/lp?, /dev/null, /dev/zero, /dev/ttyS? und /dev/cua? von Interesse. Die anderen Dateien werden hauptsächlich von der Systemverwalterin benötigt.





next up previous contents index
Next: Der Arbeitsspeicher Up: Reise durch's Dateisystem Previous: Rootpartition und Wurzelverzeichnis



Linux Anwenderhandbuch -- Copyright 1993, 1994, 1995 S. Hetze, D. Hohndel, O. Kirch, M. Müller