Inhaltsverzeichnis
- Reguläre Dateien
- Symbolische Links
- Verzeichnisse / Ordner
- Blockorientierte Geräte
- Zeichenorientierte Geräte
- Feststehende Programmverbindungen -(named-pipes-oder-FIFOs)
- Netzwerk Kommunikationsendpunkte
Unter Unix werden weitaus mehr Dinge in Dateiform verwaltet, als z.B. unter DOS/Windows. Neben den regulären Dateien (regular files) gibt es noch verschiedene weitere Konstrukte, die genauso verwaltet werden. Grundsätzlich unterscheidet Unix die folgenden Dateiarten
- Reguläre Dateien (regular file)
- Verzeichnisse (directory)
- Symbolische Links (symbolic link)
- Blockorientierte Geräte (block device)
- Zeichenorientierte Geräte (char device)
- Feststehende Programmverbindungen (named pipe)
- Netzwerk-Kommunikationsendpunkte (socket)
Das erste Zeichen des Dateizugriffsstring (darstellbar mit ls -l) zeigt die Dateiart an. ein Bindestrich steht für eine normale Datei, ein d für ein Verzeichnis, ein l für einen symbolischen Link, ein b bzw. c für ein block- bzw. zeichenorientiertes Gerät, ein p für eine named pipe und ein s für einen Socket. Im Folgenden werden alle diese Dateiarten kurz dargestellt.
Reguläre Dateien
Reguläre Dateien sind alle „normalen Dateien“, also das, was wir auch unter DOS als Dateien kennen. Sie haben einen Inhalt, der als Bitfolge auf einem Datenträger gespeichert ist, Die wesentlichen Eigenschaften sind schon im letzten Kapitel besprochen worden. Der einzige Punkt, der noch nicht dargestellt wurde ist die Frage, warum jede Datei die Angabe besitzt, wieviele Dateinamen sie besitzt.
Unter Unix existieren für Dateien sogenannte Links, einer davon, der symbolische Link, wird gleich im Anschluß besprochen. Unter diesen Links ist etwas ähnliches zu verstehen, wie unter den Verknüpfungen von Windows 95/98. Die Tatsache, dass Dateien mehrere Namen besitzen können wurde unter Unix schon sehr früh eingeführt, es handelt sich hierbei eigentlich um mehrere Dateinamen im Inhaltsverzeichnis einer Platte, die auf die selben Blöcke zeigen. Unter Unix spricht man hier von sogenannten Hard-Links.
Darunter ist tatsächlich nichts anderes zu verstehen, als ein zweiter Name für ein und dieselbe Datei. Wenn eine Datei zwei Namen hat, so kann nicht zwischen Orginal und Link unterschieden werden. Es ist möglich, eine der beiden Dateien zu löschen und trotzdem ist die andere noch vorhanden. Physikalisch handelt s sich aber immer um die selbe Datei, d.h., sie nimmt nur einmal den Speicherplatz auf der Platte in Anspruch.
Diese Tatsache erklärt aber auch die Einschränkung, der ein Hardlink unterworfen ist. Der Link muß sich auf der selben Partition befinden, auf der sich die Orginaldatei befindet. Das liegt in der Natur des Links, weil er ja nur ein weiterer Name für die Datei ist, der im Inhaltsverzeichnis der Platte bzw. der Partition gespeichert ist.
Hardlinks werden mit dem Befehl ln angelegt.
Symbolische Links
Im Gegensatz zu Hardlinks sind symbolische Links wesentlich flexibler, aber auch fehleranfälliger. Hier handelt es sich tatsächlich um Verweise auf eine bestehende Datei, d.h., der symbolische Link ist in Wahrheit eine Datei, die nur den Dateinamen einer anderen Datei enthält. Damit das System diese Datei nicht als Textdatei mißinterpretiert wird sie als SymLink gekennzeichnet, als Dateityp steht ein l statt eines Bindestrichs.
Durch diese Tatsache kann man beim SymLink immer zwischen Orginal und Link unterscheiden, im Gegensatz zum Hardlink, bei dem das nicht möglich ist. Symbolische Links erlauben es auch, Verweise über die Partitionsgrenzen hinweg zu erstellen. Allerdings ist nicht sichergestellt, dass der Link auch auf etwas zeigt, was existiert. Wird z.B. ein SymLink auf eine Datei angelegt und anschließend die Datei gelöscht, so zeigt der Link ins Leere.
Als weiterer Vorteil von SymLinks ist noch die Tatsache zu nennen, dass sie auch auf Verzeichnisse zeigen können. Damit ist es also etwa möglich, ein Verzeichnis, das nicht mehr auf die Partition passt, in der es erwartet wird, in einer anderen Partition abzuspeichern und in der ursprünglichen Partition einfach einen SymLink auf die neue Position zu setzen.
Symbolische Links werden wie Hardlinks mit dem Befehl ln angelegt. Zur Unterscheidung wird dort einfach der Parameter -s (für symbolischen Link) benutzt.
Verzeichnisse
Verzeichnisse sind unter Unix auch nur Dateien, die allerdings eben den Typ d statt Bindestrich haben um sie von regulären Dateien zu unterscheiden. Die Befehle zum Anlegen, Löschen und Wechseln der Verzeichnisse entsprechen im Großen und Ganzen denen von DOS, auch wenn unter dem herkömmlichen Unixen meist die vollen Befehle (mkdir statt md) verlangt werden. Die Befehle sind
- mkdir – Anlegen eines Verzeichnisses
- rmdir – Löschen eines Verzeichnisses
- cd – Wechseln in ein Verzeichnis
- pwd – Anzeige des aktuellen Verzeichnisnamens
Blockorientierte Geräte
Unix betrachtet auch jedes Stück Hardware als Datei. Dabei wird zwischen block- und zeichenorientierten Geräten unterschieden. Als blockorientiertes Gerät gilt jedes Gerät, das nicht einzelne Zeichen verarbeitet, sondern ganze Blocks. Dabei handelt es sich z.B. typischerweise um Festplatten, Disketten und andere Laufwerke. Diese Laufwerke werden dann als Dateien verwaltet, für den Anwender bleibt der Unterschied zwischen Gerät und Datei nahezu transparent.
Die Gerätedateien (engl. special files), sowohl die block- wie auch die zeichenorientierten befinden sich im Verzeichnis /dev. Sie belegen physikalisch keinen Platz auf der Festplatte, sind also selbst nicht die Gerätetreiber, wie oft fälschlicherweise gedacht wird. Diese Dateien haben eigentlich nur zwei Nummern, die die Adresse des Gerätetreibers im Kernel symbolisieren. Die erste Nummer, auch major number genannt zeigt, um welchen Gerätetreiber es sich handelt, die zweite (minor number) beschreibt, das wievielte Gerät es ist, das diesen Treiber benutzt.
Als Beispiel folgt hier die Ausgabe des ls -l Befehls auf einige Gerätedateien des Blocktyps:
Major Minor V V brw-rw---- 1 root disk 1, 0 Apr 5 01:12 ram0 brw-rw---- 1 root disk 1, 1 Apr 5 01:12 ram1 brw-rw---- 1 root disk 1, 2 Apr 5 01:12 ram2 brw-rw---- 1 root disk 1, 3 Apr 5 01:12 ram3 ... brw-rw-rw- 1 root disk 2, 0 Apr 5 01:12 fd0 brw-rw-rw- 1 root disk 2, 1 Apr 5 01:12 fd1 ... brw-rw---- 1 root disk 3, 0 Apr 5 01:12 hda brw-rw---- 1 root disk 3, 1 Apr 5 01:12 hda1 brw-rw---- 1 root disk 3, 2 Apr 5 01:12 hda2 brw-rw---- 1 root disk 3, 3 Apr 5 01:12 hda3 brw-rw---- 1 root disk 3, 4 Apr 5 01:12 hda4 brw-rw---- 1 root disk 3, 5 Apr 5 01:12 hda5 ... brw-rw---- 1 root disk 3, 64 Apr 5 01:12 hdb brw-rw---- 1 root disk 3, 65 Apr 5 01:12 hdb1 brw-rw---- 1 root disk 3, 66 Apr 5 01:12 hdb2 brw-rw---- 1 root disk 3, 67 Apr 5 01:12 hdb3 ...
Typische blockorientierte Geräte sind hier also der Arbeitsspeicher (ram1-4 Major-Number 1), die Diskettenlaufwerke (fd0, fd1 Major Number 2) und die Festplatten. (Major Number 3 für IDE-Platten) Bei den Festplatten wird unterschieden zwischen den ganzen Platten (hda, hdb, hdc, hdd) und den darauf befindlichen Partitionen (hda1, hda2, hdb1, hdb2,…)
Auf diese Gerätedateien kann zugegriffen werden, wie auf jede normale Datei, sie haben einen Zugriffsmodus (rwx…) wie normale Dateien und Eigentümer und Gruppenzugehörigkeit.
Damit ist es z.B. möglich den Diskcopy-Befehl mit dem Befehl cat wie folgt zu realisieren:
cat /dev/fd0 > Datei
cat Datei > /dev/fd0
Zunächst wird also alles aus der Datei /dev/fd0 (erstes Floppy-Laufwerk) in die Datei Datei kopiert, im zweiten Befehl wird – nachdem eine Leerdiskette eingelegt wurde – der Inhalt der Datei wieder auf die Diskette geschrieben. Es wird hier nicht dateiorientiert gearbeitet, sondern wie bei DOS-diskcopy clusterorientiert.
Zeichenorientierte Geräte
Grundsätzlich trifft alles, was wir für die blockorientierten Geräte oben gesagt haben auch auf die zeichenorientierten Geräte zu, nur dass es sich bei ihnen um Geräte handelt, die nicht blockweise angesteuert werden sondern durch einzelne Bytes. Typischerweise handelt es sich hier um serielle oder parallele Schnittstellen, auch und gerade die Terminalleitungen (auch die der virtuellen Terminals) aber auch etwa der Soundanschluß.
Auch hier wieder ein paar Beispiele:
ISDN Anschlüsse crw------- 1 root root 45, 0 Apr 5 01:13 isdn0 crw------- 1 root root 45, 1 Apr 5 01:13 isdn1 BIOS-ROM crw------- 1 root root 31, 0 Apr 5 01:13 rom0 crw------- 1 root root 31, 1 Apr 5 01:13 rom1 Terminalleitungen für die virtuellen Terminals crw-rw-rw- 1 root root 5, 0 Apr 5 01:12 tty crw--w--w- 1 root tty 4, 0 Apr 5 01:12 tty0 crw------- 1 root root 4, 1 Aug 8 11:39 tty1 Serielle Leitungen (COM1 und COM2) crw-rw---- 1 root uucp 4, 64 Apr 5 01:12 ttyS0 crw-rw---- 1 root uucp 4, 65 Apr 5 01:12 ttyS1
Sowohl die block- als auch die zeichenorientierten Gerätedateien werden mittels dem Befehl mknod angelegt. Die einzige Information, die man dazu braucht ist die der Major- und Minornummer und die Frage, ob es sich um ein block- oder zeichenorientiertes Gerät handelt.
Feststehende Programmverbindungen (named pipes oder FIFOs)
In seltenen Fällen kann es nötig sein, feststehende Verbindungsleitungen zwischen verschiedenen Programmen zu nutzen. Dazu können named pipes benutzt werden. Es handelt sich um einfache FIFO Buffer (First In First Out), in die geschrieben werden kann und aus denen gelesen werden kann. Damit können z.B. auch Prozesse, die auf verschiedenen Terminals laufen via Pipe verbunden werden.
Diese FIFOs werden angelegt, wenn sie gebraucht werden, auch sie werden mit dem Befehl mknod erstellt.
Netzwerk-Kommunikationsendpunkte
Die Technik der Sockets besteht aus dem Prinzip, dass auch Netzwerkverbindungen im Dateisystem sichtbar (und nutzbar) gemacht werden. Sockets werden nur von Netzwerkprogrammen angelegt und genutzt. Es sind Kommunikationsendpunkte, die auf beiden Systemen, die miteinander kommunizieren bestehen und dort als Ansprechpunkt benutzt werden. Es gibt keine Verwendung für Sockets direkt für User, genausowenig gibt es Möglichkeiten Sockets einfach durch einen bestimmten Befehl anzulegen.
Als Beispiel für einen Socket kann man die Datei /var/run/printer ansehen, auf Systemen, die den Druckerdaemon laufen haben existiert diese Datei als Socket.