Dateisysteme und Links Holger Jakobs bibjah@bg.bib.de, holger@jakobs.com 2009-06-18 Inhaltsverzeichnis 1 UNIX-Dateisysteme 1 1.1 Einhängen von Datenträgern.......................... 2 1.2 Netzlaufwerke.................................. 3 2 Links 3 2.1 Woraus besteht eine Datei?.......................... 3 2.2 Hard Links.................................. 4 2.3 Symbolische Links............................... 5 2.3.1 Bedeutung symbolischer Links..................... 5 2.3.2 Rechtevergabe bei Links........................ 6 1 UNIX-Dateisysteme In einem UNIX-System gibt es nur einen einzigen Verzeichnisbaum (im Gegensatz zu Windows und Macintosh, wo es mehrere mit Buchstaben versehene Laufwerke bzw. mehrere Volumes gibt). Über diesen Verzeichnisbaum greift man auf alle angeschlossenen Datenträger zu. Hierzu werden die einzelnen Datenträger (z. B. Disketten, Festplattenpartitionen, CDs) in den Verzeichnisbaum eingehängt (gemountet), siehe Abbildung 1. Dieses Einhängen (und auch das Abhängen) darf im allgemeinen nur vom Systemverwalter (root) durchgeführt werden (d. h. sofern es nicht ausdrücklich den gewöhnlichen Benutzern erlaubt wurde). / bin cdrom etc home tmp usr anna berta hugo bin include Abbildung 1: Beispiel für einen UNIX-Verzeichnisbaum 1
1.1 Einhängen von Datenträgern 1 UNIX-DATEISYSTEME Als gewöhnlicher Benutzer bemerkt man nicht, ob und wenn ja, welche Teile des Dateibaums nicht zum Root-Dateisystem gehören. Das Root-Dateisystem ist das, was am Root-Verzeichnis beginnt. Dieses wird beim Systemstart als erstes gemountet. In der Datei /etc/fstab steht, welche weiteren Dateisysteme vorhanden sind und ggf. auch automatisch beim Rechnerstart eingehängt werden. Häufig sind die Verzeichnisse /usr, /var, /tmp und/oder /home (mit ihren Unterverzeichnissen) auf anderen Festplattenpartitionen enthalten. Ob das so ist, stellen wir mit Hilfe von mount fest: ~>mount /dev/sda2 on / type ext4 (rw) /dev/sda7 on /usr type ext4 (rw) Hier ist also das Root-Dateisystem auf der Festplattenpartition /dev/sda2 vorhanden, das Dateisystem der Partition /dev/sda7 dagegen an der Position /usr eingehängt. Beide sind vom Typ ext4, dem aktuellen Standard-Dateisystem bei manchen Linux-Distributionen, und beschreibbar. (rw = read/write). Die meisten Geräte bei einem Unix-System haben einen sogenannten Gerätedatei-Eintrag im Verzeichnis dev (device = Gerät). Beim gegenwärtigen Linux haben die (SATA- und SCSI-)Festplatten die Gerätebezeichnungen sd (sata bzw. scsi disk), gefolgt von einem Buchstaben (a = erste Platte, b = zweite Platte usw.), die älteren IDE-Platten heißen hd (hard disk) statt sd. Die einzelnen Partitionen der Platte sind dann durchnummeriert. Eine Platte hat bis zu vier primäre Partitionen mit den Nummern 1 bis 4, weitere sind dann sekundäre Partitionen, die innerhalb einer erweiterten Partition existieren können. Die sekundären Partitionen tragen die Nummern ab 5. Die Partitionierung einer Festplatte führt man mit dem Programm fdisk durch. Bei den hier verwendeten Partitionen handelt es sich also um die zweite primäre Partition auf der ersten Festplatte, die auf / gemountet ist, und um die dritte sekundäre Partition derselben Platte, die auf /usr gemountet ist. Ob es andere Platten und Partitionen gibt, wissen wir nicht zumindest werden sie derzeit nicht verwendet. 1.1 Einhängen von Datenträgern Wenn man in das CD-Laufwerk des Rechners eine CD einlegt, so steht diese nicht unmittelbar zur Verfügung sondern erst, nachdem man diese ins Dateisystem eingehängt hat (Kommando mount /dev/cdrom /cdrom ). Solange sie gemountet bleibt, kann man das CD-Laufwerk auch nicht öffnen. Erst wenn man sie wieder abgehängt hat (Kommando umount /cdrom), kann man die Schublade wieder öffnen. Nach dem Mounten der CD sieht der Verzeichnisbaum aus wie in Abbildung 2 auf der nächsten Seite. Die evtl. vorhandenen Inhalte des Verzeichnisses cdrom im Root-Dateisystem werden durch den gemounteten Datenträger verdeckt. Nach dem Abhängen des Datenträgers werden sie wieder sichtbar. Mittels des Kommandos eject /dev/cdrom kann man das Dateisystem abhängen und anschließend die Schublade öffnen (z. B. bei Linux). 2
2 LINKS 1.2 Netzlaufwerke / bin cdrom etc home tmp usr anna berta hugo bin include index.html movie werb Dateisystem der CD Abbildung 2: UNIX-Verzeichnisbaum mit gemountetem CD-Laufwerk 1.2 Netzlaufwerke Die in einen Dateibaum einzuhängenden Verzeichnisse (im obigen Fall das Root-Verzeichnis der CD) müssen nicht auf demselben Rechner liegen. Wenn ein Rechner ein Verzeichnis exportiert (was über Einträge in der Datei /etc/exports geschieht), dann können andere Rechner dieses Verzeichnis wie einen Datenträger in ihren eigenen Verzeichnisbaum einhängen. Dies geschieht über NFS (network file system), das von Sun für Unix entwickelt wurde, oder über SMB (server message block), das von Microsoft für Windows entwickelt wurde, inzwischen aber auch von Unix-Systemen verwendet wird. Eine Freigabe über SMB verlangt allerdings die Installation des Samba-Servers, der eine eigene Konfigurationsdatei besitzt. Übers Netz eingehängte Dateisysteme werden von mount so angezeigt (verkürzt): ~>mount ux-02:/raid0/users on /users type nfs (rw) //ux-02/users on /home/users type smbfs Hier wird vom Rechner ux-02 das exportierte Verzeichnis /raid0/users in unseren Verzeichnisbaum als Verzeichnis /users eingehängt. Der Typ ist nfs. Die zweite Zeile zeigt, wie ein über SMB eingehängtes Verzeichnis aussieht, daher auch der Typ smbfs. 2 Links 2.1 Woraus besteht eine Datei? Eine Datei besteht bei Unix aus mehreren Teilen. Diese sind: 3
2.2 Hard Links 2 LINKS 1. i-node: Der i-node (information node) zu einer Datei enthält alle Verwaltungsinformationen zur Datei, als da wären: ˆ Dateityp (u. a. gewöhnliche Datei oder Directory) ˆ Link Counter (Erläuterung folgt weiter unten) ˆ Verweis auf die Datenblöcke ˆ Eigentümer- und Gruppen-Nummer ˆ Dateigröße ˆ Dateirechte ˆ Datumsangaben 2. Datenblöcke 3. mindestens 1 Directory-Eintrag Beim Erzeugen einer Datei werden zumindest i-node und Directory-Eintrag erzeugt. Datenblöcke kommen erst dann hinzu, wenn wirklich Daten vorliegen, d. h. die Größe mehr als 0 Bytes beträgt. 2.2 Hard Links Der Hinweis, dass eine Datei mindestens 1 Directory-Eintrag hat, lässt den Schluss zu, dass sie auch mehrere haben kann. Ein Directory-Eintrag für eine Datei wird auch als Link bezeichnet, und von diesen kann eine Datei tatsächlich mehrere haben. Möchte man die Kündigung seiner Autoversicherung sowohl im Verzeichnis auto als auch im Verzeichnis versicherung ablegen, so erzeugt man für die Datei einfach einen zweiten Link. Das sieht dann so aus: Es gibt zwei Directories. Jedes von diesen enthält einen Eintrag. Die Einträge zeigen beide auf denselben i-node. Im i-node stehen alle weiteren Informationen über die Datei einschließlich der Zeiger auf die Datenblöcke. Es gibt also ausdrücklich nur einen Eigentümer, eine Rechtemaske usw., denn es handelt sich um eine Datei, die lediglich zwei Einträge im Verzeichnisbaum hat. Im Gegensatz zu anderen Dateisystemen gibt es bei Unix keine exakte Übereinstimmung zwischen der Anzahl Dateien und der Anzahl der Einträge im Verzeichnisbaum, sondern jede Datei kann im Verzeichnisbaum mehrfach eingetragen sein. kuend vers.txt i node auto owner= fritz link counter=2... usw. $HOME größe=3493 versicherung kuend auto.txt Daten block Nach der Erzeugung des weiteren Links gibt es keinen Unterschied mehr zwischen diesen, d. h. es gibt kein Original und keine Kopie, denn alle Links zu einer Datei sind völlig gleichwertig. Die als Pfeile eingezeichneten Verweise sind tatsächlich unidirektional, d. h. es gibt keinen Verweis vom i-node zu seinen Verzeichniseinträgen. Lediglich die Anzahl der Daten block 4
2 LINKS 2.3 Symbolische Links Einträge wird im i-node verwaltet. Die Anzahl spiegelt sich auch im langen Listing wider, denn neben der Rechtemaske steht jetzt eine 2 statt der sonst üblichen 1: ~/auto>ls -l kuend-vers.txt -rw-r--r-- 2 fritz users 3493 Dec 8 11:23 kuend-vers.txt Beim Löschen einer Datei mittels rm wird tatsächlich nur ein Directory-Eintrag (Link) gelöscht. Hat die Datei noch weitere Einträge, so wird sie gar nicht gelöscht, sondern es wird nur der Link Counter vermindert. Erst wenn dieser durch ein rm auf 0 gesetzt wird, wird die Datei tatsächlich gelöscht. Der zu rm äquivalente Systemaufruf, den man zum selben Zweck aus einem C-Programm heraus verwendet, trägt auch den passenderen Namen unlink(). Ein Directory-Eintrag besteht aus genau zwei Teilen: dem Dateinamen und der Nummer des i-nodes. Die i-node-nummer einer Datei wird von ls angezeigt, wenn man die Option -i mitgibt: ~>ls -i kuend-vers.txt 25523 kuend-vers.txt Ob zwei Directory-Einträge dieselbe Datei bezeichnen, kann man lediglich durch Vergleich der i-node-nummern feststellen. Falls sich die weiteren Links auf eine Datei in Verzeichnissen befinden, auf die man kein Leserecht hat, so ist es unmöglich, diese zu finden. Damit das Finden nicht zu kompliziert wird, gibt es bei find die Möglichkeit, eine Datei aufgrund ihrer i-node-nummer zu suchen (-inum nr ). Einen zusätzlichen Link auf eine Datei erzeugt man mit dem Kommando ln. Die Syntax entspricht prinzipiell der von mv und cp, d. h. es wird neben dem Kommando der Name der bestehenden Datei angegeben und als nächstes Argument der neue Name. Früher gab es lediglich diese Art von Links. Da es inzwischen auch die symbolischen Links gibt (s. u.), werden sie zur Klarheit auch hard links genannt. 2.3 Symbolische Links Da hard links lediglich über die i-node-nummer erzeugt werden, können sie keine Dateisystem-Grenzen überschreiten, d. h. alle Links zu einer Datei müssen sich auf demselben Datenträger (Diskette, Festplattenpartition) befinden, denn die Nummerierung der i-nodes fängt bei jedem Dateisystem wieder von vorn an. Außerdem können hard links nicht auf Directories existieren. Um auch Links über Dateisystemgrenzen hinweg und auf Directories erzeugen zu können, wurden die symbolischen Links erfunden. 2.3.1 Bedeutung symbolischer Links Ein symbolischer Link ist eine eigene Datei, die unabhängig von der Datei existieren kann, auf die er zeigt. Dazu bedarf es eines besonderen Dateityps, den man im langen Listing am 5
2.3 Symbolische Links 2 LINKS l in der ersten Spalte erkennen kann (bei gewöhnlichen Dateien steht dort -, bei Directories d). Der Inhalt einer Link-Datei besteht aus dem (absoluten oder relativen) Pfad auf das Ziel, also nur aus wenigen Bytes. Die Angaben über Eigentümer, Gruppe und Rechte sowie Datumsangaben haben bei symbolischen Links keine Bedeutung und werden schlicht ignoriert. Jeder Lese- und Schreib-Zugriff auf einen symbolischen Link ist identisch mit einem Zugriff auf die Zieldatei. Ein symbolischer Link kann auch auf einen anderen symbolischen Link zeigen, der auf eine Datei zeigt. Wie oft diese Verkettung möglich ist, hängt von der Konfiguration des Systems ab. Symbolische Links werden ebenfalls mit dem Kommando ln angelegt, man muss dazu lediglich die Option -s benutzen. Im langen Listing werden sie gemeinsam mit ihrem Ziel angezeigt: ~/versicherung> ln -s../auto/kuend-vers.txt kuend-auto.txt ~/versicherung> ll lrwxrwxrwx 1 [...] Dec 8 13:31 kuend-auto.txt ->../auto/kuend-vers.txt Hier wird im Verzeichnis versicherung ein symbolischer Link angelegt, der auf einen relativen Pfad../auto und dort auf die Datei (oder das Verzeichnis) kuend-vers.txt zeigt. Hierzu ist weder die Existenz des Verzeichnisses /auto noch die der Datei kuend-vers.txt notwendig. Falls sie nicht existieren, bekommt man beim Zugriffsversuch eine entsprechende Fehlermeldung, die sich aber auf die Link-Datei bezieht (hier: kuend-auto.txt: Datei oder Verzeichnis nicht gefunden). Das Löschen eines symbolischen Links bewirkt allerdings kein Löschen der Datei, sondern dann wird der symbolische Link entfernt. Auf einen symbolischen Link können durchaus auch mehrere hard links existieren, von solchen Konstellationen ist aber wegen mangelnder Übersichtlichkeit abzuraten. Da symbolische Links auch auf Verzeichnisse existieren können, kann das find-kommando in eine Endlosschleife geraten, wenn ein Link auf ein übergeordnetes Verzeichnis zeigt. Aus diesem Grund ignoriert find symbolische Links auf Verzeichnisse, sofern es nicht ausdrücklich mit der Option -L dazu aufgefordert wird, ihnen zu folgen. Von symbolischen Links wird auch bei der Systemadministration ausgiebig Gebrauch gemacht. Schauen Sie beispielsweise einmal ins Verzeichnis /etc/init.d/rc3.d. Es enthält ausschließlich symbolische Links. Das Verzeichnis /etc/rc.d ist übrigens auch ein symbolischer Link, der auf /etc/init.d zeigt. 2.3.2 Rechtevergabe bei Links Wie bereits oben erwähnt, haben die Rechteangaben bei Links keinerlei Bedeutung. Daher wird bei den meisten Unix-Systemen auch direkt die Rechtemaske der Zieldatei geändert, wenn man ein chmod-kommando auf einen symbolischen Link erfolgreich anwendet. Auch hier ist damit die Verwendung eines symbolischen Links von gleicher Wirkung wie die Verwendung der Zieldatei selbst. 6
2 LINKS 2.3 Symbolische Links Übungen hierzu finden Sie im Wissensportal unter Betriebssysteme, Praktische Übungen, Unix-Kommandos, Datei-Management II, K-XI, https://www.bg.bib.de/tiki-index.php?page=bes-uebungen-unix-kommandos $Id: Dateisysteme_Links.tex,v 932efe55f43c 2009/06/18 10:03:42 bibjah $ 7