Wie der Titel schon sagt, möchte ich den Unterschied zwischen einem harten und einem weichen Link kennen, die mit dem Befehl erstellt wurden ln
. Der Befehl man ln
liefert zwar Informationen, beantwortet meine Frage jedoch nicht ausreichend.
Außerdem wäre es schön, wenn jemand eine Einstellung bereitstellen könnte, bei der ein fester Link einem symbolischen Link vorzuziehen ist.
symbolic-link
ste_kwr
quelle
quelle
Antworten:
In Linux / Unix werden Verknüpfungen als Links bezeichnet
Es gibt zwei Arten von Verknüpfungen: weiche Verknüpfungen (symbolische Verknüpfungen) oder harte Verknüpfungen.
Soft Links (symbolische Links)
Sie können Verknüpfungen zu Dateien und Verzeichnissen herstellen und Verknüpfungen (Shortcuts) auf verschiedenen Partitionen und mit einer anderen Inode-Nummer als im Original erstellen.
Wenn die echte Kopie gelöscht wird, funktioniert der Link nicht .
Harte Links
Hardlinks sind nur für Dateien; Sie können keine Verknüpfung zu einer Datei auf einer anderen Partition mit einer anderen Inode-Nummer herstellen.
Wenn die echte Kopie gelöscht wird, funktioniert der Link , da auf die zugrunde liegenden Daten zugegriffen wird , auf die die echte Kopie zugegriffen hat.
Frage: Wie mache ich einen Softlink?
Antwort: Eine weiche Verbindung kann hergestellt werden mit
ln -s
; Zuerst müssen Sie die Quelle und dann das Ziel definieren. (Denken Sie daran, dass Sie die vollständigen Pfade von Quelle und Ziel definieren müssen. Andernfalls funktioniert es nicht.)Wie Sie sehen, hat es einen anderen Inode und kann auf einer anderen Partition erstellt werden.
Frage: Wie erstelle ich einen Hardlink?
Antwort: Ein fester Link kann hergestellt werden mit
ln
; Zuerst müssen Sie die Quelle und dann das Ziel definieren. (Denken Sie daran, dass Sie den vollständigen Pfad von Quelle und Ziel definieren müssen. Andernfalls funktioniert es nicht.)Nehmen wir an, ich habe ein Skript im
/script
Verzeichnis namensfirefox
.Wie Sie sehen, hat es den gleichen Inode. Wenn ich das Original lösche, funktioniert der Link und fungiert als Original.
Oben überprüfe ich, ob der Link funktioniert, und lösche dann das ursprüngliche Firefox-Skript.
Ihre Frage: Es wäre schön, wenn jemand eine Einstellung vornehmen könnte, bei der ein fester Link einem symbolischen Link vorzuziehen ist.
Antwort : Je nach Festplattenpartition Layout Hardlinks haben die Einschränkung , dass sie auf derselben Partition sein muss (-1 Punkt) und nur auf Dateien verweisen können (-1 Punkt) ), aber ein Punkt , wenn das Original auf den Link gelöscht wird funktionieren und es verhält sich wie das Original.
Andererseits kann ein Softlink auf Verzeichnisse oder Dateien verweisen (+1 Punkt), und es gibt keine Partitionsbeschränkung (+1 Punkt), aber (-1 Punkt), wenn die Quelle gelöscht wird, funktioniert der Link nicht.
quelle
Ein Hardlink ist kein Zeiger auf eine Datei, sondern ein Verzeichniseintrag (eine Datei), der auf denselben Inode verweist. Auch wenn Sie den Namen der anderen Datei ändern, verweist ein Hardlink immer noch auf die Datei. Wenn Sie die andere Datei durch eine neue Version ersetzen (indem Sie sie kopieren), verweist ein Hardlink nicht auf die neue Datei. Sie können nur Hardlinks innerhalb desselben Dateisystems haben. Mit Hardlinks haben Sie keine Vorstellung von den Originaldateien und -links, alle sind gleich (stellen Sie sich das als Referenz auf ein Objekt vor). Es ist ein sehr einfaches Konzept.
Andererseits verweist ein Symlink tatsächlich auf einen anderen Pfad (einen Dateinamen). Bei jedem Zugriff über den Symlink wird der Name der Datei aufgelöst. Wenn Sie die Datei verschieben, folgt der Symlink nicht. Wenn Sie die Datei durch eine andere ersetzen und den Namen beibehalten, zeigt der Symlink auf die neue Datei. Symlinks können sich über Dateisysteme erstrecken. Bei Symlinks haben Sie eine sehr klare Unterscheidung zwischen der tatsächlichen Datei und dem Symlink, in dem neben dem Pfad, auf den die Datei verweist, keine Informationen gespeichert sind.
quelle
"Ein Bild sagt mehr als tausend Worte."
Und: "Ein Beispiel ist hundert Absätze wert ..."
Erstellen Sie zwei Dateien:
Geben Sie einige Daten ein:
Und wie erwartet:
Lassen Sie uns harte und weiche Links erstellen:
Mal sehen, was gerade passiert ist:
Das Ändern des Namens von blah1 spielt keine Rolle:
blah1-hard zeigt auf die inode, den inhalt der datei - das hat sich nicht geändert.
Der Inhalt der Datei konnte nicht gefunden werden, da der Softlink auf den Namen zeigt, der geändert wurde, und nicht auf den Inhalt.
Wenn blah1 gelöscht wird, enthält blah1-hard weiterhin den Inhalt. Wenn blah2 gelöscht wird, ist blah2-soft nur eine Verknüpfung zu einer nicht vorhandenen Datei.
Quelle: Offensichtlich aus StackOverflow kopieren !
quelle
git
ist eine schlechte Idee , nur für den Fall, dass sich jemand (der über Softlinks frustriert ist) wundert ... könnte dies auch auf andere Versionssysteme zutreffen.Beide sind Zeiger auf Dateien; Der Unterschied ist die Art des Zeigers. Ein symbolischer Link verweist namentlich auf eine andere Datei . Es verfügt über ein spezielles Modusbit, das es als symbolische Verknüpfung kennzeichnet, und sein Inhalt ist der Name der realen Datei. Da es nur einen Namen enthält, muss dieser Name nicht unbedingt vorhanden sein oder kann auf einem anderen Dateisystem vorhanden sein. Wenn Sie die benannte Datei ersetzen (den Inhalt ändern, ohne den Namen zu ändern), enthält der Link weiterhin den gleichen Namen und verweist jetzt auf die neue Datei. Sie können einen symbolischen Link leicht identifizieren und den Namen der Datei sehen, auf die er verweist.
Ein fester Link zeigt anhand der Inode-Nummer auf die Datei. Daher unterscheiden sich harte Links nicht vom Vornamen einer Datei. Es gibt keinen "echten" Namen im Vergleich zum Namen des festen Links. Alle festen Links sind gleichermaßen gültige Namen für die Datei. Aus diesem Grund muss die Datei, zu der Sie einen Link erstellen, tatsächlich vorhanden sein und sich in demselben Dateisystem befinden, in dem Sie den Link erstellen möchten. Wenn Sie den ursprünglichen Namen löschen, verweist der Hardlink weiterhin auf dieselbe Datei. Da alle festen Verknüpfungen gleichermaßen gültige Namen für die Datei sind, können Sie einen Namen nicht anzeigen und die anderen Namen für die Datei sehen. Um dies zu finden, müssen Sie sich jede Datei ansehen und ihre Inode-Nummer vergleichen, um die anderen Namen zu finden, die dieselbe Inode-Nummer haben.
Aus der Ausgabe von können Sie ersehen, wie viele Namen eine Datei hat
ls -l
. Die erste Zahl nach dem Dateimodus ist die Anzahl der Links. Eine Datei mit mehr als einem Link hat irgendwo einen anderen Namen, und umgekehrt hat eine Datei mit nur einem Link keine (anderen) festen Links.quelle
If you replace the named file, then the link still contains the same name, and so now it points to the new file
- Ich denke, das ist nicht gut erklärt. Meinen Sie, wenn ich die Datei ersetze, auf die ich einen symbolischen Link habe, dann bleiben die Links, die den Namen enthalten, unberührt. Aber es würde nur auf die ersetzte Datei verweisen, wenn ihr Dateiname (dh die neue Datei, die die alte ersetzt hat) mit der ersetzten Datei (dh der alten Datei, die durch die neue ersetzt wurde) identisch ist. Richtig?Ein Hardlink kann nur auf demselben Dateisystem funktionieren, es ist einfach ein anderer Name für denselben Inode (Dateien werden intern von Inodes referenziert). Eine Datei wird nur dann von der Festplatte gelöscht, wenn der letzte Link zu ihrem Inode weg ist (Sie
rm
d oderunlink
d den letzten Link). Hardlinks funktionieren normalerweise nur für Dateien, nicht für Verzeichnisse.Ein Symlink (symbolischer Link) ist eine spezielle Datei, die einen Pfad zu einer anderen Datei enthält. Dieser Pfad kann absolut oder relativ sein. symlinks können dateisystemübergreifend funktionieren und sogar auf verschiedene Dateien verweisen, wenn Sie beispielsweise eine externe Festplatte ausstecken und durch eine andere ersetzen, deren Pfad eine andere Datei enthält. Ein Symlink kann auf Dateien oder Verzeichnisse verweisen.
quelle
-d, -F, --directory
Schalter. Und ja, ich habe den Hinweis auf derln(1)
Seite gesehen :)ln
können keine Hardlinks zu Verzeichnissen erstellt werden. Es gibt jedoch Hardlinks zu Verzeichnissen, wobei.
und das bekannteste Beispiel sind..
. Ich wollte das nicht in meine ursprüngliche Antwort aufnehmen, da dies die Dinge nur komplizieren würde.In einer der Antworten des anderen Threads (der jetzt oben in Ihrem Beitrag verlinkt ist) wird diese Seite erwähnt, die meiner Meinung nach eine ziemlich gute Erklärung auf mittlerer Ebene darstellt. Wenn Sie sich in der Ascii-Kunst verirren, finden Sie hier die folgende Version:
Der Kernel und die beteiligten Dateisysteme übersetzen alles transparent.
Darauf aufbauend:
../parent.file
)Ich hätte mich vielleicht ein wenig verwirren können, aber wenn ich verschiedene Dinge durchgelesen habe, habe ich Mühe, den Unterschied zwischen einer Standarddatei und einem Hardlink zu finden. Die Art und Weise, wie ich es lese, besteht jede Datei aus einem Hardlink (der den Dateinamen speichert), der mit einem Inode verknüpft ist, der auf physische Daten verweist.
Durch das Hinzufügen eines Hardlinks erhält ein Inode lediglich einen zusätzlichen dateisystembasierten Zeiger. Ist das richtig?
quelle
Wann benutzt man Soft Link:
Verknüpfung zwischen Dateisystemen: Wenn Sie Dateien zwischen Dateisystemen verknüpfen möchten, können Sie nur Symlinks / Softlinks verwenden.
Verknüpfungen zu Verzeichnissen: Wenn Sie Verzeichnisse verknüpfen möchten, müssen Sie Softlinks verwenden, da Sie keine feste Verknüpfung zu einem Verzeichnis erstellen können.
Wann benutzt man Hard Link:
Speicherplatz: Feste Verknüpfungen belegen nur sehr wenig Speicherplatz, da beim Erstellen fester Verknüpfungen keine neuen Inodes erstellt werden. In Softlinks erstellen wir eine Datei, die Speicherplatz beansprucht (normalerweise 4 KB, abhängig vom Dateisystem).
Leistung: Die Leistung ist beim Zugriff auf einen festen Link etwas besser, da Sie direkt auf den Festplattenzeiger zugreifen, anstatt eine andere Datei zu durchsuchen. Speicherort der Datei verschieben: Wenn Sie die Quelldatei an einen anderen Speicherort im selben Dateisystem verschieben, funktioniert die harte Verknüpfung weiterhin, die weiche Verknüpfung schlägt jedoch fehl.
Redundanz: Wenn Sie die Sicherheit Ihrer Daten sicherstellen möchten, sollten Sie einen Hardlink verwenden, da bei einem Hardlink die Daten sicher sind, bis alle Links zu den Dateien gelöscht werden, anstatt bei einem Softlink, verlieren Sie die Daten, wenn die Master-Instanz der Datei gelöscht wird.
quelle
Die Verwirrung setzt ein, wenn Sie versuchen, den Unterschied zwischen "dem Dateinamen" und einem festen Link zu finden, weil es keinen gibt.
Jede von Ihnen erstellte Datei besteht aus Daten auf der Festplatte und einer festen Verknüpfung - einem Dateinamen in einem Verzeichnis und einem Zeiger auf die Daten auf der Festplatte. Ende der Geschichte. Wenn die letzte (oder einzige) feste Verbindung gelöscht wird, weiß das Betriebssystem, dass die Daten nicht mehr benötigt werden.
Daraus können Sie ersehen, dass die eigentlichen Daten niemals gelöscht werden, sondern nur die Hardlink (s). Und wenn die Festplatte überfüllt ist, werden die Daten möglicherweise durch die Daten einer anderen Datei überschrieben. Bis dahin könnten die Daten aus der gelöschten Datei wiederhergestellt sein, aber ohne den festen Link ist es schwer zu finden.
Symlinks teilen Ihnen, wie bereits erläutert, einfach mit, dass sich eine Datei
<targetname>
in einem Ordner mit dem Namen befindet<targetfolder>
. Sie zeigen auf die harte Verbindung. Sie wissen nicht, wo sich die Daten befinden. Die harte Verbindung weiß das.quelle
Es ist sehr einfach. Dateien (und Verzeichnisse!) Werden unter Adressen auf dem Blockgerät (Festplatte oder was auch immer) gespeichert. Normalerweise haben Sie einen einzelnen Namen, der einer Adresse zugeordnet ist, und auf diese Weise erhalten Sie Ihre Datei. Ein fester Link ist ein zweiter, dritter usw. Name, der derselben Adresse zugeordnet ist. Ein symbolischer Link bezieht sich stattdessen auf das Symbol - den Namen - und ebenso auf einen zweiten Namen, der dem Vornamen zugeordnet ist. Was den Kernel betrifft, stoppt er nach dem Lesen des symbolischen Link-Ziels und kehrt zum Anfang zurück, wobei der Zielwert der Dateiname (mehr oder weniger) ist, sodass relative Symlinks möglich, aber äußerst wenig hilfreich sind. Der Zielname wird nicht über der Dateisystemebene verwendet, es sei denn, er wird explizit im Userspace-Code abgefragt.
quelle