Entsprechen harte Links Windows-Verknüpfungen?

52

Wikipedia definiert einen Hardlink als:

Ein Verzeichniseintrag, der einer Datei in einem Dateisystem einen Namen zuordnet. (Ein Verzeichnis ist selbst eine spezielle Art von Datei, die eine Liste solcher Einträge enthält.) Der Begriff wird in Dateisystemen verwendet, in denen mehrere feste Verknüpfungen für dieselbe Datei erstellt werden können.

Ich frage mich, ob das Konzept der festen Verknüpfung dem Windows-Konzept der Verknüpfung entspricht .

Wenn harte Verknüpfungen nicht mit Verknüpfungen gleichzusetzen sind, welche Windows-Funktion ist dann den harten Verknüpfungen am nächsten?

Computerfreak
quelle
1
Es gibt tatsächlich einige großartige Referenzen von dieser Wiki-Seite, die Sie geteilt haben.
Exzentersam
8
Microsoft NTFS unterstützt Hardlink und sie sind Unix-Hardlink sehr ähnlich. Ich denke, Verknüpfungen sind ein besonderes Objekt in der Windows-Umgebung, aber sie stehen im Gegensatz zu echten Hardlinks nicht im Zusammenhang mit der Organisation des Dateisystems
Kiwy
Der folgende Link gibt eine gute Erklärung: comptb.cects.com/…
3
Ich finde die Parallele irreführend, Shortcut sind "Interface" -Links, die nur Dateien mit Textinformationen über das Ziel enthalten, die vom Interface und nicht vom Dateisystem interpretiert werden. Von einer Kommandozeile aus zeigen sie nicht wirklich auf etwas im Sinne des Dateisystems. Windows (oder besser gesagt NTFS) hat richtige Symlinks en.wikipedia.org/wiki/NTFS_symbolic_link , die keine Verknüpfungen oder Hardlinks sind. Ich benutze sie in Windows, um Dropbox-Ordner überall zu haben. Dies kann nicht mit Verknüpfungen gemacht werden.
AlfC
5
Die Windows-Verknüpfungsdateien ähneln stark den Linux-Desktopdateien. Linux-Symlinks und harte Links sind eine völlig andere Sache, die manchmal den gleichen Zweck erfüllen.
Mikebabcock

Antworten:

113

Nein, eine harte Verbindung ist völlig anders. Ein Softlink ist näher an einer Windows-Verknüpfung (obwohl es wichtige Unterschiede gibt, sind symbolische Verknüpfungen Windows-Verknüpfungen ähnlicher als harte Verknüpfungen). Eine harte Verbindung ist etwas anderes und eine, die Sie so gut wie nie brauchen werden.

Kurz gesagt, mit diesem Befehl wird ein Softlink erstellt:

ln -s foo bar

Wenn Sie dann rennen ls -l, werden Sie sehen:

lrwxrwxrwx 1 terdon terdon 3 Mar 10 15:58 bar -> foo
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

Das ->heißt, das barist ein Link zu foo. Wenn Sie also barbeispielsweise mit einem Texteditor öffnen, wird die separate Datei tatsächlich geöffnet foo. Durch das Löschen barwird jedoch nur die Verknüpfung gelöscht. Die Datei wird dadurch nicht beeinflusst foo.

Harte Links werden dagegen mit dem folgenden Befehl erstellt:

ln foo bar

Wenn Sie jetzt ausführen ls -l, gibt es keinen Hinweis auf eine Beziehung zwischen den Dateien:

-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 bar
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

Aber - und das ist sehr wichtig - das sind eigentlich die gleichen Dateien . Dateien auf Unix-Dateisystemen werden mithilfe von Inodes gespeichert . Ein Inode ist im Grunde die Art und Weise, wie das Dateisystem einen Dateinamen einem bestimmten Speicherort auf der physischen Festplatte zuordnet. Hardlinks sind also Dateien, die auf denselben Inode verweisen wie ihr Ziel. Eine andere Art, dies zu formulieren, ist, dass alle Dateien tatsächlich feste Links sind, die auf ihre Inodes verweisen. Wenn Sie eine feste Verknüpfung zu einer Datei herstellen, wird lediglich ein neuer Zeiger (eine neue Datei) auf dem Dateisystem erstellt, der auf denselben Inode verweist. Jeder Inode kann mehrere Dateien enthalten, die darauf verweisen, eine oder keine.

Um dies besser zu verstehen, verwenden Sie ls -idie Option, die den mit einer Datei verknüpften Inode anzeigt. Lassen Sie uns einen Softlink und einen Hardlink erstellen und sehen, was passiert:

ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo

Überprüfen Sie nun ihre Inodes:

Bildbeschreibung hier eingeben

Wie Sie oben sehen können, beide foound HardLinkToFoohaben die gleiche Inode (16648029) , während SoftLinkToFoo einen anderen (16648036) hat.

Was passiert , wenn wir umbenennen foomit mv foo bar?

Bildbeschreibung hier eingeben

Die rote Farbe zeigt einen defekten Softlink an, dessen Ziel nicht mehr gefunden werden kann. Dies liegt daran, dass Softlinks auf den Namen einer Datei verweisen, nicht auf ihren Inode. Beachten Sie, dass der Inode trotz Namensänderung derselbe bleibt, sodass der Hardlink in Ordnung ist und weiterhin funktioniert.

Zusammenfassend sind harte Links eigentlich zwei Manifestationen derselben Datei. Sie sind Zeiger auf denselben Abschnitt der Festplatte. Softlinks sind nur Verknüpfungen. Um eine echte Analogie zu erhalten, sind Hardlinks wie zwei verschiedene Telefonnummern für dieselbe Telefonleitung und Softlinks wie zwei verschiedene Telefonleitungen im selben Haus.

terdon
quelle
6
@Kiwy Das Gegenteil ist der Fall: Absolute Symlinks schlagen auf viele verschiedene Arten fehl (sobald Sie Daten verschieben, an einem anderen Ort bereitstellen, sichern usw.) und sollten vermieden werden.
Gilles 'SO - hör auf böse zu sein'
3
Es ist auch erwähnenswert, dass das Löschen (über rmoder unlink()) einer festen Verknüpfung die Verknüpfungsanzahl nur verringert, bis die Verknüpfungsanzahl Null erreicht, wenn die vom Dateiinhalt belegten Blöcke freigegeben werden. Ich bin mir nicht sicher, ob die Aussage "Hardlinks sind eigentlich zwei Instanzen derselben Datei" richtig ist, da die beiden Namen auf denselben Inode und damit auf denselben Inhalt verweisen, anstatt auf zwei Instanzen der Datei selbst irgendein Sinn.
Emmet
7
Beachten Sie, dass eine Windows-Verknüpfung eine Datei ist, die von der Shell verwendet wird, und daher Dinge ausführen kann, die der Shell bekannt sind, nicht jedoch das Dateisystem. Sie können beispielsweise Verknüpfungen zum Shell-Namespace (z. B. Systemsteuerung, Computer usw.) oder Verknüpfungen zu noch zu installierenden Anwendungen (die bei der ersten Verwendung installiert werden) erstellen. Diese Dinge haben in der Dateisystemwelt kein direktes Äquivalent.
Joey
2
Ich liebe diese Antwort, aber es ist eigentlich ziemlich schlecht darin zu verstehen, was eine Windows-Verknüpfung ist. @Shaakunthala unten reagiert besser, da die Windows-Verknüpfung eher einer Linux-Desktop-Datei als einem Symlink ähnelt.
Mikebabcock
18

Es gibt eine gute Erklärung dafür, was weiche und harte Links sind, aber eines muss noch geklärt werden.

Windows- Verknüpfungen sind weder Softlinks noch Hardlinks äquivalent oder ähnlich . Auf Dateisystemebene handelt es sich lediglich um Dateien. Es ist die Shell, die ihre Struktur versteht und sie als Links interpretiert. Windows-Verknüpfungen können auch auf Objekte in Shell-Namespaces verweisen, die sich nicht auf das Dateisystem beziehen (Drucker, Elemente der Systemsteuerung, virtuelle Ordner).

Windows-Verknüpfungen enthalten neben dem Namen des Dateisystemobjekts die folgenden Informationen: PIDL (undurchsichtiger binärer "Pfad" im Shell-Namespace), Beschreibung, Tastenkürzel, Symbol, Arbeitsverzeichnis. Windows fügt auch NTFS-Objekt-IDs hinzu, wenn das NTFS-Dateisystem verwendet wird, um fehlerhafte Verknüpfungen zu beheben.

Das grobe Äquivalent einer Windows-Verknüpfung ist eine .desktop- Datei. Siehe diese Frage unter SuperUser: Gibt es unter Linux ein Äquivalent zu .lnk?

Athari
quelle
6

Nein. Unter Linux sieht die Sache anders aus.

Jede Datei wird durch ein Objekt namens "inode" dargestellt. Jedem Inode ist eine Nummer (ID) zugeordnet.

Wie wir wissen, können sich Menschen nicht gut an Zahlen erinnern, sondern an Namen. (So ​​haben sich Telefonbücher entwickelt)

Aus diesem Grund wurde der Dateiname in das Bild eingefügt, um jedem Inode einen lesbaren Namen zu geben. Grundsätzlich bindet ein Hardlink einen Dateinamen an eine Inode. Eine Inode kann mehrere Hardlinks haben. Wenn für einen bestimmten Inode keine Hardlinks vorhanden sind, wird der vom Inode verwendete Speicherplatz möglicherweise für neue Dateien neu zugewiesen. Das heißt, für jede Datei muss mindestens ein Hardlink vorhanden sein. Der Dateiname (angezeigt als der Dateiname / das Symbol, das Sie im Dateibrowser sehen) selbst ist ein Hardlink.

In Windows ist die Verknüpfung eine separate Datei (* .lnk-Datei). Es enthält Informationen zur Originaldatei (verständlicherweise den Dateipfad). In der Linux-Wahrnehmung wäre eine Windows-Verknüpfung ein weiterer Inode, der fest mit einem Dateinamen verknüpft ist, der mit '.lnk' endet.

Shaakunthala
quelle
3
NTFS funktioniert tatsächlich sehr ähnlich. Eine Datei ist ein Eintrag in der MFT, und Verzeichniseinträge ordnen Dateinamen einfach Datei-IDs zu. Es unterstützt Hardlinks und seit 2008/7 / Vista (?) Sogar Symlinks. An diesem Punkt ist der größte Unterschied kulturell.
CHAO
2

Unter Windows können Sie auch Hardlinks erstellen, wenn Sie über ein NTFS-Dateisystem verfügen.

fsutil hardlink create target_file source_file

Die Dateien müssen sich auf demselben logischen Laufwerk befinden.

Spuk
quelle
Das ist richtig - NTFS unterstützt auch Hardlinks. Häufig erfordern die Tools Administratorrechte, um sie zu erstellen. Über das "gleiche logische Laufwerk" - genauer gesagt, sie müssen sich auf demselben Dateisystem befinden. Ein logisches Laufwerk kann ein beliebiges Laufwerk sein, einschließlich eines vom substBefehl erstellten Laufwerksbuchstabens . Ein Tool weiß / kümmert sich möglicherweise nicht darum und weigert sich daher , einen Hardlink zu erstellen . Eine sehr nützliche Sache ist die Link Shell Extension , mit der der Explorer sie erstellen kann.
Tobias
1

Ein großer Unterschied ist, dass Hardlink nicht für Ordner, sondern für Dateien erstellt werden kann.

Verknüpfungen können für Ordner erstellt werden, sodass Sie nicht sagen können, dass sie gleichwertig sind.

Ihre Frage sollte der Unterschied zwischen symbolischem Link oder Softlink und Verknüpfung sein .

wie demnach:

Eine symbolische Verknüpfung befindet sich auf Dateisystemebene und wird von allen als Originaldatei betrachtet. Eine Anwendung benötigt keine spezielle Unterstützung, um einen symbolischen Link zu verwenden.

Eine "Verknüpfung" ist nur eine reguläre Datei, die einen Verweis auf die Zieldatei oder das Zielverzeichnis enthält.

Wenn Sie auf eine Verknüpfung klicken, wird Ihr Verzeichnis in die eigentliche Datei geändert, während Soft-Link sich auf den Speicherort bezieht, als wäre es die eigentliche Datei. Unter Linux können Sie mit Terminal und CD symbolische Verknüpfungen erstellen, während Sie keine Verknüpfungen erstellen können .

Eine Windows-Verknüpfung und ein Linux-Startprogramm (die auf einen Speicherort zeigen) wären identisch.

nux
quelle
2
Was? Softlinks sind nur Dateien, auch wenn sie seltsam sind, sie nehmen zum Beispiel auch Inodes auf. Sie werden NICHT wie das Original behandelt (das sind Hardlinks). Hardlinks sind zwar in den meisten Betriebssystemen für Verzeichnisse nicht zulässig, dies ist jedoch nur eine Sicherheitsfunktion, und es gibt Ausnahmen (z. B. OSX-Zeitmaschine). Und natürlich können Sie zu Verknüpfungen cden (ich nehme an, Sie meinen Windows-Verknüpfungen, da Sie, wie Sie sagen, zu Soflinks cden können).
Terdon
1
Sind Sie sicher, dass Sie mit cmd eine Verknüpfung erstellen können?
Nux
1
Ich habe gerade meine Windows-VM hochgefahren und eine Verknüpfung zu einem Ordner auf meinem Desktop erstellt. Windows-Verknüpfungen sind Symlinks sehr ähnlich (wenn nicht identisch). Obwohl Sie aus irgendeinem Grund mit cmd.exe keine CDs erstellen können , können Sie eine .lnk-Datei in einem Verzeichnis erstellen und über den Explorer verwenden.
Terdon
1
down-wähler sollten einen grund für das downvoting angeben
nux
5
Entschuldigung, immer noch nicht richtig. Symlinks sind Dateien, deren Ziel als reiner Text enthalten (siehe hier ). Symlinks werden nicht wie das Original behandelt, das ist der ganze Unterschied zwischen Symlinks und Hardlinks. Linux-Starter (ich nehme an, Sie meinen .desktop-Dateien) haben damit überhaupt nichts zu tun, sie sind völlig anders. Wie Sie selbst sagen, können Windows-Verknüpfungen auf Dateien (einschließlich Programme) und Ordner verweisen (Mac und Windows haben Ordner, Linux hat Verzeichnisse). Mit Desktop-Dateien können Sie einfach ein Programm starten. Sie verbinden sich nirgendwo.
Terdon