Dateien sind unter Linux bzw unter Unix nicht nur Behältnisse für Daten. Die Datei ist das wichtigste Konzept unter Unix, das an vielen Stellen zum Einsatz kommt und ohne das überhaupt nichts funktioniert. Unter Unix ist alles entweder eine Datei oder ein Prozess oder besteht aus Dateien und Prozessen (Ok, das ist jetzt leicht - aber wirklich nur leicht - vereinfacht). Dateien unterstützen die folgenden Operationen:
- öffnen
- schließen
- lesen
- schreiben
- ausführen
- ändern der aktuellen Position (seek)
- evtl. zusätzliche Spezialfunktionen
Darüber hinaus hat jede Datei noch DateiRechte, die den Zugriff regeln, und DateiAttribute.
Dabei muss nicht jede Datei oder jeder Dateityp alle Operationen unterstützen. Dateien finden unter Unix überall da Verwendung, wo Daten gelesen oder geschrieben werden müssen. Es gibt deshalb auch eine ganze Reihe von Dateitypen:
- reguläre Dateien (regular file: f)
- das was man gemeinhin unter Datei versteht
- Speicherplatz für Daten, meist auf einem Datenträger, wie z.B. Festplatte oder Diskette
- Verzeichnisse (directory: d)
- enthält Dateinamen
- zum Wechsel in ein Verzeichnis benötigt man das Ausführen-Recht
SymLinks (symbolic link: l)
- Eine Datei die auf eine andere verweist
- so ähnlich wie eine "Verknüpfung" unter Windows
- kann mit ln -s erstellt werden
- Sockets: Unixsockets (socket: s), Netzwerksockets (ausnahmsweise nicht über eine Datei ansprechbar)
NamedPipe (engl. Rohr) (named pipe: p)
- Verbindung zwischen Prozessen
- kann aber auch mit mkfifo erzeugt werden
- hat zwei "Enden", eines zum Lesen und eines zum Schreiben
Gerätetreiber (im Verzeichnis /dev)
- repräsentieren tatsächliche oder Logische Geräte
- zwei verschiedene Typen
BlockDevices (block: b)
- Festplatten (/dev/hda)
- Partitionen (/dev/hda1)
CharacterDevices (character: c)
- Schnittstellen
- Grafikkarten
- Terminals (/dev/tty*)
- können mit mknod angelegt werden
- haben eine Major und Minor Nummer
- Die Major-Nummer gibt den Treiber im Kernel an, der das Device verwaltet
- Die Major-Nummern wird sowohl für Block- wie auch für Charackter-Devices vergeben
- Die Minor-Nummer gibt das konkrete Gerät an
- z.B. /dev/hda 3, 0 /dev/hda1 3, 1 /dev/hda2 3, 2
- zwei verschiedene Typen
- repräsentieren tatsächliche oder Logische Geräte
Die verschiedenen Typen geben schon einen ersten Eindruck wo überall Dateien zum Einsatz kommen. Einige nicht ganz offensichtlichen Fälle sollen hier aber trotzdem noch explizit erwähnt werden:
- Standard-Ein- und -Ausgabe von Prozessen sind Dateien
XXX Kette Tastatur, Xterm -> Shell -> Befehl
Eine wichtige Schnittstelle zum Kernel ist das /proc-Dateisystem. Dort werden wichtige Informationen in nicht ganz so regulären Dateien angeboten. Diese haben scheinbar die Größe null, haben jedoch einen (dynamisch erzeugten) Inhalt. Durch Schreiben in die richtigen Dateien kann das Verhalten des Kernels geändert werden. Da /proc aber Linux spezifisch ist, greift man normalerweise nur über Programme darauf zu, da so der Zugriff portabel ist.
- XXX mehr Beispiele
Anmerkung: dies ist nicht WikiPedia. Also bitte keine zu einfachen Begriffe hier definieren, das ist uferlos und oft unnötig.
- schon, aber die wesentlichen Konzepte sollte man hier IMHO schon nachlesen können
- hmmm, uferlos klingt schön
ich würde gerne vorschlagen, das wir zu den einfachen Begriffen zur WikiPedia etc.. verlinken, und hier eben anwendungsspezifische Probleme etc... lösen.
Frage: Ich suche nach einer Möglichkeit, den Inhalt einer Datei zu emulieren, also die Daten, die ein Prozess aus einer Datei ließt, dynamisch zu erzeugen. Hintergrund: Ich würde gerne die passwd Datein von cvs (wenn man pserver nutzt) emulieren in dem ich sie bei jedem Lesezugriff dynamisch aus einem LDAP Verzeichnis generiere. Mir ist bewußt, dass das über ein KernelModul und eine Gerätedatei möglich ist, ich würde mir aber den unschönen Umweg über den Kernel gerne sparen. Gibt es da andere Möglichkeiten? Kann man in dem Fall Sockets verwenden? Das Ganze ist ne Spielerei und soll mehr als Technologiestudie dienen. Deshalb könnt ihr euch Kommentare bzgl. pserver und der Idee überhaupt sparen -- JanRoehrich 2003-08-20 22:20:51
Der HURD hat genau für diesen Einsatzzweck die "Translator" erfunden. In portabler Form kannst du dir höchstens mit named pipes behelfen. -- BennySiegert 2003-08-21 12:55:25