HOWTO zu UNIX-Links
(C) 2007 T.Birnthaler/H.Gottschalk <howtos(at)ostc.de>
OSTC GmbH, www.ostc.de
$Id: unix-links-HOWTO.txt,v 1.4 2008-12-22 15:39:06 tsbirn Exp $
Dieses Dokument beschreibt Eigenschaften und Einsatzzweck von Links unter UNIX.
1) Übersicht
2a) Hard-Link (Name + I-Node-Nummer)
2b) Inode ("Index-Knoten", mit Datei-Attributen)
2c) Datei-Inhalt
3) Zwecke von Links
4) Die beiden Link-Arten
5) Vergleich mit Windows
Eine Datei setzt sich unter UNIX aus 3 Komponenten zusammen, die auch an 3
verschiedenen Stellen im UNIX-Dateisystem abgelegt werden:
+--------------+
Verzeichnis | ... 55 | Liste von Dateinamen +
| gedicht 123 +-+ zugehörige Inode-Nummer
| ... 987 | |
+--------------+ |
| Hard-Link
+--------+
|
v
...+-----+-----+-----+...
Inode-Tabelle | 122 | 123 | 124 | Jeder Inode enthält einen
(numeriert) | 1 | 1 | 3 | "Zähler", der die Anzahl der
...+-----+-----+-----+... Hard-Links auf den Inode zählt
| | |
| | +----+
+----+ | |
v v v
Datenblöcke ...+---+ +---+ +---+...
Datei-Inhalt | | | | | | Feste Größe, meist 1-16KByte
(Records) ...+---+ +---+ +---+...
In jedem Verzeichnis ist nur eine Liste sogenannter "Hard-Links" bestehend
aus Dateiname + I-Node-Nummer eingetragen. Diese verbinden den Dateinamen
mit der zugehörigen Verwaltungsstruktur namens "I-Node" (Index Node). Es
kann mehr als einen Hard-Link auf die gleiche Datei geben, jeder Inode zählt
intern mit, wieviele Hard-Links auf ihn zeigen.
Der I-Node enthält (bis auf den Namen und den Datei-Inhalt) alle für eine
Datei relevanten Informationen. Er zeigt weiterhin auf die Datenblöcke,
in denen der Inhalt der Datei steht oder die auf weitere Datenblöcke zeigen
(direkte und 1/2/3-fach indirekte Verweise).
* Dateityp
* Geräte-Nummer
* Zugriffsrechte
* Anzahl Hard-Links
* Besitzer
* Besitzergruppe
* Dateigröße
* Datum
+ Access: Letzter lesender/schreibender Zugriff
+ Modify: Letzte Änderung am Inhalt = Datenblöcke
+ Change: Letzte Änderung am Inode = Attribute
* Direkte Verweise auf Datenblöcke
* Indirekte Verweise auf Datenblöcke
+ Einfach indirekt
+ Zweifach indirekt
+ Dreifach indirekt
Datenblöcke mit Datei-Inhalt verstreut über das Dateisystem.
Beispiel
--------
* Aktuelles Verzeichnis ist "/home/tom/".
* Im Verzeichnis gibt es 2 Hard-Links namens "gedicht" und "gedicht2"
auf die gleiche Datei.
* Weiterhin gibt es darin 1 Symbolischen Link namens "symlink",
der auf "gedicht" zeigt.
Verzeichnis-(Liste) Inode-Tabelle Daten-Blöcke
Name Nr Nr Inode
+----------+-----+ +------+ +-------------------+
#=> HL1 | gedicht | 175 |--+ ... | ... | +-> | DIE MADE... |
X +----------+-----+ | +------+ | +-------------------+
X HL2 | gedicht2 | 175 |--+--> 175 | Attr |--+-> | ... |
X +----------+-----+ +------+ +-------------------+
X | test | 510 |-----> ... | ... | +-> | /home/tom/gedicht |==#
X +----------+-----+ +------+ | +-------------------+ X
X SL1 | symlink | 231 |-----> 231 | Attr |--+ | ... | X
X +----------+-----+ +------+ +-------------------+ X
X | doku | 012 |-----> ... | ... |--+-> | ... | X
X +----------+-----+ +------+ | +-------------------+ X
X ... | ... | +-> | ... | X
X +------+ +-------------------+ X
X X
#=========================================================================#
Symbolischer Link
* Immer den gleichen Namen für ein Gerät zur Verfügung stellen, egal welche
konkrete Hardware dahinter steckt (Bsp: "/dev/mouse").
* Für den schnellen Zugriff in Benutzer-Verzeichnissen die "Kopie" einer (tief)
verschachtelten Datei dort ablegen.
* Plattenplatz sparen, wenn die gleiche Datei mehrfach im Dateisystem vorkommen
soll (Verweise statt Kopien).
* Schreibfehler oder Namensänderungen wegen FHS (File Hierarchy Standard)
abfangen (YaST = yast = zast, conf.modules = modules.conf).
* Konsistenz erhalten bei Versionierung, Updates, Konfigurationsdateien
(Bsp: /usr/src/linux -> linux-2.2.5.SuSE).
* UNIX-Besonderheit: Das gleiche Programm/Skript kann unter verschiedenen Namen
referenziert werden und verhält sich dann je nach Name, unter dem es
aufgerufen wird, verschieden (Bsp: mv = cp = ln, mkfs.ext2 = mke2fs).
Beispiele für mehrere Namen für die gleiche Datei sind:
| UNIX | Kommandos | Grund |
+------------+-----------------------------+-------------------------------+
| SuSE-Linux | Yast2 yast2 zast yast1 yast | Schreibfehler abfangen |
| Solaris | cp mv ln | Programmierung erleichtern |
| Linux | gunzip gzip zcat | Programmierung erleichtern |
| Solaris | /usr/ucb/ps /usr/bin/ps | BSD + SYSV-Verhalten gleichz. |
+------------+-----------------------------+-------------------------------+
UNIX unterscheidet 2 Arten von Links, die aber beide für den gleichen Zweck
eingesetzt werden, nämlich mehr als einen Namen für eine Datei zur Verfügung
zu stellen:
* Hard-Links (Physikalische Links)
* Soft-Links (Symbolische Links)
Hard-Links gibt es wie --- oben beschrieben --- für jede Datei mindestens
einen, sie sind aber in einigen Punkten eingeschränkt (z.B. nur innerhalb
einer Partition einsetzbar). Soft-Links werden zusätzlich angelegt und sind
mit HTML-Links oder Windows-Verknüpfungen zu vergleichen (Verweis per URL
= Name auf eine andere HTML-Seite). Erst beim Zugriff über einen Soft-Link
kann festgestellt werden, ob das Ziel existiert. Die beiden Link-Typen können
folgendermaßen charakterisiert werden:
| | Hard | Soft |
| | Physical | Logical |
+---------------------------------------------------+----------+---------+
| Referenz per | I-Node | Name |
| Anzahl Links auf Datei bekannt | ja | nein |
| Über Partitionen hinweg möglich | nein | ja |
| Ziel kann ein Verzeichnis sein | nein | ja |
| Rekursion möglich (Verz. enthält sich selbst) | nein | ja |
| Ziel muß existieren (kann nicht ins Leere zeigen) | ja | nein |
| Geschwindigkeit | schnell | langsam |
| Unter WINDOWS vorhanden (Verknüpfung) | nein | ja |
+---------------------------------------------------+----------+---------+
Soft-Links gibt es unter Windows nur in Form der "Desktop-Icons" = Verweise
auf Programme, Daten oder Verzeichnisse. Allerdings können diese wirklich nur
auf dem Desktop liegen, innerhalb von Verzeichnissen sind sie nicht möglich.
D.h. auch dieser Link-Typ ist unter Windows nur sehr eingeschränkt verfügbar.
Hard-Links gibt es unter Windows erst ab dem Dateisystem NTFS, es gibt
aber keine Schnittstelle (Kommandos oder grafische Oberflächen), um sie von
Anwenderseite aus anzusprechen.