19.01.2013 Aufrufe

Dateisysteme und Links

Dateisysteme und Links

Dateisysteme und Links

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Dateisysteme</strong> <strong>und</strong> <strong>Links</strong><br />

Holger Jakobs – bibjah@bg.bib.de, holger@jakobs.com<br />

Inhaltsverzeichnis<br />

2009-06-18<br />

1 UNIX-<strong>Dateisysteme</strong> 1<br />

1.1 Einhängen von Datenträgern . . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />

1.2 Netzlaufwerke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

2 <strong>Links</strong> 3<br />

2.1 Woraus besteht eine Datei? . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

2.2<br />

” Hard“ <strong>Links</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4<br />

2.3 Symbolische <strong>Links</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

2.3.1 Bedeutung symbolischer <strong>Links</strong> . . . . . . . . . . . . . . . . . . . . . 5<br />

2.3.2 Rechtevergabe bei <strong>Links</strong> . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

1 UNIX-<strong>Dateisysteme</strong><br />

In einem UNIX-System gibt es nur einen einzigen Verzeichnisbaum (im Gegensatz zu Windows<br />

<strong>und</strong> Macintosh, wo es mehrere mit Buchstaben versehene Laufwerke bzw. mehrere Volumes<br />

gibt). Über diesen Verzeichnisbaum greift man auf alle angeschlossenen Datenträger<br />

zu. Hierzu werden die einzelnen Datenträger (z. B. Disketten, Festplattenpartitionen, CDs)<br />

in den Verzeichnisbaum eingehängt (gemountet), siehe Abbildung 1. Dieses Einhängen (<strong>und</strong><br />

auch das Abhängen) darf im allgemeinen nur vom Systemverwalter (root) durchgeführt<br />

werden (d. h. sofern es nicht ausdrücklich den gewöhnlichen Benutzern erlaubt wurde).<br />

bin cdrom etc<br />

/<br />

home<br />

tmp<br />

usr<br />

anna berta hugo bin include<br />

Abbildung 1: Beispiel für einen UNIX-Verzeichnisbaum<br />

1


1.1 Einhängen von Datenträgern 1 UNIX-DATEISYSTEME<br />

Als gewöhnlicher Benutzer bemerkt man nicht, ob <strong>und</strong> wenn ja, welche Teile des Dateibaums<br />

nicht zum Root-Dateisystem gehören. Das Root-Dateisystem ist das, was am<br />

Root-Verzeichnis beginnt. Dieses wird beim Systemstart als erstes gemountet. In der Datei<br />

/etc/fstab steht, welche weiteren <strong>Dateisysteme</strong> vorhanden sind <strong>und</strong> ggf. auch automatisch<br />

beim Rechnerstart eingehängt werden.<br />

Häufig sind die Verzeichnisse /usr, /var, /tmp <strong>und</strong>/oder /home (mit ihren Unterverzeichnissen)<br />

auf anderen Festplattenpartitionen enthalten. Ob das so ist, stellen wir mit<br />

Hilfe von mount fest:<br />

~>mount<br />

/dev/sda2 on / type ext4 (rw)<br />

/dev/sda7 on /usr type ext4 (rw)<br />

Hier ist also das Root-Dateisystem auf der Festplattenpartition /dev/sda2 vorhanden, das<br />

Dateisystem der Partition /dev/sda7 dagegen an der Position /usr eingehängt. Beide sind<br />

vom Typ ext4, dem aktuellen Standard-Dateisystem bei manchen Linux-Distributionen,<br />

<strong>und</strong> beschreibbar. (rw = read/write).<br />

Die meisten Geräte bei einem Unix-System haben einen sogenannten Gerätedatei-Eintrag<br />

im Verzeichnis dev (device = Gerät). Beim gegenwärtigen Linux haben die (SATA- <strong>und</strong><br />

SCSI-)Festplatten die Gerätebezeichnungen sd (sata bzw. scsi disk), gefolgt von einem Buchstaben<br />

(a = erste Platte, b = zweite Platte usw.), die älteren IDE-Platten heißen hd (hard<br />

disk) statt sd. Die einzelnen Partitionen der Platte sind dann durchnummeriert. Eine Platte<br />

hat bis zu vier primäre Partitionen mit den Nummern 1 bis 4, weitere sind dann sek<strong>und</strong>äre<br />

Partitionen, die innerhalb einer erweiterten Partition existieren können. Die sek<strong>und</strong>ären Partitionen<br />

tragen die Nummern ab 5. Die Partitionierung einer Festplatte führt man mit dem<br />

Programm fdisk durch.<br />

Bei den hier verwendeten Partitionen handelt es sich also um die zweite primäre Partition auf<br />

der ersten Festplatte, die auf / gemountet ist, <strong>und</strong> um die dritte sek<strong>und</strong>äre Partition derselben<br />

Platte, die auf /usr gemountet ist. Ob es andere Platten <strong>und</strong> Partitionen gibt, wissen wir<br />

nicht – zumindest werden sie derzeit nicht verwendet.<br />

1.1 Einhängen von Datenträgern<br />

Wenn man in das CD-Laufwerk des Rechners eine CD einlegt, so steht diese nicht unmittelbar<br />

zur Verfügung – sondern erst, nachdem man diese ins Dateisystem eingehängt<br />

hat (Kommando mount /dev/cdrom /cdrom ). Solange sie gemountet bleibt, kann man<br />

das CD-Laufwerk auch nicht öffnen. Erst wenn man sie wieder abgehängt hat (Kommando<br />

umount /cdrom), kann man die Schublade wieder öffnen. Nach dem Mounten der CD sieht<br />

der Verzeichnisbaum aus wie in Abbildung 2 auf der nächsten Seite.<br />

Die evtl. vorhandenen Inhalte des Verzeichnisses cdrom im Root-Dateisystem werden<br />

durch den gemounteten Datenträger verdeckt. Nach dem Abhängen des Datenträgers werden<br />

sie wieder sichtbar. Mittels des Kommandos eject /dev/cdrom kann man das Dateisystem<br />

abhängen <strong>und</strong> anschließend die Schublade öffnen (z. B. bei Linux).<br />

2


2 LINKS 1.2 Netzlaufwerke<br />

bin cdrom etc<br />

index.html<br />

movie werb<br />

/<br />

home<br />

tmp<br />

usr<br />

anna berta hugo bin include<br />

Dateisystem der CD<br />

Abbildung 2: UNIX-Verzeichnisbaum mit gemountetem CD-Laufwerk<br />

1.2 Netzlaufwerke<br />

Die in einen Dateibaum einzuhängenden Verzeichnisse (im obigen Fall das Root-Verzeichnis<br />

der CD) müssen nicht auf demselben Rechner liegen. Wenn ein Rechner ein Verzeichnis<br />

” exportiert“ (was über Einträge in der Datei /etc/exports geschieht), dann können andere<br />

Rechner dieses Verzeichnis wie einen Datenträger in ihren eigenen Verzeichnisbaum<br />

einhängen. Dies geschieht über NFS (network file system), das von Sun für Unix entwickelt<br />

wurde, oder über SMB (server message block), das von Microsoft für Windows entwickelt<br />

wurde, inzwischen aber auch von Unix-Systemen verwendet wird. Eine Freigabe über SMB<br />

verlangt allerdings die Installation des Samba-Servers, der eine eigene Konfigurationsdatei<br />

besitzt.<br />

Übers Netz eingehängte <strong>Dateisysteme</strong> werden von mount so angezeigt (verkürzt):<br />

~>mount<br />

ux-02:/raid0/users on /users type nfs (rw)<br />

//ux-02/users on /home/users type smbfs<br />

Hier wird vom Rechner ux-02 das exportierte Verzeichnis /raid0/users in unseren Verzeichnisbaum<br />

als Verzeichnis /users eingehängt. Der Typ ist nfs. Die zweite Zeile zeigt,<br />

wie ein über SMB eingehängtes Verzeichnis aussieht, daher auch der Typ smbfs.<br />

2 <strong>Links</strong><br />

2.1 Woraus besteht eine Datei?<br />

Eine Datei besteht bei Unix aus mehreren Teilen. Diese sind:<br />

3


2.2 ” Hard“ <strong>Links</strong> 2 LINKS<br />

1. i-node: Der i-node (information node) zu einer Datei enthält alle Verwaltungsinformationen<br />

zur Datei, als da wären:<br />

� Dateityp (u. a. gewöhnliche Datei oder Directory)<br />

� Link Counter (Erläuterung folgt weiter unten)<br />

� Verweis auf die Datenblöcke<br />

� Eigentümer- <strong>und</strong> Gruppen-Nummer<br />

2. Datenblöcke<br />

3. mindestens 1 Directory-Eintrag<br />

� Dateigröße<br />

� Dateirechte<br />

� Datumsangaben<br />

Beim Erzeugen einer Datei werden zumindest i-node <strong>und</strong> Directory-Eintrag erzeugt. Datenblöcke<br />

kommen erst dann hinzu, wenn wirklich Daten vorliegen, d. h. die Größe mehr<br />

als 0 Bytes beträgt.<br />

2.2 ” Hard“ <strong>Links</strong><br />

Der Hinweis, dass eine Datei ” mindestens“ 1 Directory-Eintrag hat, lässt den Schluss zu,<br />

dass sie auch mehrere haben kann. Ein Directory-Eintrag für eine Datei wird auch als Link<br />

bezeichnet, <strong>und</strong> von diesen kann eine Datei tatsächlich mehrere haben. Möchte man die<br />

Kündigung seiner Autoversicherung sowohl im Verzeichnis auto als auch im Verzeichnis<br />

versicherung ablegen, so erzeugt man für die Datei einfach einen zweiten Link. Das sieht<br />

dann so aus:<br />

Es gibt zwei Directories. Jedes von diesen enthält<br />

einen Eintrag. Die Einträge zeigen beide auf denselben<br />

i-node. Im i-node stehen alle weiteren Informationen<br />

über die Datei einschließlich der Zeiger<br />

auf die Datenblöcke. Es gibt also ausdrücklich nur<br />

einen Eigentümer, eine Rechtemaske usw., denn<br />

es handelt sich um eine Datei, die lediglich zwei<br />

Einträge im Verzeichnisbaum hat. Im Gegensatz zu<br />

anderen <strong>Dateisysteme</strong>n gibt es bei Unix keine exakte<br />

Übereinstimmung zwischen der Anzahl Dateien<br />

<strong>und</strong> der Anzahl der Einträge im Verzeichnisbaum,<br />

sondern jede Datei kann im Verzeichnisbaum mehrfach<br />

eingetragen sein.<br />

kuend−vers.txt<br />

i−node<br />

auto<br />

owner= fritz<br />

link counter=2<br />

... usw.<br />

$HOME<br />

größe=3493<br />

versicherung<br />

kuend−auto.txt<br />

Daten−<br />

block<br />

Nach der Erzeugung des weiteren <strong>Links</strong> gibt es keinen Unterschied mehr zwischen diesen,<br />

d. h. es gibt kein ” Original“ <strong>und</strong> keine ” Kopie“, denn alle <strong>Links</strong> zu einer Datei sind völlig<br />

gleichwertig. Die als Pfeile eingezeichneten Verweise sind tatsächlich unidirektional, d. h.<br />

es gibt keinen Verweis vom i-node zu seinen Verzeichniseinträgen. Lediglich die Anzahl der<br />

4<br />

Daten−<br />

block


2 LINKS 2.3 Symbolische <strong>Links</strong><br />

Einträge wird im i-node verwaltet. Die Anzahl spiegelt sich auch im langen Listing wider,<br />

denn neben der Rechtemaske steht jetzt eine 2 statt der sonst üblichen 1:<br />

~/auto>ls -l kuend-vers.txt<br />

-rw-r--r-- 2 fritz users 3493 Dec 8 11:23 kuend-vers.txt<br />

Beim ” Löschen einer Datei“ mittels rm wird tatsächlich nur ein Directory-Eintrag (Link)<br />

gelöscht. Hat die Datei noch weitere Einträge, so wird sie gar nicht gelöscht, sondern es wird<br />

nur der Link Counter vermindert. Erst wenn dieser durch ein rm auf 0 gesetzt wird, wird die<br />

Datei tatsächlich gelöscht. Der zu rm äquivalente Systemaufruf, den man zum selben Zweck<br />

aus einem C-Programm heraus verwendet, trägt auch den passenderen Namen unlink().<br />

Ein Directory-Eintrag besteht aus genau zwei Teilen: dem Dateinamen <strong>und</strong> der Nummer<br />

des i-nodes. Die i-node-Nummer einer Datei wird von ls angezeigt, wenn man die Option<br />

-i mitgibt:<br />

~>ls -i kuend-vers.txt<br />

25523 kuend-vers.txt<br />

Ob zwei Directory-Einträge dieselbe Datei bezeichnen, kann man lediglich durch Vergleich<br />

der i-node-Nummern feststellen. Falls sich die weiteren <strong>Links</strong> auf eine Datei in Verzeichnissen<br />

befinden, auf die man kein Leserecht hat, so ist es unmöglich, diese zu finden. Damit<br />

das Finden nicht zu kompliziert wird, gibt es bei find die Möglichkeit, eine Datei aufgr<strong>und</strong><br />

ihrer i-node-Nummer zu suchen (-inum nr ).<br />

Einen zusätzlichen Link auf eine Datei erzeugt man mit dem Kommando ln. Die Syntax<br />

entspricht prinzipiell der von mv <strong>und</strong> cp, d. h. es wird neben dem Kommando der Name der<br />

bestehenden Datei angegeben <strong>und</strong> als nächstes Argument der ” neue“ Name. Früher gab es<br />

lediglich diese Art von <strong>Links</strong>. Da es inzwischen auch die symbolischen <strong>Links</strong> gibt (s. u.),<br />

werden sie zur Klarheit auch ” hard links“ genannt.<br />

2.3 Symbolische <strong>Links</strong><br />

Da ” hard links“ lediglich über die i-node-Nummer erzeugt werden, können sie keine Dateisystem-Grenzen<br />

überschreiten, d. h. alle <strong>Links</strong> zu einer Datei müssen sich auf demselben<br />

Datenträger (Diskette, Festplattenpartition) befinden, denn die Nummerierung der i-nodes<br />

fängt bei jedem Dateisystem wieder von vorn an.<br />

Außerdem können ” hard links“ nicht auf Directories existieren. Um auch <strong>Links</strong> über<br />

Dateisystemgrenzen hinweg <strong>und</strong> auf Directories erzeugen zu können, wurden die symbolischen<br />

<strong>Links</strong> erf<strong>und</strong>en.<br />

2.3.1 Bedeutung symbolischer <strong>Links</strong><br />

Ein symbolischer Link ist eine eigene Datei, die unabhängig von der Datei existieren kann,<br />

auf die er zeigt. Dazu bedarf es eines besonderen Dateityps, den man im langen Listing am<br />

5


2.3 Symbolische <strong>Links</strong> 2 LINKS<br />

l in der ersten Spalte erkennen kann (bei gewöhnlichen Dateien steht dort -, bei Directories<br />

d).<br />

Der Inhalt einer Link-Datei besteht aus dem (absoluten oder relativen) Pfad auf das<br />

Ziel, also nur aus wenigen Bytes. Die Angaben über Eigentümer, Gruppe <strong>und</strong> Rechte sowie<br />

Datumsangaben haben bei symbolischen <strong>Links</strong> keine Bedeutung <strong>und</strong> werden schlicht ignoriert.<br />

Jeder Lese- <strong>und</strong> Schreib-Zugriff auf einen symbolischen Link ist identisch mit einem<br />

Zugriff auf die Zieldatei. Ein symbolischer Link kann auch auf einen anderen symbolischen<br />

Link zeigen, der auf eine Datei zeigt. Wie oft diese Verkettung möglich ist, hängt von der<br />

Konfiguration des Systems ab. Symbolische <strong>Links</strong> werden ebenfalls mit dem Kommando<br />

ln angelegt, man muss dazu lediglich die Option -s benutzen. Im langen Listing werden<br />

sie gemeinsam mit ihrem Ziel angezeigt:<br />

~/versicherung> ln -s ../auto/kuend-vers.txt kuend-auto.txt<br />

~/versicherung> ll<br />

lrwxrwxrwx 1 [...] Dec 8 13:31 kuend-auto.txt -> ../auto/kuend-vers.txt<br />

Hier wird im Verzeichnis versicherung ein symbolischer Link angelegt, der auf einen relativen<br />

Pfad ../auto <strong>und</strong> dort auf die Datei (oder das Verzeichnis) kuend-vers.txt zeigt.<br />

Hierzu ist weder die Existenz des Verzeichnisses /auto noch die der Datei kuend-vers.txt<br />

notwendig. Falls sie nicht existieren, bekommt man beim Zugriffsversuch eine entsprechende<br />

Fehlermeldung, die sich aber auf die Link-Datei bezieht (hier: kuend-auto.txt: Datei<br />

oder Verzeichnis nicht gef<strong>und</strong>en).<br />

Das Löschen eines symbolischen <strong>Links</strong> bewirkt allerdings kein Löschen der Datei, sondern<br />

dann wird der symbolische Link entfernt. Auf einen symbolischen Link können durchaus<br />

auch mehrere ” hard links“ existieren, von solchen Konstellationen ist aber wegen mangelnder<br />

Übersichtlichkeit abzuraten.<br />

Da symbolische <strong>Links</strong> auch auf Verzeichnisse existieren können, kann das find-Kommando<br />

in eine Endlosschleife geraten, wenn ein Link auf ein übergeordnetes Verzeichnis<br />

zeigt. Aus diesem Gr<strong>und</strong> ignoriert find symbolische <strong>Links</strong> auf Verzeichnisse, sofern es nicht<br />

ausdrücklich mit der Option -L dazu aufgefordert wird, ihnen zu folgen.<br />

Von symbolischen <strong>Links</strong> wird auch bei der Systemadministration ausgiebig Gebrauch<br />

gemacht. Schauen Sie beispielsweise einmal ins Verzeichnis /etc/init.d/rc3.d. Es enthält<br />

ausschließlich symbolische <strong>Links</strong>. Das Verzeichnis /etc/rc.d ist übrigens auch ein<br />

symbolischer Link, der auf /etc/init.d zeigt.<br />

2.3.2 Rechtevergabe bei <strong>Links</strong><br />

Wie bereits oben erwähnt, haben die Rechteangaben bei <strong>Links</strong> keinerlei Bedeutung. Daher<br />

wird bei den meisten Unix-Systemen auch direkt die Rechtemaske der Zieldatei geändert,<br />

wenn man ein chmod-Kommando auf einen symbolischen Link erfolgreich anwendet. Auch<br />

hier ist damit die Verwendung eines symbolischen <strong>Links</strong> von gleicher Wirkung wie die<br />

Verwendung der Zieldatei selbst.<br />

6


2 LINKS 2.3 Symbolische <strong>Links</strong><br />

Übungen hierzu finden Sie im Wissensportal unter Betriebssysteme, Praktische Übungen,<br />

Unix-Kommandos, Datei-Management II, K-XI,<br />

https://www.bg.bib.de/tiki-index.php?page=BES-Uebungen-Unix-Kommandos<br />

$Id: <strong>Dateisysteme</strong>_<strong>Links</strong>.tex,v 932efe55f43c 2009/06/18 10:03:42 bibjah $<br />

7

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!