Dateisysteme und Links
Dateisysteme und Links
Dateisysteme und Links
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