"Giunzione directory" vs "collegamento simbolico directory"?


395

Nel contesto di NTFS:

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

/D Crea un collegamento simbolico alla directory. L'impostazione predefinita è un collegamento simbolico al file.
/H Crea un collegamento reale anziché un collegamento simbolico.
/J Crea una giunzione di directory.
Link specifica il nuovo nome del collegamento simbolico.
Target specifica il percorso (relativo o assoluto) a cui fa riferimento il nuovo collegamento.

  1. Una giunzione di directory non è esattamente la stessa cosa di un collegamento simbolico di directory ?

    Qual è la differenza tra mklink /D f1 f2e mklink /J f1 f2?

  2. Dato che una "directory" è in realtà solo un file , quale sarebbe la differenza tra un link simbolico di directory e un link simbolico di file?


Risposte:


366

Una giunzione non è sicuramente la stessa cosa di un collegamento simbolico di directory, sebbene si comportino in modo simile. La differenza principale è che, se si sta guardando un server remoto, le giunzioni vengono elaborate sul server e i collegamenti simbolici della directory vengono elaborati sul client . Vedi anche il commento di Matthew sul fatto che ciò significa che i collegamenti simbolici sul file system locale possono puntare a file system remoti.

Supponiamo che su una macchina di nome Alice dovresti mettere un punto di giunzione c:\myjpe un collegamento simbolico di directory c:\mysymlink, entrambi puntati a c:\targetfolder. Mentre usi Alice non noterai molta differenza tra di loro. Ma se stai usando un'altra macchina di nome Bob, allora il punto di giunzione

\\Alice\c$\myjp indicherà \\Alice\c$\targetfolder

ma il collegamento simbolico

\\Alice\c$\mysymlink indicherà \\Bob\c$\targetfolder

(Avvertenza: per impostazione predefinita, il sistema non segue i collegamenti simbolici su volumi remoti, quindi nella maggior parte dei casi il secondo esempio si tradurrà effettivamente in "File non trovato" o "Il collegamento simbolico non può essere seguito perché il suo tipo è disabilitato." )

La differenza tra un collegamento simbolico di directory e un collegamento simbolico di file è semplicemente che uno rappresenta una directory e uno rappresenta un file. Poiché la destinazione del collegamento non deve necessariamente esistere quando viene creato il collegamento, il file system deve sapere se comunicare alle applicazioni che si tratta di una directory o meno.

Va inoltre notato che la creazione di un collegamento simbolico richiede un privilegio speciale (per impostazione predefinita, disponibile solo per processi elevati) mentre la creazione di un nodo richiede solo l'accesso al file system.


13
Giusto per essere chiari: potrebbero esserci altre differenze funzionali più sottili tra giunzioni di directory e collegamenti simbolici di directory. La cosa remota rispetto a quella locale è solo la più ovvia dal punto di vista dell'utente (anziché di uno sviluppatore).
Harry Johnston,

12
@MatthewSteeples vuoi dire che se creo un collegamento simbolico C:\testlink(che punta C:\testsul mio computer) e qualcuno accede in remoto al mio computer e fa clic su C:\testlink, si risolverebbe C:\testsul SUO computer, considerando che se creo un nodo di directory C:\testlink(che punta a C:\testsul mio computer) e qualcuno accede in remoto al mio computer e fa clic su C:\testlink) lo porterebbe C:\testsul mio computer? O ho capito male?
Pacerier,

9
@Pacerier in questo contesto sì, ma i collegamenti simbolici ti consentono di avere una cartella sul tuo computer che punta a una condivisione di rete (perché sono risolti lato client). Ad esempio, C: \ MyNetworkShare potrebbe effettivamente indicare \\ Alice \ Share
Matthew Steeples,

6
@MatthewSteeples ma non siamo riusciti a creare una giunzione di directory C:\MyNetworkShareche punta \\Alice\Shareanche a?
Pacerier,

8
@Pacerier, no, i punti di giunzione devono essere locali.
Harry Johnston,

56

I discorsi complessi fanno male al cervello - Mi piacciono i grafici:

Supponiamo che any MyLinksia un collegamento simbolico e any MyJuncsia una giunzione che punta a Target as created.

per esempio

mklink /D MyLink C:\T_Dir per la creazione di un collegamento simbolico alla directory di destinazione

mklink /J MyJunc C:\T_Dir per creare una giunzione di directory con la directory di destinazione

Dove la sintassi è mklink [/J,/D] [link path] [target path]come digitata sul computer locale


 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 ***

Errore * 1 - Se hai sbloccato l'accesso ai collegamenti simbolici remoti sul tuo computer locale, allora funzionerebbe .. ma solo sul computer locale in cui è sbloccato


3
È così strano. Anche i relativi collegamenti simbolici non funzionano in remoto. Ad esempio, creo una directory d:\_tmp\data. Crea collegamento in questo modo: d:\_tmp>mklink /d data-link data. L'utente remoto ha pieno accesso d:\_tmpe tutte le sue sottocartelle MA non sarà ancora in grado di aprire d:\_tmp\data-link.
Nux,

4
Questo perché quando un collegamento simbolico viene valutato sul lato client, punta a d: \ _ tmp \ data sul client, non sul server.
apraetor,

Penso che il motivo per cui è strano sia chiaro. Ma sono d'accordo con @Nux sul fatto che È strano, almeno nel caso dei relativi collegamenti simbolici.
Jon Coombs,

Complex talk hurts brain -- I like chartsAdoro questa frase e anche il grafico.
Luca,

46

I collegamenti simbolici hanno più funzionalità, mentre le giunzioni sembrano quasi essere una caratteristica legacy a causa delle loro limitazioni, ma le implicazioni di sicurezza di queste limitazioni sono in particolare il motivo per cui una giunzione potrebbe essere preferita su un collegamento simbolico. Il targeting remoto rende i collegamenti simbolici più funzionali, ma aumenta anche il loro profilo di sicurezza, mentre gli incroci potrebbero essere considerati più sicuri perché vincolati ai percorsi locali . Quindi, se vuoi un collegamento locale e puoi vivere con un percorso assoluto, probabilmente stai meglio con un incrocio; altrimenti, considera un collegamento simbolico per le sue abilità aggiunte.

inserisci qui la descrizione dell'immagine

** L'affermazione della differenza di velocità / complessità deriva da un'affermazione non verificata nella voce di Wikipedia sui punti di analisi NTFS (una buona lettura). *


Altri confronti di collegamenti NTFS

Ecco alcuni altri confronti sull'argomento, ma questi possono essere fuorvianti quando si considerano le giunzioni perché non elencano i vantaggi che ho elencato sopra.

Tratto da qui (una buona lettura introduttiva)

inserisci qui la descrizione dell'immagine

Dalla pagina SS64 su MKLink

inserisci qui la descrizione dell'immagine


Commenti sulla terminologia

Le giunzioni sono collegamenti simbolici

Giunzioni e collegamenti simbolici stanno davvero facendo la stessa cosa allo stesso modo (punti di analisi), a parte le differenze di cui sopra nel modo in cui vengono elaborate. In effetti, tecnicamente, una giunzione è un collegamento simbolico, e talvolta la documentazione potrebbe chiamare una giunzione un collegamento simbolico, come nel caso qui . Quindi, questo è solo qualcosa di cui essere consapevoli riguardo alla terminologia.

NTFS

Anche se l'OP lo specifica, vale la pena sottolineare che "collegamento simbolico" è un termine molto generale che non è specifico di NTFS. Quindi, per essere precisi, questo confronto riguarda giunzioni NTFS e collegamenti simbolici NTFS.


3
Qualcuno ha testato la velocità di elaborazione di giunzioni vs collegamenti simbolici?
1000Gbps,

Il grafico pro / contro è stato estremamente utile, grazie!
GordonM,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.