Grundlagen von Linux


* Einführung * Installation * Paketmanager * Grundlagen * Shells * Entwicklung * KDE * Skriptsprachen * AWK * PHP * Perl * Apache * Veranstaltungen * Schulungen * Bücher * Netzwerk * OpenOffice * OpenSource * Samba

Grundlagen


© <a href="http://www.fotolia.de/p/29003">Ljupco Smokovski</a> - FOTOLIA
Home
Benutzerverwaltung
Dateiverwaltung
Root-Passwort vergessen
Verzeichnisstruktur
Zugriffsrechte im Dateisystem
Mit freundlicher Unterstützung von:

Linux-Kurse und Seminare Linux Kurse
Veranstalter des
Linux-Tag
am Bodensee
2007 und 2008

Kontakt
Haftung
Impressum
Problem Hilfe Startseite


AktenordnerDateisysteme

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.
Beispiel VerzeichnisbaumTypischerweise 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.
Verzeichnisbaum mit LinksMan 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:
Root-Filesystem

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:

Inodes

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:


Beispielsystem mit Mounts

© Copyright 2007 - 2010, Bernd Klein mit freundlicher Unterstützung von Bodenseo, Linux-Kurse und Schulungen,
Foto linke Seite (Mann mit Strick und Colt): Foto: © Ljupco Smokovski, fotolia 984022