"Directory junction" vs "directory symbolic link"?

393

Im Kontext von NTFS:

MKLINK [[/D] | [/H] | [/J]] Link Target

/D Erstellt eine symbolische Verzeichnisverknüpfung. Standard ist ein Dateisymbollink.
/H Erstellt eine feste Verbindung anstelle einer symbolischen Verbindung.
/J Erstellt eine Directory Junction.
Link Gibt den neuen symbolischen Linknamen an.
Target Gibt den Pfad (relativ oder absolut) an, auf den der neue Link verweist.

  1. Ist eine Verzeichnisverknüpfung nicht genau dasselbe wie eine symbolische Verzeichnisverknüpfung ?

    Was ist der Unterschied zwischen mklink /D f1 f2und mklink /J f1 f2?

  2. Da ein "Verzeichnis" eigentlich nur eine Datei ist , was wäre der Unterschied zwischen einer symbolischen Verzeichnisverknüpfung und einer symbolischen Dateiverknüpfung?

Pacerier
quelle
2
Verwandte: superuser.com/q/347930/24500
surfasb

Antworten:

364

Eine Junction ist definitiv nicht dasselbe wie eine symbolische Verzeichnisverknüpfung, obwohl sie sich ähnlich verhalten. Der Hauptunterschied besteht darin, dass bei einem Remoteserver Junctions auf dem Server verarbeitet werden und Verzeichnissymbolverknüpfungen auf dem Client verarbeitet werden . Siehe auch Matthews Kommentar zur Tatsache, dass dies bedeutet, dass symbolische Verknüpfungen im lokalen Dateisystem auf ferne Dateisysteme verweisen können.

Angenommen, auf einem Computer mit dem Namen Alice sollten Sie einen Knotenpunkt c:\myjpund eine symbolische Verzeichnisverknüpfung einfügen c:\mysymlink, die beide auf zeigen c:\targetfolder. Während du Alice benutzt, wirst du keinen großen Unterschied zwischen ihnen bemerken. Wenn Sie jedoch eine andere Maschine mit dem Namen Bob verwenden, ist dies der Knotenpunkt

\\Alice\c$\myjp wird zeigen auf \\Alice\c$\targetfolder

aber die symbolische Verbindung

\\Alice\c$\mysymlink wird zeigen auf \\Bob\c$\targetfolder

(Vorsichtsmaßnahme: Standardmäßig folgt das System Symlinks auf Remote-Volumes nicht. In den meisten Fällen führt das zweite Beispiel zu "Datei nicht gefunden" oder "Der symbolischen Verknüpfung kann nicht gefolgt werden, da ihr Typ deaktiviert ist." )

Der Unterschied zwischen einem Verzeichnissymbollink und einem Dateisymbollink besteht einfach darin, dass einer ein Verzeichnis und einer eine Datei darstellt. Da das Ziel der Verknüpfung beim Erstellen der Verknüpfung nicht vorhanden sein muss, muss das Dateisystem wissen, ob Anwendungen davon in Kenntnis gesetzt werden sollen, dass es sich um ein Verzeichnis handelt oder nicht.

Es sollte auch beachtet werden, dass das Erstellen einer symbolischen Verknüpfung spezielle Berechtigungen erfordert (standardmäßig nur für Prozesse mit erhöhten Rechten verfügbar), während das Erstellen einer Junction nur den Zugriff auf das Dateisystem erfordert.

Harry Johnston
quelle
13
Um es klar zu machen: Es kann durchaus andere subtilere funktionale Unterschiede zwischen Verzeichnisknotenpunkten und symbolischen Verzeichnisverknüpfungen geben. Die Sache Remote vs. Local ist aus Sicht eines Benutzers (im Gegensatz zu einem Entwickler) am offensichtlichsten.
Harry Johnston
12
@MatthewSteeples meinst du, wenn ich eine symbolische Verknüpfung C:\testlink(die C:\testauf meinen Computer verweist ) erstelle und jemand auf meinen Computer zugreift und darauf klickt C:\testlink, wird diese auf den C:\testauf SEINEM Computer aufgelöst, wohingegen wenn ich eine Verzeichnisverknüpfung erstelle C:\testlink(die auf verweist) C:\testauf meinem Computer), und jemand hat Fernzugriff auf meinen Computer und klickt auf C:\testlink) würde ihn dazu führen, dass C:\testauf meinem Computer? Oder habe ich es falsch herum verstanden?
Pacerier
9
@Pacerier in diesem Zusammenhang ja, aber symbolische Links ermöglichen es Ihnen, einen Ordner auf Ihrem Computer zu haben, der auf eine Netzwerkfreigabe verweist (weil sie clientseitig aufgelöst wurden). ZB C: \ MyNetworkShare könnte tatsächlich auf \\ Alice \ Share
Matthew Steeples
6
@MatthewSteeples, aber konnten wir keine Verzeichnisverknüpfung erstellen, C:\MyNetworkSharedie ebenfalls darauf verweist \\Alice\Share?
Pacerier
8
@ Pacerier, nein, Knotenpunkte müssen lokal sein.
Harry Johnston
55

Komplexes Sprechen schmerzt das Gehirn - ich mag Charts:

Angenommen, any MyLinkist eine symbolische Verknüpfung und any MyJuncist eine Kreuzung, auf die gezeigt wird Target as created.

z.B

mklink /D MyLink C:\T_Dir zum Erstellen einer symbolischen Verknüpfung zum Zielverzeichnis

mklink /J MyJunc C:\T_Dir zum Erstellen einer Verzeichnisverknüpfung zum Zielverzeichnis

Wobei die Syntax mklink [/J,/D] [link path] [target path]auf dem lokalen Computer wie angegeben ist


 link path    |   target path   |         When accessed ..
              |                 |  (locally)    |    (remotely)
              |                 |               |
C:\MyLink     |   C:\T_Dir      |  C:\T_Dir     |  [leads back to local]
C:\MyJunc     |   C:\T_Dir      |  C:\T_Dir     |  [leads to remote]
              |                 |
\\Svr\MyLink  |   C:\T_Dir      |   C:\T_Dir    |  [leads back to local]
\\Svr\MyJunc  |   C:\T_Dir      |  *** Must create and point local ***
              |                 |
C:\MyLink     |  \\Sv2\T_Dir    |  \\Sv2\T_Dir  |   Error*1
C:\MyJunc     |  \\Sv2\T_Dir    |  *** Error - Must point local ***
              |                 |
\\Svr\MyLink  |  \\Sv2\T_Dir    |  Error*1
\\Svr\MyJunc  |  \\Sv2\T_Dir    |  *** Must create link using target device ***

Fehler * 1 - Wenn Sie den Zugriff auf symbolische Remoteverbindungen auf Ihrem lokalen Computer freigegeben haben, funktioniert dies nur auf dem lokalen Computer, auf dem die Sperrung aufgehoben wurde

Still.Tony
quelle
3
Das ist so komisch. Selbst relative symbolische Links funktionieren nicht remote. ZB erstelle ich ein Verzeichnis d:\_tmp\data. Link erstellen wie folgt: d:\_tmp>mklink /d data-link data. Der Remote-Benutzer hat uneingeschränkten Zugriff auf d:\_tmpalle Unterordner, kann diese jedoch weiterhin nicht öffnen d:\_tmp\data-link.
Nux
4
Wenn eine symbolische Verknüpfung clientseitig ausgewertet wird, zeigt sie auf d: \ _ tmp \ data auf dem Client und nicht auf dem Server.
Apraetor
Ich denke, der Grund, warum es komisch ist, ist klar. Aber ich stimme @Nux zu, dass es seltsam ist, zumindest bei relativen Symlinks.
Jon Coombs
Complex talk hurts brain -- I like chartsIch liebe diesen Satz und die Grafik auch.
Luke
46

Symbolische Links bieten mehr Funktionen, während Junctions aufgrund ihrer Einschränkungen fast schon ein Legacy-Feature zu sein scheinen. Die Auswirkungen dieser Einschränkungen auf die Sicherheit sind jedoch insbesondere der Grund, warum eine Junction möglicherweise einer symbolischen Verbindung vorgezogen wird. Durch Remote-Targeting werden symbolische Links funktionsfähiger, aber auch das Sicherheitsprofil wird erhöht, während Junctions möglicherweise als sicherer angesehen werden, da sie auf lokale Pfade beschränkt sind . Wenn Sie also eine lokale Verbindung wünschen und mit einem absoluten Pfad leben können, ist es wahrscheinlich besser, mit einer Kreuzung zu arbeiten. Andernfalls sollten Sie einen symbolischen Link für die hinzugefügten Fähigkeiten in Betracht ziehen.

Bildbeschreibung hier eingeben

** Die Aussage über den Unterschied in Geschwindigkeit / Komplexität stammt von einer nicht überprüften Aussage im Wikipedia-Eintrag zu NTFS-Analysepunkten (eine gute Lektüre). *


Andere NTFS-Link-Vergleiche

Hier sind einige andere Vergleiche zu diesem Thema, die jedoch bei der Betrachtung von Junctions irreführend sein können, da in ihnen die oben aufgeführten Vorteile nicht aufgeführt sind.

Von hier genommen (eine gute Einführung gelesen)

Bildbeschreibung hier eingeben

Von der SS64-Seite auf MKLink

Bildbeschreibung hier eingeben


Kommentare zur Terminologie

Junctions sind symbolische Links

Verknüpfungen und symbolische Verknüpfungen verhalten sich wirklich genauso (Analysepunkte), abgesehen von den oben genannten Unterschieden in der Art und Weise, wie sie verarbeitet werden. Tatsächlich ist eine Junction technisch gesehen eine symbolische Verknüpfung, und manchmal wird eine Junction in der Dokumentation als symbolische Verknüpfung bezeichnet, wie dies hier der Fall ist . Das ist also nur etwas, das Sie in Bezug auf die Terminologie beachten sollten.

NTFS

Auch wenn das OP dies spezifiziert, sollte darauf hingewiesen werden, dass "symbolische Verknüpfung" ein sehr allgemeiner Begriff ist, der nicht spezifisch für NTFS ist. Genauer gesagt handelt es sich bei diesem Vergleich um NTFS-Junctions im Vergleich zu symbolischen NTFS-Links.

u8it
quelle
3
Hat jemand die Verarbeitungsgeschwindigkeit von Junctions vs Symbolic Links getestet?
1000 Gbit
Das Pro / Contra-Diagramm war sehr hilfreich, danke!
GordonM