Hallo, Am Die, 08 Aug 2006, Andre Tann schrieb:
Worin unterscheidet sich der erste von allen weiteren Henkeln?
Gar nicht. Eine Datei ist: - Ein Verzeichniseintrag mit der Zuordnung: Name => Inode-Nummer - Der Inode mit allen Metadaten _außer_ dem Namen sowie die eigentlichen Daten Ein 'ln foo bar' ist nur eine Methode einem Inode einen weiteren Namen zu geben. Es wird dabei ausschließlich der Verzeichniseintrag erstellt und der Link-Count im Inode um eins erhöht. Bei einem 'rm' wird intern "nur" ein 'unlink(2)' aufgerufen. Und wenn der Link-Count 0 ist _UND_ wenn kein offener Dateihandle mehr auf die Datei verweist, dann wird der Inode freigegeben. ==== man 2 unlink ==== unlink deletes a name from the filesystem. If that name ^^^^^^^(!) was the last link to a file and no processes have the file open the file is deleted and the space it was using is made available for reuse. If the name was the last link to a file but any processes still have the file open the file will remain in existence until the last file descriptor referring to it is closed. ==== Du kannst dir das so vorstellen: Das Dateisystem ist ein grosser Raum mit sehr vielen Schubladenschränken. Jede Schublade ist ein Inode wobei außen an der Lade groß die Inode-Nummer steht sowie klein die diversen Metainformation (aber kein Name!), v.a. aber auch der Link-Count. Wie findest du nun eine Datei? Und was sind Verzeichnisse? Die Inodes sind durchnummeriert, und einer ist noch als oberstes Verzeichnis gekennzeichnet (via Superblock des Dateisystems), stell es dir als großen Pfeil vor ;). Wenn du nun die Schublade des Verzeichnisses öffnest findest du als Inhalt ein Tabelle in der Name => Inodenummer (auch die der Unterverzeichnisse) steht. Über die Unterverzeichnisse kannst du dich zu jedem Namen durchhangeln. Irgendwann findest du dann die Tabelle mit dem gesuchten Dateinamen und somit die Inodenummer der richtigen Schublade mit den Daten. Und ein Hardlink ist einfach ein weiterer Eintrag in irgendeiner der Verzeichnistabellen. Und vielleicht kannst du dir jetzt eher vorstellen, daß es vollkommen irrelevant ist, in welchen und in wievielen (Verzeichnis-)Schubladen ein Tabelleneintrag mit ein und dem selben Inode steht. Und unter welchem Namen jeweils auf einen Inode verwiesen wird. Aber: jedesmal wenn man einen Eintrag in eine der Verzeichnistabellen einträgt muß man auch im Inode den Link-Count erhöhen bzw. beim Löschen erniedrigen... HTH, -dnh -- Wenn du beim Autofahren ein "komisches Geraeusch" hoerst und stehenbleibst (ohne das Geraeusch naeher identifizieren zu koennen!), dann schraubst du ja auch nicht einfach mal auf Verdacht an der Nockenwelle rum, wenn's doch nur am leeren Tank liegen koennte!