Eine feste Verbindung ist als Zeiger auf eine Inode definiert. Ein Softlink , der auch als symbolischer Link bezeichnet wird , ist eine unabhängige Datei, die auf einen anderen Link verweist, ohne die Einschränkungen fester Links.
Was ist der Unterschied zwischen einer Datei und einem festen Link? Ein fester Link verweist auf eine Inode. Was ist also eine Datei? Der Inode-Eintrag selbst? Oder eine Inode mit einem harten Link?
Angenommen, ich erstelle eine Datei mit Touch. Dann wird ein Inode-Eintrag in der Inode-Tabelle erstellt . Und ich erstelle einen festen Link, der die gleiche Inode-Nummer wie die Datei hat. Also habe ich eine neue Datei erstellt? Oder ist die Datei nur als Inode definiert?
files
filesystems
symlink
hard-link
Levent Divilioglu
quelle
quelle
Antworten:
Die sehr kurze Antwort lautet:
Unix-Dateien und -Verzeichnisse funktionieren genau wie Dateien und Verzeichnisse in der realen Welt (und nicht wie Ordner in der realen Welt). Unix-Dateisysteme sind (konzeptionell) wie folgt aufgebaut:
Unter Berücksichtigung dieser Metapher und insbesondere unter Berücksichtigung der Tatsache, dass Unix-Verzeichnisse wie echte Verzeichnisse und nicht wie echte Ordner funktionieren , werden viele der "Merkwürdigkeiten" erklärt, auf die Neulinge häufig stoßen. Sie haben keinen Schreibzugriff auf? Zum einen löschen Sie nicht die Datei, sondern einen von vielen möglichen Namen für die Datei. Dazu benötigen Sie nur Schreibzugriff auf das Verzeichnis, nicht auf die Datei. Genau wie in der realen Welt.
Oder warum kann ich baumelnde Symlinks haben? Nun, der Symlink enthält einfach einen Pfadnamen. Es gibt nichts, was besagt, dass es tatsächlich eine Datei mit diesem Namen geben muss.
Der Unterschied zwischen einer Datei und einem festen Link ist der gleiche wie der Unterschied zwischen Ihnen und der Zeile mit Ihrem Namen im Telefonbuch.
Eine Datei ist ein anonymes Datenelement. Das ist es. Eine Datei ist kein inode, eine Datei hat eine Inode, so wie du kein Sozialversicherungsnummer sind, Sie haben eine SSN.
Ein fester Link ist ein Name für eine Datei. Eine Datei kann viele Namen haben.
Ja.
Ein fester Link hat keine Inode-Nummer, da es sich nicht um eine Datei handelt. Nur Dateien haben Inode-Nummern.
Der Hardlink verknüpft einen Namen mit einer Inode-Nummer.
Ja.
Nein. Die Datei hat einen Inode, es ist kein Inode.
quelle
Ein fester Link ist ein Verzeichniseintrag. Eine Datei kann mehrere Verzeichniseinträge haben, wenn sie unter verschiedenen Namen oder in verschiedenen Verzeichnissen vorhanden ist. Ein Verzeichniseintrag wird als "fester Link" bezeichnet, wenn er mit anderen Verzeichniseinträgen für dieselbe Datei in Beziehung gesetzt wird.
Der Inode enthält die Metadaten der Datei mit Ausnahme des Namens und des Inhalts (Speicherort des Inhalts, Berechtigungen, Zeitstempel usw.). Es gibt eine Inode pro Datei. (Nicht bei allen Dateisystemen befinden sich die Metadaten in einem eindeutig identifizierbaren Bereich auf der Festplatte, den Sie als "Inode" bezeichnen können. Es handelt sich jedoch um eine allgemeine Architektur.) Ein Verzeichniseintrag verknüpft einen Namen mit einem Inode. Es ist möglich, dass mehr als ein Verzeichniseintrag auf denselben Inode verweist, daher der Begriff „Link“. Eine solche Verknüpfung wird als "harte Verknüpfung" bezeichnet, wenn sie sich von "weichen Verknüpfungen" oder "symbolischen Verknüpfungen" unterscheidet, die nicht "für diesen Namen diese Inode verwenden", sondern "für diesen Namen diesen anderen Namen nachschlagen".
Stellen Sie sich Dateien als Räume und Verzeichniseinträge als Türen vor. "Öffne die Datei
/foo/bar
" bedeutet "gehe in den Flur/foo
und gehe in den Raumbar
". "Gehe in den Raumbar
" bedeutet wirklich "öffne die Türbar
und betrete den Raum", aber "Gehe in den Raumbar
" ist eine unauffällige Möglichkeit, das Gleiche in kürzerer Form auszudrücken. Es ist möglich, dass mehr als eine Tür zum selben Raum führt.Wenn Sie eine feste Verknüpfung zu einer vorhandenen Datei erstellen (
ln existing new
), erstellen Sie eine zweite Verknüpfung zu derselben Datei, dh, Sie erstellen einen neuen Verzeichniseintrag, der auf die bereits vorhandene Datei verweist. Nach der Erstellung haben die beiden Verzeichniseinträge den gleichen Status: Es gibt keinen "primären" und keinen "sekundären" Verzeichniseintrag, sondern beide verweisen auf dieselbe Datei.Sie können auch alle Links zu einer Datei entfernen, ohne die Datei selbst zu entfernen. Dies passiert, wenn Sie eine Datei löschen (dh wenn Sie alle Verzeichniseinträge entfernen), während ein Programm die Datei noch geöffnet hat. Die Datei verbleibt im Dateisystem und wird erst dann tatsächlich entfernt, wenn der letzte Prozess, bei dem die Datei geöffnet war, sie schließt. In der Raum-und-Türen-Metapher nimmt ein Raum, der keine Türen hat, immer noch Platz ein.
quelle
Neben allen anderen Antworten möchte ich auf folgende wichtige Eigenschaften hinweisen:
Ein Softlink ist eine echte Referenz, dh es ist eine kleine Datei, die einen Pfadnamen enthält. Das Auflösen eines Softlinks geschieht für die Anwendung transparent: Wenn ein Prozess eine Datei öffnet,
/this/path/here
beispielsweise einen Symlink, auf/that/other/path
den verwiesen wird, übernimmt/that/other/path
das Betriebssystem die gesamte Abwicklung des Öffnens . Wenn/that/other/path
es sich um einen Symlink handelt, wird dies auch vom Betriebssystem behandelt. Tatsächlich folgt das Betriebssystem der Kette von Symlinks, bis es etwas anderes findet (z. B. eine reguläre Datei) oder bis es viele Einträge erreichtSYMLOOP_MAX
(siehesysconf(3)
). In diesem Fall gibt das Betriebssystem (genauer: den entsprechenden Systemaufruf) einen Fehler zurück und setzterrno
zuELOOP
. Somit wird ein zirkulärer Verweisxyz -> xyz
den Prozess nicht blockieren. (path_resolution(7)
Einzelheiten zu Linux-Systemen finden Sie unter .)Beachten Sie, dass ein Prozess durch die Verwendung von
lstat(2)
und durchlchown(2)
andere (siehesymlink(7)
für die ganze Geschichte) prüfen kann, ob ein Pfadname ein Symlink ist oder nicht, und seine (in der Inode-Tabelle gespeicherten) Dateiattribute ändern kann .In Bezug auf die Berechtigung werden Sie feststellen, dass Symlinks immer die Berechtigung 777 haben (
rwxrwxrwx
in symbolischer Notation). Dies ist darauf zurückzuführen, dass andere Berechtigungen ohnehin durch Zugriff auf die eigentliche Datei umgangen werden können. Umgekehrt macht 777 für einen Symlink die Symlink-Datei nicht zugänglich, wenn sie überhaupt nicht zugänglich war. Beispielsweise macht ein Symlink mit den Berechtigungen 777, der auf eine Datei mit den Berechtigungen 640 zeigt, die Datei nicht für "andere" (die allgemeine Öffentlichkeit) zugänglich. Mit anderen Worten, auf eine Datei kannxyz
nur dann über einen Symlink zugegriffen werden, wenn sie direkt, dh ohne Indirektion, zugänglich ist. Daher haben die Berechtigungen des Symlinks keinerlei Auswirkungen auf die Sicherheit.Einer der wichtigsten sichtbaren Unterschiede zwischen Hardlinks und Symlinks (auch als Softlinks bezeichnet) besteht darin, dass Symlinks zwischen Dateisystemen funktionieren, während Hardlinks auf ein Dateisystem beschränkt sind. Das heißt, eine Datei auf Partition A kann symbolisch mit Partition B verknüpft werden, aber von dort aus kann keine feste Verknüpfung hergestellt werden. Dies ergibt sich aus der Tatsache, dass ein Hardlink tatsächlich ein Eintrag in einem Verzeichnis ist, das aus einem Dateinamen und einer Inode-Nummer besteht, und dass Inode-Nummern nur pro Dateisystem eindeutig sind.
Der Begriff Hardlink ist eigentlich etwas irreführend. Während für Symlinks Quelle und Ziel klar voneinander zu unterscheiden sind (der Symlink hat einen eigenen Eintrag in der Inode-Tabelle), gilt dies nicht für Hardlinks. Wenn Sie einen Hardlink für eine Datei erstellen, sind der ursprüngliche Eintrag und der Hardlink in Bezug auf das, was zuerst vorhanden war, nicht zu unterscheiden. (Da sie sich auf denselben Inode beziehen, teilen sie ihre Dateiattribute wie Eigentümer, Berechtigungen, Zeitstempel usw.) Dies führt zu der Aussage, dass jeder Verzeichniseintrag tatsächlich ein Hardlink ist und dass das Hardlinken einer Datei nur das Erstellen eines zweiten bedeutet. oder dritter, oder vierter ...) Hardlink. Tatsächlich speichert jeder Inode einen Zähler für die Anzahl der Hardlinks zu diesem Inode.
Beachten Sie schließlich, dass normale Benutzer Verzeichnisse möglicherweise nicht fest verknüpfen. Das liegt daran, dass dies mit äußerster Vorsicht geschehen muss: Ein unachtsamer Benutzer kann Zyklen in den ansonsten streng hierarchischen Dateibaum einführen, auf die alle üblichen Tools (wie
fsck
) und das Betriebssystem selbst nicht vorbereitet sind.quelle
Eine einfache Antwort:
Ein Dateieintrag in einem Verzeichnis ist ein fester Link zu dieser Datei.
Einige Dateien haben mehr als eine solche feste Verknüpfung, da mehrere feste Verknüpfungen zu derselben Datei zulässig sind.
quelle
In den Anfängen von Unix waren die Dateien intern Inodes auf einem bestimmten Laufwerk. Die Dateinamen waren eine benutzerfreundlichere Möglichkeit, auf sie zuzugreifen.
Ein fester Link hat einem Inode mehr als einen Dateinamen zugewiesen. Sie könnten eine Datei erstellen, einen zweiten Namen fest mit dem Namen verknüpfen und den ersten Namen löschen, und es wäre nicht zu unterscheiden, wenn Sie die Datei mit dem zweiten Namen an erster Stelle erstellt hätten.
Der Systemaufruf, den ein Programm zum Löschen einer Datei benötigt, lautet "unlink (2)". Die Daten werden erst gelöscht, wenn der Nachname vom Inode getrennt wurde. (und die inode ist nicht irgendwo durch einen prozess geöffnet)
Dies macht es Linux einfacher, ein Upgrade durchzuführen, während noch Programme ausgeführt werden. Wenn auf einem Prozess eine ausführbare Datei ausgeführt wird und ein Update stattfindet, wird der Programmname erneut verwendet, aber der Inode mit der alten Version ist noch vorhanden, sodass er weiterhin ausgeführt werden kann. Wenn der letzte Prozess, der diese alte Version ausführt, beendet wird, wird der Speicher für diese alte Version freigegeben.
Softlinks sind entstanden, weil Sie bei einem einheitlichen Dateibaum mit mehreren Einhängepunkten keine feste Verbindung von einer Festplatte zu einer Inode auf einer anderen herstellen konnten. So wurden weiche Links erfunden.
quelle
early days
warum ist es jetzt anders? Ihre Antwort scheint diese Ansicht in keiner Weise widerzuspiegeln?Eine Datei sind die auf die Festplatte geschriebenen Daten. Auf diese Daten wird durch ihren Inode verwiesen, der Metadaten über die Datei enthält, die dem System mitteilen, welche Blöcke auf der Festplatte von dieser Datei unter anderem verwendet werden. Ein fester Link verweist auf die Inode-Nummer dieser Datei.
Eigentlich erstellen Sie eine neue Datei, aber diese Datei enthält nur die Inode-Nummer der Datei, auf die sie verweist, und einen Namen. Es ist besser, sich vorzustellen, dass ein Zeiger auf den Inode oder auf die Datei erstellt wird.
quelle
Datei ist ein weit verbreitetes Konzept für Einträge in einem Dateisystem.
Normalerweise enthält es Verzeichnis , reguläre Datei (fester Link) und symbolischen Link (weicher Link). Und kann sogar Gerät und Steckdose enthalten.
Da auch symbolische Links normalerweise als Datei gezählt werden, kann ein fester Link selbst auch als Datei gezählt werden. Sie können sagen, dass es sich um eine Datei handelt, unabhängig davon, ob es sich um einen harten oder einen weichen Link handelt.
Das Konzept ist etwas mehrdeutig, daher kann man auch sagen, dass ein Inode-Eintrag eine Datei ist, obwohl Sie sich möglicherweise tatsächlich auf die Daten beziehen möchten.
Wenn Sie ein C ++ - oder Java-Programmierer sind, sollten Sie sich über std :: filesystem :: file_type , java.io.File und java.nio.file.Files informieren .
Details zu Unterschieden zwischen Hardlink und Softlink finden Sie im Link im Kommentar von infixed.
quelle
Der Unterschied zwischen einer "Datei" mit einem bestimmten Namen und einer "festen Verknüpfung" ist historisch. Eine (reguläre) Datei mit einem bestimmten Namen wird durch einen Aufruf des Erstellungssystems erstellt, eine feste Verknüpfung wird durch einen Aufruf des Verknüpfungssystems erstellt.
Während Menschen über den Verlauf von Verzeichniseinträgen sprechen und sich daran erinnern und sie entsprechend als Dateien und feste Links bezeichnen, tut dies das Dateisystem nicht. Die Verzeichniseinträge von "Originaldatei" und "fester Link" sind in ihrer Qualität völlig ununterscheidbar: Beide stellen eine Referenz zwischen einem Dateinamen und dem Inode einer Datei her, und sobald die letzte solche Referenz weg ist (Referenzen sind nicht nur Dateinamen für Eine Datei, aber auch Dateideskriptoren, mit denen auf eine geöffnete Datei zugegriffen werden kann. Die Datei für den nicht referenzierten Inode wird als gelöscht betrachtet und der Inode und der zugehörige Dateibereich werden zurückgefordert.
Wenn Menschen "Dateien" und "harte Links" gegenüberstellen, entstand das erste mit einer "Linkanzahl von 1" und alle anderen mit einer größeren Linkanzahl. Der Unterschied ist akademisch und das Umbenennen einer Datei auf einmal bestand darin, einen festen Link für den Zielnamen zu erstellen und den Link für den Quellnamen zu entfernen. Heutzutage wird normalerweise ein einzelner Systemaufruf verwendet, der dies atomar erledigt.
quelle