Im Starter-Handbuch haben Sie die Besitz- und Zugriffsrechte von Dateien kennengelernt, aber das wirkliche Verständnis des UNIX® Dateisystem (und das gilt auch für das Linux Dateisystem) erfordert eine neue Beantwortung der Frage „Was ist eine Datei?“.
In diesem Fall bedeutet „alles“ wirklich alles. Eine Festplatte, eine Partition darauf, ein Parallelport, eine Internetverbindung, eine Ethernet-Karte: all das sind Dateien. Sogar Verzeichnisse sind Dateien. Linux kennt ausser den Standarddateien und Verzeichnissen noch eine ganze Menge anderer Dateitypen. Beachten Sie bitte, dass wir hier mit Dateityp nicht den Dateityp meinen, der durch den Inhalt einer Datei festgelegt wird. GNU/Linux und jedes andere UNIX®-System betrachtet eine Datei, egal ob es ein Bild, eine Programmdatei oder was auch immer ist, als Ansammlung von Bytes, deren Verwendung und Typ allein durch die entsprechende Anwendung bestimmt wird.
Sie werden sich erinnern: beim Resultat des Befehls ls -l bezeichnet das erste Zeichen vor den Zugriffsrechten den Dateityp. Sie kennen bereits zwei verschiedene Typen: normale Dateien (-) und Verzeichnisse (d). Beim Durchsuchen des Verzeichnisbaums und der Verzeichnisinhalte werden Sie noch weitere Dateitypen finden:
Zeichenmodus-Dateien: diese Dateien sind zeichen-orientiert. Es handelt sich entweder um spezielle Systemdateien (wie etwa /dev/null, die wir schon behandelt haben) oder periphere Anschlüsse (seriellle oder parallele Ports). Allen gemeinsam ist, dass ihr Inhalt (falls vorhanden) nicht gepuffert wird (d.h., er wird nicht im Arbeitsspeicher gehalten). Diese Dateien werden identifiziert durch den Buchstaben c.
Blockmodus-Dateien: diese Dateien sind Geräte und anders als bei den Zeichenmodus-Dateien wird ihr Inhalt im Speicher gepuffert. Übliche Geräte dieser Art sind: Festplatten, Partitionen auf Festplatten, Disketten- und CD-ROM-Laufwerke, usw. Dateien mit Bezeichnungen wie /dev/hda oder /dev/sda5 sind block-orientierte Dateien und werden in der Ausgabe von ls -l mit dem Buchstaben b gekennzeichnet.
Symbolische Links: diese Dateien findet man oft, sie werden gerade beim Start-Prozess eines Mandrakelinux-Systems häufig verwendet (siehe Kapitel Kapitel 11, Die Startdateien: sysv initialisieren). Wie der Name schon andeutet, ist der Zweck dieser Dateien die symbolische Verknüpfung von Dateien. D.h., ihr Inhalt ist nur der Verweis auf den Pfad einer anderen Datei. Das muss nicht unbedingt eine existierende Datei sein. Sie werden oft auch „Soft Links“ genannt und werden durch den Buchstaben l gekennzeichnet.
Named pipes: falls Sie sich wundern, ja, diese Dateien sind ähnlich den in den shell-Befehlen benutzten Pipes, nur mit dem Unterschied, dass diese hier gemeinten Dateien Namen besitzen. Sie sind jedoch recht selten und Sie werden bei Ihrer Reise durch den Verzeichnisbaum kaum eine davon entdecken. Falls doch, erkennen Sie sie an der Kennzeichnung p. Weitere Informationen finden Sie im Kapitel „Anonyme Pipes und Named Pipes“.
Sockets: dies ist der Dateityp aller Netzwerk-Verbindungen, von denen allerdings nur wenige einen Namen besitzen. Weiterhin gibt es mehrere Arten von Sockets und nur eine davon kann verknüpft werden. Aber das geht weit über die Aufgabe dieses Buches hinaus. Die Sockets werden durch den Buchstaben s gekennzeichnet.
Im Folgenden finden Sie ein Beispiel für jeden Dateityp:
$ ls -l /dev/null /dev/sda /etc/rc.d/rc3.d/S20random /proc/554/maps \ /tmp/ssh-franz/ssh-510-agent crw-rw-rw- 1 root root 1, 3 May 5 1998 /dev/null brw-rw---- 1 root disk 8, 0 May 5 1998 /dev/sda lrwxrwxrwx 1 root root 16 Dec 9 19:12 /etc/rc.d/rc3.d/ S20random -> ../init.d/random* pr--r--r-- 1 franz franz 0 Dec 10 20:23 /proc/554/maps| srwx------ 1 franz franz 0 Dec 10 20:08 /tmp/ssh-franz/ ssh-510-agent= $ |
Inodes sind, genauso wie der Grundsatz „Alles ist eine Datei“, ein fundamentaler Teil jeden UNIX®-Dateisystems. Das Wort „Inode“ ist die Kurzfassung von Information NODE.
Inodes werden auf der Festplatte in einer Inode-Tabelle gespeichert. Es gibt sie für alle Dateitypen, die in einem Dateisystem gespeichert werden, inklusive Verzeichnisse, Named Pipes, usw. Das bringt uns zu dem nächsten Merksatz: „Der Inode ist die Datei!“. UNIX® benutzt Inodes zur eindeutigen Identifikation einer Datei.
Ja, Sie haben richtig gelesen: unter UNIX® identifizieren Sie eine Datei nicht durch ihren Namen sondern durch die Inode-Nummer. [22] Der Grund dafür ist die Möglichkeit, dass eine einzelne Datei mehrere Namen oder auch garkeinen Namen haben kann. Ein Dateiname ist in UNIX® nur ein Eintrag in einem Verzeichnis-Inode. Dieser Eintrag wird Link genannt. Diese Links schauen wir uns jetzt genauer an.
[22] Wichtig: Inode-Nummern sind nur innerhalb eines Dateisystems eineindeutig, d.h., in einem anderen Dateisystem kann die gleiche Inode-Nummer vorhanden sein. Damit kommen wir zum Unterschied zwischen „on-disk“ Inodes und „in-memory“ Inodes. Während zwei Inodes auf einer Festplatte die gleiche Nummer besitzen können, solange sie in verschiedenen Dateisystemen existieren, haben Speicher-Inodes eine einzigartige Nummer innerhalb des gesamten Systems. Eine mögliche Lösung zur Erlangung einzigartiger Nummern ist, sie mit dem Bezeichner des Block-Gerätes (der Partition) zu verbinden.