Der folgende Text stammt aus dem »Debian GNU/Linux Guide« von John Goerzen und Ossama Othman. Ins Deutsche übersetzt von Michael »grisu« Bramer. Der Text steht unter der GNU General Public License.

Dateitypen

Der Linux-Kernel betrachtet fast alles als Datei. Er betrachtet auch Directories und Geräte als Dateien – es sind nur besondere Dateien.

Der erste Buchstabe von ls -l zeigt den Typ der Datei an. Für eine normale Datei ist das ein einfaches . Weitere Möglichkeiten sind unter anderem:

ZeichenDateityp
dDirectory
lSymbolische Links
bBlockorientiertes Gerät
cZeichenorientiertes Gerät
pNamed Pipes
sSockets

Im Folgenden werden die einzelnen Dateitypen beschrieben.

Symbolische Links

Symbolische Links (auch »Symlinks« oder »Softlinks« genannt) sind eine andere Art von Links neben Hardlinks. Ein Symlink ist eine besondere Datei, die auf einen Hardlink in einem gemounteten Dateisystem zeigt. Wenn du versuchst, den Inhalt eines Symlinks zu lesen, siehst du den Inhalt der Datei, auf die er zeigt. Da Directories, Geräte und andere Symlinks nur verschiedene Arten von Dateien sind, kann ein Symlink auf diese zeigen.

Eine Hardlink ist also ein Dateiname und eine Inode-Nummer. Eine Datei ist in Wirklichkeit eine Inode: der Ort auf der Platte, der Dateityp, Rechte usw. Ein Symlink ist eine Inode, die den Namen eines Hardlinks enthält. Ein Symlink führt einen Dateinamen mit einem anderen Dateinamen zusammen, wohingegen ein Hardlink einen Dateinamen mit einer Inode-Nummer zusammenführt.

Alle Hardlinks zu ein und derselben Datei haben denselben Status. Einer ist so gut wie der andere. Wenn du eine Operation auf einem Hardlink ausführst, ist das genau dasselbe, als wenn du diese Operation auf einem anderen ausführen würdest. Andererseits haben Operationen auf einem Symlink manchmal Auswirkungen auf der Inode des Symlinks (die den Namen des Hardlinks enthält) und manchmal haben sie Auswirkungen auf den Hardlink, auf den gezeigt wurde.

Es gibt einige wichtige Unterschiede zwischen Symlinks und Hardlinks:

Probiere einmal Folgendes aus:

konsolero@nitidelo ~ $ cd; ln -s /tmp/me MyTmp

cd wechselt in dein Homeverzeichnis. ln mit der Option -s erstellt einen symbolischen Link – in diesem Fall einen Link mit dem Namen MyTemp, der zu dem Dateinamen /tmp/me zeigt:

konsolero@nitidelo ~ $ ls -l MyTmp

Die Ausgabe sollte wie folgt aussehen:

lrwxrwxrwx 1 havoc havoc 7 Dec 6 12:50 MyTmp –> /tmp/me

Datum, Besitzer und Gruppe werden bei dir natürlich anders sein. Beachte die Angabe l als Dateityp und auch die Rechte. Wenn du mit chmod versuchst, die Rechte zu ändern, wirst du die Rechte der Datei ändern.

konsolero@nitidelo ~ $ chmod 700 MyTmp

Du wirst die Fehlermeldung No such file or directory erhalten, da die Datei /tmp/me nicht vorhanden ist. Bedenke, dass du einen Symlink immer erzeugen kannst.

konsolero@nitidelo ~ $ mkdir /tmp/me

Erzeugt das Directory /tmp/me.

konsolero@nitidelo ~ $ chmod 700 MyTmp

Das sollte jetzt funktionieren.

konsolero@nitidelo ~ $ touch MyTmp/myfile

Erzeugt eine Datei in MyTmp.

konsolero@nitidelo ~ $ ls /tmp/me

Die Datei wurde gerade in /tmp/me erzeugt.

konsolero@nitidelo ~ $ rm MyTmp

Löscht den symbolischen Link. Beachte, dass hiermit nur der Link gelöscht wird. Deshalb verwende rm und nicht rmdir.

konsolero@nitidelo ~ $ rm /tmp/me/myfile; rmdir /tmp/me

Räumt auf und löscht alle Dateien, die für diese Demonstration angelegt wurden.

Gerätedateien

Geräte beziehen sich auf physikalische oder virtuelle Geräte des Systems, wie Festplatte, Grafikkarte, Bildschirm oder Tastatur. Ein Beispiel für ein virtuelles Gerät ist die Konsole, vertreten durch /dev/console.

Es gibt zwei Arten von Geräten. Zeichenorientierte Geräte können auf einzelne Zeichen zugreifen. Das ist dann die kleinste Einheit, die auf diesen Geräten geschrieben oder gelesen werden kann.

Auf blockorientierte Geräte muss in größeren Einheiten, die mehrere Zeichen enthalten, zugegriffen werden – das wird Block genannt. Deine Festplatte ist ein blockorientiertes Gerät.

Du kannst Gerätedateien wie andere Dateien lesen und in sie schreiben, obwohl die Dateien unverständliches Kauderwelsch enthalten. Es ist in der Regel eine schlechte Idee, wahllos Daten in diese Dateien zu schreiben. Aber manchmal ist es nützlich. Beispielsweise kannst du eine Postscript-Datei in das Druckergerät /dev/lp0 ausgeben oder Modemkommandos an die entsprechende Gerätedatei des seriellen Ports senden.

/dev/null

/dev/null ist eine besondere Gerätedatei, die alles, was in sie geschrieben wird, einfach wegwirft. Wenn du irgendeine Ausgabe nicht möchtest, wirf sie in /dev/null. Im Grunde genommen ist diese Datei ein Fass ohne Boden. Wenn du /dev/null liest, erhäst du sofort ein EOF-Zeichen (end-of-file). /dev/zero ist ähnlich. Wenn du jedoch davon liest, erhäst du das Zeichen \0 (was nicht dasselbe wie die Zahl 0 ist).

Named Pipes (FIFOs)

Eine Named Pipe ist eine Datei, die wie eine Röhre (engl. Pipe) arbeitet. Du tust etwas in die Datei, und es kommt am anderen Ende wieder heraus. Dieses Prinzip wird FIFO oder First-In-First-Out genannt: Die erste Sache, die du in die Pipe legst, ist die erste Sache, da am anderen Ende wieder herauskommt.

Der Prozess, der in eine Named Pipe schreibt, wird so lange nicht beendet, bis die geschriebenen Informationen gelesen wurden. Wenn ein Prozess von der Named Pipe liest, wartet er, bis etwas zu lesen da ist. Die Größe der Pipe ist immer Null – sie speichert keine Daten, sie verbindet nur zwei Prozesse wie die Shell mit |. Da die Pipe einen Namen hat, müssen sich die Prozesse nicht auf derselben Kommandozeile befinden oder vom gleichen Benutzer ausgeführt werden.

Du kannst das mit den folgenden Beispielen ausprobieren:

konsolero@nitidelo ~ $ cd; mkfifo mypipe

Erzeugt das FIFO.

konsolero@nitidelo ~ $ echo "hello" > mypipe

Startet einen Prozess, der versucht, »hello« in die Pipe zu schreiben. Beachte, dass der Prozess sich nicht beendet; er wartet auf einen Prozess, der die Pipe liest.

Wechsel auf eine andere Konsole und gib dort folgendes Kommando ein:

konsolero@nitidelo ~ $ cat mypipe

Jetzt kann sich der echo-Prozess beenden, da das cat von der Pipe liest und der cat-Prozess hello ausgibt.

konsolero@nitidelo ~ $ rm mypipe

Du kannst Named Pipes wie andere Dateien löschen.

Sockets

Sockets sind mit Pipes vergleichbar, jedoch arbeiten Sockets über das Netzwerk. Hiermit organisiert dein Computer den Datenaustausch mit anderen Rechnern. Du hast vielleicht schon einmal etwas von »WinSock« gehört, das sind Sockets für Windows.

Wir werden uns hier nicht näher mit diesem Thema beschäftigen, da du vermutlich keine Gelegenheit haben wirst, Sockets zu benutzen, solange du nicht programmierst. Jedoch weiß du jetzt, wenn du den Dateityp s siehst, was das ist.

Nach oben