Grundlagen
Home
Benutzerverwaltung
Dateiverwaltung
Root-Passwort vergessen
Verzeichnisstruktur
Zugriffsrechte im Dateisystem
Mit freundlicher Unterstützung von:
Linux-Kurse und Seminare
Veranstalter des
Linux-Tag am Bodensee 2007 und 2008
Kontakt
Haftung
Impressum
Problem Hilfe Startseite
|
Dateisysteme
logischer Aufbau und verschiedene Realisierungen
Aufgabe eines Dateisystems
Die wesentliche Aufgabe eines Dateisystemes besteht darin,
Informationen permanent zu speichern.
Die Daten werden in Form von Dateien gespeichert und die Gliederung
erfolgt mit Verzeichnissen.
Dateisysteme oder Verzeichnisse dienen auch zur Herstellung einer
logischen Ordnung von Daten (Dateien) unabhängig von ihrem
Speicherort
auf dem Datenspeicher.
Die Eindeutigkeit von Dateinamen wird meist, wie auch in Linux, mit
Pfadnamen (path name) gewährleistet. Diese können absolut,
d.h.
beginnend ab der Wurzelposition oder relativ zum aktuellen
Arbeitsverzeichnis angegeben bzw. verwendet werden.
Typischerweise werden für das Arbeiten mit
Dateisystemen eine Grundmenge von Operationen in jedem Betriebssystem
benötigt:
- Erzeugen und Löschen von Dateien
- Lesen und Verändern von Dateien
- Umbenennung von Dateinamen
- Zugriffsberechtigungen
- usw.
Links
Die Zugriffsberechtigungen in Linux sind bedeutend differenzierter, als
sie unter Windows sind, wie wir an anderer Stelle dargestellt haben. In
Linux gibt es auch noch einen anderen sehr wichtigen Mechanismus, den
man in vielen anderen Betriebssystemen, wie zum Beispiel Windows
vergeblich sucht: Links
Links ermöglichen es, dass man mit verschiedenen Pfadnamen und
verschiedenen Dateinamen auf ein und dieselbe Datei, physikalisch
gesehen, zugreifen kann.
Man unterscheidet zwischen
symbolischen (auch Softlinks genannt) und statischen Links (Hardlinks).
Bei einem Hardlink handelt es sich um einen weiteren Dateinamen
für
eine bereits existierende Datei. Hardlinks auf Verzeichniss und auf
Dateien in anderen Partitionen oder Festplatten sind nicht möglich.
Ein symbolischer Link ist ein echter Verweis auf eine Datei. Es handelt
sich dabei um eine Datei, die nur den Dateinamen der Datei
enthält, auf
die sie verweist.
Konsequenz: Es können Links auf Dateien existieren, die es nicht
mehr
gibt. Ein Softlink kann auf Verzeichnisse zeigen, ebenso wie auf
Verzeichnisse und Dateien in anderen Partitionen und Festplatten.
Beispiel:
In einem sonst leeren Verzeichnis befindet sich die Datei abc.
ls -li liefert:
3179052 -rw-r--r-- 1 bernd users 0 2007-05-24 18:57 abc
Führt man nun ein ln abc efg aus, so erhält man:
3179052 -rw-r--r-- 2 bernd users 0 2007-05-24 18:57 abc
3179052 -rw-r--r-- 2 bernd users 0 2007-05-24 18:57 efg
Ändert man eine der beiden Dateien verändert sich automatisch
auch die
andere:
saturn > echo "blabalbab l Nur" >> efg
saturn > ls -li
total 8
3179052 -rw-r--r-- 2 bernd users 20 2007-05-24 22:50 abc
3179052 -rw-r--r-- 2 bernd users 20 2007-05-24 22:50 efg
Inodes
Bei Linux-Dateisystemen lässt sich jede Datei über Inodes
erreichen.
Inodes stellen die Hauptkomponente der Dateiverwaltung dar.
Sichtweisen des Dateisystems:
- Sicht des Anwenders oder Anwenderprogramms:
Hierarchisch angeordnete Baumstruktur mit Dateien und Verzeichnissen
- Aus der Sicht des Kernels:
Eine Datei ist durch einen Namen und eine Inode-Nummer bestimmt.
Ein Inode ist ein Informationsknoten, der alle Attribute einer Datei
(Datei-Metadaten) außer ihrem Namen und dem eigentlichen Inhalt
der
Datei enthält.
Der Name einer Datei ist nicht Bestandteil eines I-Nodes, weil eine
Datei mehrmals unter verschiedenen Namen im Dateisystem vorkommen kann.
Im Inode gespeicherte Informationen:
- das Gerät, dem der Inode angehört
- Gruppen-ID der Gruppe, der die Datei zugeordnet ist
- Zugriffsrechte der Datei
- Typ der Datei (einfache Datei, Verzeichnis, Link,)
- Größe der Datei (in Bytes)
- Referenzzähler (Anzahl der Hardlinks)
- Datum der letzten Inode-Änderung (change time, ctime),
- Datum des letzten Zugriffs auf die Datei (letzte
Dateiöffnung/-ausführung, access time, atime)
- Datum der letzten Modifikation der Datei (modification time,
mtime)
Virtuelles Dateisystem
Der Verzeichnisbaum von Linux beginnt mit einem Knoten dem
Root-Verzeichnis (Wurzelverzeichnis), im Gegensatz zu
Windows-Systemen, in denen es mehrere Einstiegspunkte wie z.B. C:
oder D: gibt.
Der Verzeichnisstruktur bildet eine logische Struktur ab; alle
Verzeichnisnamen entsprechen (normalerweise) der logischen Funktion
eines Verzeichnisses.
Strikte Trennung zwischen logischer und physikalischer Struktur.
Bei Windows sind die Konzepte vermischt: z.B. steht A: und B: immer
für
ein Diskettenlaufwerk und C: meistens für eine
Festplattenpartition usw.
In jedem Unterverzeichnis existieren immer zwei Verzeichnisse und zwar
als Verweis auf das Verzeichnis, in dem es steht, und
als Verweis zum übergeordneten Verzeichnis.
Das Verzeichnissystem unter Linux:

Unterverzeichnisse von root "/" im Detail:
- /bin
Dieses Verzeichnis enthält nur ausführbare Programme
(executables).
Sie sind für die essentiellen Aufgaben der Systemverwaltung
notwendig und können von allen Benutzern verwendet werden, z.B.:
bash, cat, chgrp, chmod, cp, csh, date, df, usw.
- /boot:
Dieses Verzeichnis enthält die Dateien, die zum Booten des Systems
benötigt werden (GRUB oder LILO).
- /dev
Auch die Hardwarekomponenten (devices), wie z.B. Festplatten und
RAM, werden unter Linux als Dateien verwaltet. Daten werden nicht
direkt von einem Gerät gelesen oder dorthin geschrieben sondern
über eine Datei, die sich in dev befindet. Die Dateien in /dev
sind keine „richtigen“ Dateien, denn in ihnen werden keine Daten
gespeichert. Sie dienen nur als „Bindeglied“ zwischen den Geräten
und dem Linux-Kernel. (nur I-Nodes)
Mit „ls -l“ erhält man nicht die Dateigröße sondern die
Gerätenummern (major und minor).
Das erste Zeichen des Zugriffsbits lautet b oder c (block- oder
zeilenorientiert)
Die Verbindung zum Kernel von den Geräten wird über Slots
oder Kanäle realisiert. Sie sind nummeriert und verweisen auf die
Treiber.
Die Nummer des Gerätetreibers ist die Hauptgerätenummer
(major device number).
Da ein Treiber mehrere Geräte des gleichen Typs bedienen kann,
gibt es noch eine Untergerätenummer (minor device number)
Interessantes in /dev:
Das sogenannte „Null device“ ist eine Gerätedatei, die als
„Papierkorb“ (oder besser „shredder“) fungiert. Wird eine Datei dorthin
verschoben oder schreibt ein Programm Daten in /dev/null sind als Daten
anschließend gelöscht.
Übrigens auch schon sprichwörtlich „Antworten bitte an
/dev/null“
Die ewig „volle“: /dev/full:
Versucht man in die Datei /dev/full zu schreiben, so wird der Fehler
ENOSPC erzeugt, d.h. kein freier Platz mehr auf dem Speichermedium
vorhanden. Wird benötigt um zu testen, wie sich ein Programm
verhalten würde, wenn das Speichermedium voll wäre.
Die „Zero-Quelle“ /dev/zero:
Aus dieser Datei können beliebig viele Nullbytes (\0 nicht das
Zeichen Null) gelesen werden.
- /etc
Dieses Verzeichnis enthält Konfigurationensdateien für das
gesamte System. Unter anderem bestimmen diese Konfigurationen das
Hochfahren des Rechners, die Netzwerkkonfigurationen,
Tastaturbelegungen usw.
Wegen der Übersichtlichkeit gibt es Unterverzeichnisse für
bestimmte Anwendungen, z.B. X11, samba
- /home
Hier sind die privaten Verzeichnisse der Anwender zu finden.
Es ist das Verzeichnis, in dem sich ein User automatisch nach dem
Einloggen befindet. Außerdem haben die User uneingeschränkte
Zugriffe auf die Ínhalte ihrer Homeverzeichnisse.
- /lib
Ort für gemeinsame Bibliotheken (shared libraries) für
dynamisch gelinkte Programme.
Andere Shared-Libraries befinden sich unter anderem in:
/usr/lib und /usr/X11R6/lib
- /mnt
auch /media:
Enthält Unterverzeichnisse wie cdrom oder cdwriter, über die
externe Dateisysteme eingebunden werden.
Ursprünglich wurde hierfür nur /mnt verwendet. Es
scheint so, dass sich wahrscheinlich /media durchsetzt.
/media wird bereits nur noch von SuSE und openSuSE verwendet.
/media wird bereits nur noch von SuSE und openSuSE verwendet.
- /proc
Das Prozessdateisystem /proc ist ein
Pseudodateisystem. Zur Laufzeit werden Daten aus dem Kernel in
der Form eines Dateisystems gespiegelt.
Das Dateisystem muss wie andere Dateisysteme mit mount auf
ein exisitierendes Verzeichnis aufgesetzt werden, wozu in der Regel
/proc verwendet wird.
Zeile in /etc/fstab:
proc /proc
proc
defaults 0 0
manuell mounten:
# mount -t proc proc /proc
Infos über Hardware in /proc
cmdline:
Kommandozeile mit Bootparametern, mit der der Kernel von grub oder lilo
gestartet wurde
cpuinfo:
Informationen über Typ und Leistung der verwendeten CPU.
devices:
Namen der aktiven Gerätetreiber im Kernel sowie die
Hauptgerätenummern.
dma:
Liste der belegten DMA-Kanäle mit den korrespondierenden
Geräten.
filesystems:
Eine Liste aller Dateitypen, die vom Kernel unterstützt werden.
interrupts:
Liste aller belegten Hardwareinterrupts in der Form:
Interrupt-Nummer: Anz. ausgelöster Interrupts
Gerätebezeichnung
ioports:
Liste aller belegten Adressen des IO-Bereiches.
kcore:
Kann nur mit Superuser-Rechten gelesen werden. Die Größe ist
identisch mit dem Arbeitsspeicher.
kmsg:
Kernelmeldungen
loadavg:
4 Zahlen: Durchschnittliche Anzahl der Prozesse innerhalb der letzten
1, 5 und 15 Minuten. Die 4. Zahl entspricht der Gesamtzahl der
Prozesse.
locks:
Liste aller aktiven File-Locks.
meminfo:
Auslastung des Arbeitsspeichers und des Swap-Bereiches (Befehl: free)
modules:
Liste der zur Laufzeit geladenen Kernelmodule.
mounts:
gemountete Dateisysteme (siehe /etc/mtab)
pci:
Datei-HW-Informationen zu allen Geräten, die am PCI-Bus betrieben
werden, falls ein solcher Bus vorhanden ist.
stat:
aktuelle Statusinformationen des Kernels
sys:
allgemeine Informationen über das Laufzeitsystem
uptime:
zwei Zahlen: erste gibt, wie lange das System in Sekunden bereits
läuft, die zweite gibt die Anzahl der Sekunden an, die der Rechner
im Idle-Prozess gelaufen ist.
version:
Versionsnummer des laufenden Kernels, Kompiler-Info und Datum der
Compilierung
- /sbin
Enthält Programme zur Systemverwaltung, die nur von
root ausgeführt werden können.
- /tmp
Dieses Verzeichnis enthält temporäre Dateien.
Ebenso wie /var/tmp
- /usr
In /usr finden sich alle Anwendungsprogramme wie das
komplette X-Windows-System, die Quellen, LaTEX, GNU C-Compiler usw.
- /var
/usr-Verzeichnis soll rein statisch sein, damit man es
Read-Only mounten kann. Deswegen mussten alle Verzeichnisse und
Dateien, auf die schreibend zugegriffen werden muss, ausgelagert werden.
Auslagerung erfolgte nach /var
Eigenschaften von Pfadnamen
absolute
Pfadnamen
|
relative
Pfadnamen
|
beginnen mit dem
Root-Verzeichnis, inklusive "/"
zu einem Objekt (Datei oder Verzeichnis) gibt es einen eindeutigen
absoluten Pfad
|
starten mit dem aktuellen
Verzeichnis ohne führenden Schrägstrich "/"
zu einem Objekt gibt es mehrere relative Pfade
|
Aktuelles Verzeichnis
Jeder Prozess in Linux hat ein definiertes aktuelles Verzeichnis.
In der Shell erhält man das aktuelle Verzeichnis mit dem Kommando
'pwd'
Prozesse, die man von der Shell aus startet erben des aktuelle
Verzeichnis der Shell. d.h. ein solcher Prozess startet mit dem
gleichen Verzeichnis wie die Eltern-Shell.
Ändert ein Prozess sein aktuelles Verzeichnis, so bleiben die
aktuellen Verzeichnisse der anderen Prozesse davon unberührt.
Kernelsicht eines Verzeichnisses
Für Benutzer sieht es so aus, als wüßten Shell und
andere Programme immer den genauen Pfad des aktuellen Verzeichnisses.
Das aktuelle Verzeichnis enthält aber noch nicht einmal den
eigenen Namen. Bekannt ist die Nummer des Inodes des aktuellen
Verzeichnisses und des Elternverzeichnisses.
Im folgenden Diagramm ist die Datei .bashrc im Verzeichnis /home/linux
in der Inode-Darstellung angegeben:

Mounten
Unter Mounten oder Einbinden (Einhängen) versteht man den Vorgang
ein physikalisches Medium in das Dateisystem eines Betriebssystems
einzubinden. Häufig geschieht das Einbinden automatisch beim
Booten. Wechselmedien werden über einen Automounter verfügbar
gemacht. Für das manuelle Mounten gibt es den Befehl mount. Ein
gemounteter Teilbereich des Dateisystems kann wieder ausgehängt
werden, wenn keine Prozesse mehr auf Dateien dieses Bereiches
zugreifen. Dazu gibt es den Befehl „umount“.
Einbinden der dritten Partition einer Festplatte als Verzeichnis /data:
$ mount /dev/hda3 /data
Aushängen:
$ umount /dev/hda3
Beispielsystem mit gemounteten Festplatten und Partitionen:

|