Zurück Home ...Computer ...Fotografie ...Links ...Download
Linux Linux - Dateisystem
D
a
t
e
i
s
y
s
t
e
m

Das Dateisystem...
.

Das Dateisystem

Allgemeines

Unter Linux kommt heute üblicherweise das ext2fs zum Einsatz.

Einige Merkmale des Filesystem sind...
  • es gibt keine Laufwerksbuchstaben
  • Dateinamen bis zu einer länge von 1 bis max. 255 Zeichen
  • Unterscheidung von Groß- und Kleinschreibung
  • Für Dateinamen sind alle Zeichen erlaubt, wobei man mit Sonderzeichen vorsichtig sein sollte
  • es gibt keine 'direkten' Dateierweiterungen (wie in DOS 8+3)...
  • max. Größe einer Datei beträgt 2GByte
  • Zugriffskontrolle auf die Daten
  • ein Teil des Dateisystems kann für den Superuser reserviert werden
start

Die Baumstruktur

Die Verzeichnisstruktur von Linux wird vom FSSTND (Filesystem-Standart) geregelt...
Die Verschiedenen Verzeichnisse haben jeweils unterschiedliche "Aufgabenbereiche", dies sind...

/
Das Wurzelverzeichnis...
/boot
Dieses Verzeichnis wird beim Systemstart vom Bootloader durchsucht, u.a nach den Dateien map, boot.b, vmlinuz u.a.
/bin
In diesem Verzeichnis befinden sich oft genutzte Kommandos wie "ls", und Programme zur Reparatur und Systemdiagnose. Die Programme, welche nicht so 'wichtig' sind bzw. nicht so oft ausgeführt werden müssen, befinden sich meist in /usr/bin.
/dev
Hier befinden sich die Gerätedateien. In Linux werden alle Peripheriegeräte über Devicedateien angesprochen, z.B die Festplattendevices /dev/hda...
...Spezielle Devices sind...
/dev/core der Kernelspeicher
/dev/mem und kmem Abbildung des Arbeitsspeichers
/dev/null der Mülleimer.. hier verschwindet alles
/dev/port hier können die Ports angesprochen werden
/dev/ramdisk Abbildung der Ramdisk
/dev/lp? Abbildung der Druckerschnittstellen
/dev/tty? die virtuellen Terminals
/dev/ttyS? die seriellen Schnittstellen
... ...und und und...
/etc
Hier befinden sich alle Konfigurationsdateien des Systems. Als Beispiele passwd, hosts, printcap ...Interessant ist z.B das Verzeichnis /etc/skel. Hier befinden sich Dateien die bei anlegen eines neuen Users in dessen Home-Verzeichnis kopiert werden.....
...Hier Eine kurze Beschreibung wichtiger Dateien...
crontab Automatisches Ausführen von Programmen zu bestimmten Zeiten
fstab Liste aller Dateisysteme mit ihren Mountpoints
group Liste mit den bekannten Benutzergruppen und ihren GID
HOSTNAME Hostname des Systems
inittab Arbeitsschritte beim Systemstart
issue sehr wichtig ;), der Begrüßungstext beim Login
lilo.conf für den Bootloader LILO
motd Message of the Day, erscheint nach erfolgreicher Anmeldung
profile Die Datei mit den Standarteinstellungen für das ganze System
shells Liste mit installierten Shells
securetty Terminals von wo root sich einwählen darf
passwd Liste aller Benutzer und Infos zu diesen, die Passwörter stehen in shadow
hosts Bekannte Rechner und der Festlegung von Namen zu IP-Adressen
printcap Einstellungen zum Drucker
/home
Die Unterverzeichnisse für die User...
/lib
Die Shared Libraries, gemeinsam verwendete Bibliotheken. Hier befinden sich die beim Systemstart benötigten libs. Die anderen befinden sich in /usr/lib.
/proc
Dieses Verzeichnis ist ein Pseudo-Dateisystem, d.h. es existiert nicht direkt auf der Festplatte, es sind nur Verweise auf Teile im Hauptspeicher die Auskunft über den Systemstatus geben. Es befindet sich z.B. für jeden laufenden Prozeß ein Verzeichnis mit seiner PID(ProzeßID)
...Wichtige andere Dateien...
cpuinfo infos zur CPU und anzeige der Bogo-MIPS
devices Liste von Gerätetreibern mit ihren Major- und Minor-Nummern
dma Liste verwendeter DMA-Kanäle
filesystems Liste von den bekannten Filesystemen
interrups die verwendeten IRQ´s
ioports definierte EA-Schnittstellen
kcore Zugang zum Hauptspeicher, z.B. mit einem Debugger(dgb)
kmsg Systemfehlermeldungen können hier ausgelesen werden
ksyms Liste der Kernelmodule und ihrer Speicheradressen
loadavg Systembelastung (durchschnittlich) anzeigen
meminfo aktuelle Speicherauslastung
modules Liste der geladenen Module nd der Nutzungsgrad
mounts Liste der gemounteten Dateisysteme
net Netzauslastung
pci...scsi gefundene PCI-Devices bzw. SCSI-Devices
stat allgemeine Statistiken zum System
uptime Sekunden seit Systemstart und Leerlaufzeit
version Kernel-Version
/root
Heimat(HOME)-Verzeichnis von root
/sbin
Wichtige Programme die zum Systemstart benötigt werden. So auch das Verzeichnis /sbin/init.d.., dort erwartet der init-Prozeß die Shellscripte zum Systemstart. Hier befinden sich Programme deren Benutzung nur root gestattet ist.
/tmp
Hier wird temporärer Speicherplatz zur Verfügung gestellt.
/usr
Das USER-Verzeichnis. Hier befinden sich alle Programme zur täglichen Arbeit mit Linux. Dieses Verzeichnis sollte read-only gemounted sein. Die Daten die veränderbar sein sollen werden in /var abgelegt..
...Beispiele...
/usr/doc Documentationen von Linux
/usr/X11R6 Das X-Windows Stammverzeichnis
/usr/src Quellcode vom Systemkernel und evt. von anderen Programmpacketen
/usr/local Locale (nachträgliche) Programminstallationen
/var
Hier sind die variablen Dateien des Systems zu finden, da ja /usr read-only ist.
...Beispiele...
/var/log Log-Files
/var/spool Daten zur Zwischenspeicherung z.B. der Drucker, E-Mails
/var/catman für schon übersetzte Manual Pages
/var/run Dämonen speichern hier ihre PID´s ab
start

Zugriffsrechte

Da Linux ein Multiuser-System ist,
bei dem ja viele Benutzer auf einem System arbeiten - aber eben nicht einfach vom Nachbarn Daten entwenden können sollen,
gibt es für jede Datei, jedes Verzeichnis usw. Zugriffsbeschränkungen. Jeder Nutzer kann festlegen welche Rechte
  • er selbst
  • Mitglieder der Gruppe der der Benutzer angehört
  • und der Rest der Welt
auf seine Daten hat.
Schauen wir uns eine fiktive Ausgabe des Kommandos ls -l an..
-rwxr-xr-x 1 micha users 2345 Feb 13 20:29 start
Wir können dem entnehmen das die Datei von einem User mit Namen 'micha' angelegt wurde, dieser der Gruppe 'users' angehöhrt und das Datum der letzten Änderung.
Uns interessieren aber hier mehr die Ersten 10 Zeichen, welche folgende Bedeutung haben...
- rwx r-x r-x
Dateityp Eigentümer Gruppe Andere
Ein r bedeutet Lesezugriff, ein w schreibender Zugriff und das x das die Datei ausführbar ist. Somit ist die Datei 'start' also von ALLEN Leuten ausführbar, aber nur der Eigentümer kann die Datei schreibend verändern. Dazu muß gesagt werden, das root Zugriff auf ALLE Daten im System hat, unabhängig von den vergebenen Rechten.
Zum ändern der Rechte einer Datei dient das Kommando chmod und um die Gruppenzugehörigkeit zu ändern wird das Kommmando chgrp benutzt.
...
start

Dateitypen

In Linux unterscheiden wir grob zwischen 6 Arten von 'Dateien'. In der folgenden Tabelle sind diese aufgelistet.
Dateitypen
KennzeichnungTypkurze Beschreibung
-Normale Dateien können ASC-II Texte sein, oder Programme usw.
es werden normale Dateiblöcke auf der Festplatte belegt
dVerzeichnisse sind eigentlich auch nur spez. Dateien
zur alltäglichen Nutzung reicht aus, das Verzeichnisse so gekennzeichnet sind
c,bGerätedateien über diese wird die Hardware zugegriffen
c - Charakterdevices (z.b paralle bzw. seriellen Schnittstellen)
b - Blockdevices (Blockzugriff z.b. Festplatten)
s Sockets spez. Dateien für Verbindungen von Prozessen über mit TCP/IP
p FIFO, Named Pipes Prozesskommunikation, wobei Daten nur in einer Richtung gesendet werden können
l Links zusätzliche Namen für existierende Dateien
symbol. Links - nur ein Zeiger auf eine Datei
hard Links - Links ist vollkommen gleichwertig zur originaldatei

Dieses System ist die große stärke eines Linux(UNIX)systemes. Für den Benutzer ist jedliche Hardware auf die er zugreifen möchte oder auch entfernte Rechner eigentlich nur ein Zugriff auf eine Datei die einen gewissen Type besitzt. Ein Beispiel dazu :
der Drucker wird über die Datei /dev/lp? angesprochen und besitzt den Typ c, also eine Zeichenorientierte Gerätedatei. Mit echo "hallo" >/dev/lp0 kann man nun direkt Ausgaben an den Drucker weiterleiten.
Natürlich ist dies nur ein sehr einfaches Beispiel und sollte auch nur das Grundprinzip erklären. Der Haupteinsatz liegt in der Vernetzung von tausenden Computern.
start

Was sind Inodes

In einem Inode(index node) werden unter Linux sämtliche Verwaltungsinformationen (s.u) zu Objekten im Dateisystem gespeichert, außer dem Dateinamen. Der Dateiname ist nur ein Eintrag im Verzeichnis und verweist wiederum auf den jeweiligen Inode, wobei auch ein Verzeichnis nichts anderes als eine Datei ist der nat. auch ein Inode zugeordnet ist (in der Datei stehen die Dateinamen im Verzeichnis und die zugehörigen Inodenummern).
Zu jeder 'Datei' in einem Linux-System gehört genau ein Inode, wobei jeder Inode eine eindeutige Nummer besitzt.

Was wird in einem Inode, der 128Byte groß ist, gespeichert...
  • Dateityp (-,d,c,b,p,s,l) s.oben
  • Besitzer u. Gruppe (UID,GID)
  • Grösse in Bytes
  • Erstell- und Änderungsdatum sowie das Datum des letzden Zugriffs und das Löschdatum
  • Anzahl der Links auf d. Datei und der Anzahl belegten Blocke
  • Dateiflags
  • Blocknummern der Datenblöcke (bei ext2 sind es 15)
  • C-kundige können in /usr/include/linux/ext2_fs.h nachschauen und es etwas detailierter lesen ;)

In einer Inode steht dann also der genaue Standort der Dateiinhalte, dazu sind 15 Blocknummern vorgesehen. Wenn ihr nachrechnet und davon ausgeht das ja jeder Block (als Standard) 8kByte groß ist und 15 davon in einer Inode gespeichert werden können, ergibt das eine maximale Größe einer Datei von 120kByte. Nicht gerade viel, aber da man ja im realen Linuxleben Dateien mit mehr als diesen 120kByte verwendet, muß es da etwas geben ;)... und das tut es auch, nähmlich...
von den 15Blöcken werden nur 12 zur direkten Adressierung verwendet, die nächsten Blöcke dienen der indirketen Adressierung von weiteren Blöcken.
und so geht's ...
Block 13 zeigt auf eine Blockliste in der weitere Blockadressen gespeichert sind, und wenn diese Liste dann auch nicht mehr ausreicht wird Block 14 und 15 mit zur Hilfe genohmen ;)
.......................

start

Vom Mounten

In Linux wird jedes Medium auf das zugegriffen werden soll in das Dateisystem eingebunden. So wird für den Anwender der hardwarseitige Aspekt Ihres Rechners vollkommen verborgen. Das Kommando "mount" wird zum einbinden verwendet. Dem Befehl "mount" wird das Quellmedium, das Zielverzeichnis und der Typ des Mediums übergeben. Hier nun ein Beispiel...
"mount -t auto /dev/hdb1 /dos" - dies bindet vom 2. Controller die 1. Festplatte als Verzeichnis /dos ein, es wird versucht den Medium-Typ automatisch zu erkennen...

Einige Dateisystemtypen sind..
Typ Bemerkung
affs Amiga File System
auto Versuch des Automatischen Erkennens
hpfs das Windows NT-Filesystem
iso9660 Dateisystem von CDs
msdos nun eben MSDOS ;)
vfat MSDOS mit Unterstützung von WIN95-Filesystem
ext2 eine Linux-Partition
... ...

Hier sehen wir auch wie Speichervolumes (Geräte allg.) unter Linux angesprochen werden. Dafür sind die Device-Special-Files in /dev zuständig...
So wird die Erste IDE-Festplatte repräsentiert durch /dev/hda und die Erste SCSI-Festplatte durch /dev/sda. Erstellt werden solche Devices mit mknod. Dabei werden Major- und Minordevicenummern angegeben. Alle Devices die am selben Controller hängen haben die gleiche MajorNummer, wenn zwei Geräte an einem Controller angeschlossen sind, erfolgt die Unterscheidung dann in der MinorNummer.
Es gibt eine weitere Unterscheidung, Festplatten sind Blockdevices - gekennzeichnet mit einem b, auf sie kann nur mit Blockgrössen gelesen oder geschrieben werden und sie werden über einen Cache angesprochen. Die zeichenorientierten Devices, gekennzeichnet mit einem c, (z.B. die parallen u. seriellen Schnittstellen) werden ohne Buffer direkt angesprochen.
Nun aber zurück zu den Speichervolumes...
Um gemountete Geräte wieder aus dem System zu entfernen wird der Befehl "umount" verwendet. Es kann wahlweise das Verzeichnis oder das Device angegeben werden... so bewirkt umount /cdrom und umount /dev/cdrom selbiges.

start

Die /etc/fstab

In der Datei /etc/fstab sind Parameter für das mounten festgelegt. Diese Datei wird durch mount ausgewertet.

Ein Beispiel der Datei...
/dev/hda1 /boot ext2 defaults 1 2
/dev/hda2 /swap swap defaults 0 0
/dev/hda3 / ext2 defaults 1 1
/dev/hdb /cdrom iso9660 ro,noauto,user 0 0
....
Der Erste Eintrag...
bestimmt die zur Partition gehörende Gerätedatei, also das Gerät das gemountet werden soll..
Der Zweite Eintrag...
bestimmt das Verzeichnis auf das die Partition gemountet wird, für die swap-Partition sollte none angegeben werden..
Der Dritte Eintrag...
bestimmt den Filesystemtyp.. z.B. ext2 als heutiges Standartsystem (s.oben)
Der Vierte Eintrag...
bestimmt zusätzliche Parameter die durch Komma getrennt angegeben werden
dies sind...
defaults die Default-Werte.. suid,rw-Privilegierte- nosiud,noexec,nodev, rw-Nichtprivilig. Benutzer
noauto verhindern von autom. Einbinden der Partition
noexec verbieten von Ausführung jedes Programmes auf dieser Partition
nosiud suid und sgid werden unterdrückt
nouser ausdrückliches Verbot durch mounten von Benutzern
nodev die Block- und Charakter-Devices werden nicht angesprochen auf dieser Partition
rw Lese- und Schreibrechte
ro Nur Leserechte
sw Kennzeichnung von SwapPartition
sync Keine Pufferung der Metadaten
async asynchrone I/O-Operationen erzwingen
user Normale Benutzter dürfen mounten
remount ein Quasi-Restart einer Partition
Alle mit dem Suffix no versehen Optionen können ohne diese angewendet werden und bewirken dann das Gegenteilige ! Für bestimmte Dateisysteme gibt es Zusätzliche Optionen deren Aufzählung aber hier zu weit führen würde...

Der Fünfte Eintrag...
gibt an ob eine Unterstützung durch dumpfs erfolgen soll, Null heist nicht dumpen...
Der Sechste Eintrag
wird zur parallelen Prüfung von Dateisystemen auf unterschiedlichen Geräten verwendet indem es die Reihenfolge festlegt in der Geräte von fschk geprüft werden. Dazu wird der Parameter von fschk ausgewertet. Das Rootfilesystem sollte mit 1, alle anderen ab der 2 gekennzeichnet sein. Filesysteme mit der gleichen Nummer werden parallel geprüft. Die Null bedeutet das keine Prüfung stattfinden soll.

Weiteres folgt

start
use kontakt

use kontakt