Frage "Verzeichnis Junction" vs "Verzeichnis symbolische Verbindung"?


Im Zusammenhang mit NTFS:

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

/D      Erstellt eine symbolische Verknüpfung für ein Verzeichnis. Standard ist eine Datei symbolische Verbindung.
/H      Erstellt eine feste Verknüpfung anstelle einer symbolischen Verknüpfung.
/J      Erstellt eine Verzeichnis Junction.
Link    Gibt den neuen symbolischen Linknamen an.
Target  Gibt den Pfad (relativ oder absolut) an, auf den sich die neue Verknüpfung bezieht.

  1. Ist nicht ein Verzeichnis Kreuzung genau das gleiche wie ein Verzeichnis symbolische Verbindung?

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

  2. Da ein "Verzeichnis" eigentlich nur ein ist Datei, was wäre der Unterschied zwischen einem symbolischen Verzeichnislink und einem symbolischen Dateilink?


336
2017-10-05 03:28


Ursprung


Verbunden: superuser.com/q/347930/24500 - surfasb


Antworten:


Eine Junction ist definitiv nicht dasselbe wie eine Verzeichnis-symbolische Verbindung, obwohl sie sich ähnlich verhält. Der Hauptunterschied besteht darin, dass, wenn Sie einen Remote-Server betrachten, Junctions werden auf dem Server verarbeitet und Verzeichnis symbolische Links werden auf dem Client verarbeitet. Siehe auch Matthews Kommentar zu der Tatsache, dass dies bedeutet, dass symbolische Links auf dem lokalen Dateisystem auf entfernte Dateisysteme verweisen können.

Nehmen wir an, Sie müssten auf einer Maschine namens Alice einen Knotenpunkt setzen c:\myjp und eine symbolische Verzeichnisverknüpfung c:\mysymlinkbeide zeigen auf c:\targetfolder. Während Sie Alice benutzen, werden Sie nicht viel Unterschied zwischen ihnen bemerken. Wenn Sie jedoch eine andere Maschine namens Bob verwenden, dann ist dies der Verbindungspunkt

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

aber die symbolische Verbindung

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

(Achtung: Das System folgt standardmäßig keinen Symlinks auf Remote-Volumes. In den meisten Fällen wird das zweite Beispiel tatsächlich zu einem der beiden führen "Datei nicht gefunden" oder "Die symbolische Verknüpfung kann nicht befolgt werden, da ihr Typ deaktiviert ist.")

Der Unterschied zwischen einer symbolischen Verzeichnisverknüpfung und einer symbolischen Dateiverknüpfung besteht einfach darin, dass eine Datei ein Verzeichnis und eine Datei eine Datei darstellt. Da das Ziel des Links beim Erstellen des Links nicht vorhanden sein muss, muss das Dateisystem wissen, ob es den Anwendungen mitteilen soll, 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 erhöhte Prozesse verfügbar), während das Erstellen einer Junction nur Zugriff auf das Dateisystem erfordert.


315
2017-10-22 19:03



Nur um es klar zu sagen: Es kann durchaus andere subtilere funktionale Unterschiede zwischen Verzeichnisverknüpfungen und symbolischen Verzeichnisverweisen geben. Die remote vs. local-Sache ist nur die offensichtlichste von einer Benutzer- (im Gegensatz zu einer Entwickler-) Perspektive. - Harry Johnston
@MatthewSteeples meinst du das wenn ich einen symbolischen Link erstelle C:\testlink (was auf zeigt C:\test auf meinem Computer) und jemand greift auf meinen Computer zu und klickt auf C:\testlinkwürde es auflösen C:\test auf seinem Computer, während ich eine Verzeichnisverbindung erstelle C:\testlink (was auf zeigt C:\test auf meinem Computer), und jemand Remote-Zugriff auf meinen Computer und klickt auf C:\testlink) es würde ihn zum C:\test auf meinem Computer? Oder habe ich es falsch verstanden? - Pacerier
@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 auf der Clientseite aufgelöst werden). ZB könnte C: \ MyNetworkShare tatsächlich auf \\ Alice \ Share zeigen - Matthew Steeples
@MatthewSteeples konnten wir aber keine Verzeichnisverknüpfung erstellen C:\MyNetworkShare was zeigt auf \\Alice\Share auch? - Pacerier
@Pacerier, nein, Knotenpunkte müssen lokal sein. - Harry Johnston


Komplexes Gespräch schmerzt Gehirn - ich mag Diagramme:

Übernehmen Sie irgendwelche MyLink ist ein symbolischer Link und jeder MyJunc ist eine Kreuzung, die auf zeigt 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 Verzeichnisverzweigung zum Zielverzeichnis

Wo Syntax ist mklink [/J,/D] [link path] [target path] wie auf dem lokalen Computer eingegeben


 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 entfernte symbolische Links auf Ihrem lokalen Rechner entsperrt haben, dann würde dies funktionieren. Aber nur auf dem lokalen Rechner, auf dem es entsperrt ist


42
2018-02-02 16:30



Das ist so komisch. Selbst relative symbolische Links funktionieren nicht remote. Z.B. Ich erstelle ein Verzeichnis d:\_tmp\data. Erstellen Sie einen Link wie folgt: d:\_tmp>mklink /d data-link data. Remote-Benutzer hat vollen Zugriff auf d:\_tmp und alle seine Unterordner ABER er wird immer noch nicht in der Lage sein zu öffnen d:\_tmp\data-link. - Nux
Das liegt daran, dass, wenn eine symbolische Verbindung auf der Clientseite ausgewertet wird, sie auf dem Client auf d: \ _ tmp \ data zeigt, 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 im Falle relativer Symlinks. - Jon Coombs


Ich hatte den Eindruck, dass es aus Legacy-Gründen nur Kreuzungen gab und die symbolischen Verbindungen insgesamt besser waren (die Dinge erscheinen auf diese Weise als bare Münze). Stellt sich heraus, das ist nicht ganz richtig. Es gibt einige gute Gründe, eine Verbindung anstelle einer symbolischen Verbindung zu verwenden. Der Hauptunterschied besteht in der Sicherheit und den Remote- und lokalen Pfaden. Ja, Remote-Targeting macht symbolische Links funktioneller, erhöht aber auch ihr Sicherheitsprofil. Wenn Sie also einen lokalen Link haben wollen und mit einem absoluten Pfad leben können, sind Sie wahrscheinlich mit einer Kreuzung besser dran; Andernfalls betrachten Sie einen symbolischen Link für seine zusätzlichen Fähigkeiten.

enter image description here

** Die Aussage über den Unterschied in der Geschwindigkeit / Komplexität kommt von einer unbestätigten Aussage in der Wikipedia-Eintrag auf NTFS-Analysepunkten (eine gute Lektüre). *


Andere NTFS-Link-Vergleiche

Hier sind einige andere Vergleiche zu dem Thema, aber diese können irreführend sein, wenn man Kreuzungen betrachtet, weil sie nicht die Vorteile auflisten, die ich oben aufgelistet habe.

Von hier genommen (eine gute einleitende Lektüre)

enter image description here

Von SS64 Seite auf MKLink

enter image description here


Kommentare zu Terminologie

Übergänge sind symbolische Verbindungen

Junctions und Symbolic Links machen genau dasselbe auf die gleiche Weise (Analysepunkte), abgesehen von den oben genannten Unterschieden in der Verarbeitung. Tatsächlich ist eine Junction technisch gesehen eine symbolische Verbindung, und manchmal kann die Dokumentation eine Junction als symbolische Verbindung bezeichnen. wie es hier der Fall ist. Also, das ist nur etwas in Bezug auf die Terminologie zu beachten.

NTFS

Obwohl das OP dies spezifiziert, ist es wert, darauf hinzuweisen, dass "symbolische Verbindung" ein sehr allgemeiner Begriff ist, der nicht spezifisch für NTFS ist. Um genau zu sein, handelt es sich bei diesem Vergleich um NTFS-Junctions im Vergleich zu NTFS-symbolischen Links.


13