"Jonction d'annuaire" vs "lien symbolique d'annuaire"?

395

Dans le contexte de NTFS:

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

/D Crée un lien symbolique d'annuaire. La valeur par défaut est un lien symbolique de fichier.
/H Crée un lien dur au lieu d'un lien symbolique.
/J Crée une jonction d'annuaire.
Link spécifie le nouveau nom du lien symbolique.
Target spécifie le chemin (relatif ou absolu) auquel le nouveau lien fait référence.

  1. Une jonction d’annuaire n’est-elle pas exactement la même chose qu’un lien symbolique d’annuaire ?

    Quelle est la différence entre mklink /D f1 f2et mklink /J f1 f2?

  2. Puisqu'un "répertoire" n'est en réalité qu'un fichier , quelle serait la différence entre un lien symbolique de répertoire et un lien symbolique de fichier?

Pacerier
la source
2
Connexes: superuser.com/q/347930/24500
surfasb

Réponses:

366

Une jonction n’est certainement pas la même chose qu’un lien symbolique d’annuaire, bien qu’ils se comportent de la même manière. La principale différence est que, si vous examinez un serveur distant, les jonctions sont traitées sur le serveur et les liens symboliques d’annuaire sur le client . Voir également le commentaire de Matthew sur le fait que cela signifie que des liens symboliques sur le système de fichiers local peuvent pointer vers des systèmes de fichiers distants.

Supposons que sur une machine nommée Alice, vous deviez placer un point de jonction c:\myjpet un lien symbolique d'annuaire c:\mysymlinkpointant tous deux vers c:\targetfolder. Pendant que vous utilisez Alice, vous ne remarquerez pas beaucoup de différence entre eux. Mais si vous utilisez une autre machine nommée Bob, le point de jonction

\\Alice\c$\myjp pointera vers \\Alice\c$\targetfolder

mais le lien symbolique

\\Alice\c$\mysymlink pointera vers \\Bob\c$\targetfolder

(Mise en garde: par défaut, le système ne suit pas les liens symboliques sur les volumes distants. Par conséquent, dans la plupart des cas, le deuxième exemple aboutit à "Fichier introuvable" ou "Le lien symbolique ne peut pas être suivi car son type est désactivé." )

La différence entre un lien symbolique de répertoire et un lien symbolique de fichier est simplement que l'un représente un répertoire et l'autre un fichier. Dans la mesure où la cible du lien n'a pas besoin d'exister lors de la création du lien, le système de fichiers doit savoir s'il faut indiquer aux applications qu'il s'agit ou non d'un répertoire.

Il convient également de noter que la création d'un lien symbolique nécessite des privilèges spéciaux (par défaut, disponible uniquement pour les processus élevés), tandis que la création d'une jonction nécessite uniquement un accès au système de fichiers.

Harry Johnston
la source
13
Soyons clairs: il peut exister d’autres différences fonctionnelles plus subtiles entre les jonctions d’annuaire et les liens symboliques d’annuaire. Le côté distant / local est le plus évident du point de vue de l'utilisateur (par opposition au développeur).
Harry Johnston
12
@MatthewSteeples voulez-vous dire que si je crée un lien symbolique C:\testlink(qui pointe C:\testsur mon ordinateur) et que quelqu'un accède à distance à mon ordinateur et clique dessus C:\testlink, cela résoudrait le problème C:\testsur son ordinateur, Alors que si je crée une jonction de répertoire C:\testlink(qui pointe C:\testsur mon ordinateur), et une personne à distance accède à mon ordinateur et clique dessus C:\testlink) cela le mènerait-il au C:\testsur mon ordinateur? Ou est-ce que je l'ai mal compris?
Pacerier
9
@ Pacerier dans ce contexte, oui, mais les liens symboliques vous permettent d’avoir un dossier sur votre ordinateur qui pointe vers un partage réseau (car ils sont résolus du côté client). Par exemple, C: \ MyNetworkShare pourrait en réalité pointer vers \\ Alice \ Share
Matthew Steeples
6
@ MatthewSteeples mais ne pourrions-nous pas créer une jonction de répertoire C:\MyNetworkSharequi pointe \\Alice\Shareégalement?
Pacerier
8
@Pacerier, non, les points de jonction doivent être locaux.
Harry Johnston
56

Les conversations complexes font mal au cerveau - j'aime les graphiques:

Supposons que tout MyLinksoit un lien symbolique et que tout MyJuncest une jonction pointée vers Target as created.

par exemple

mklink /D MyLink C:\T_Dir pour créer un lien symbolique vers le répertoire cible

mklink /J MyJunc C:\T_Dir pour créer une jonction de répertoire dans le répertoire cible

Où la syntaxe est la même mklink [/J,/D] [link path] [target path]que sur la machine 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 ***

Error * 1 - Si vous avez débloqué l'accès aux liens symboliques distants sur votre ordinateur local, cela fonctionnerait .. mais uniquement sur l'ordinateur local où il est débloqué

Still.Tony
la source
3
C'est tellement bizarre. Même les liens symboliques relatifs ne fonctionnent pas à distance. Par exemple, je crée un répertoire d:\_tmp\data. Créer un lien comme ceci: d:\_tmp>mklink /d data-link data. L'utilisateur distant a un accès complet à d:\_tmptous ses sous-dossiers, MAIS il ne pourra toujours pas ouvrir d:\_tmp\data-link.
Nux
4
En effet, lorsqu'un lien symbolique est évalué côté client, il pointe vers d: \ _ tmp \ data sur le client, pas sur le serveur.
apraetor
Je pense que la raison pour laquelle c'est bizarre est claire. Mais je suis d’accord avec @Nux pour dire que C’EST bizarre, du moins dans le cas des liens symboliques relatifs.
Jon Coombs
Complex talk hurts brain -- I like chartsJ'aime cette phrase et le tableau aussi.
Luc
46

Les liens symboliques ont plus de fonctionnalités, alors que les jonctions semblent presque être une fonctionnalité héritée en raison de leurs limitations, mais les implications de ces limitations pour la sécurité sont précisément la raison pour laquelle une jonction pourrait être préférée à un lien symbolique. Le ciblage distant rend les liens symboliques plus fonctionnels, mais augmente également leur profil de sécurité, tandis que les jonctions peuvent être considérées comme plus sûres car elles sont contraintes aux chemins locaux . Donc, si vous voulez un lien local et pouvez vivre avec un chemin absolu, vous êtes probablement mieux avec une jonction; sinon, considérons un lien symbolique pour ses capacités supplémentaires.

entrez la description de l'image ici

** L’affirmation de la différence de vitesse / complexité provient d’une affirmation non vérifiée dans l’entrée Wikipedia sur les points d’analyse NTFS (une bonne lecture). *


Autres comparaisons de liens NTFS

Voici quelques autres comparaisons sur le sujet, mais elles peuvent être trompeuses lorsque vous envisagez des jonctions car elles ne répertorient pas les avantages énumérés ci-dessus.

Tiré d'ici (une bonne lecture d'introduction)

entrez la description de l'image ici

À partir de la page SS64 sur MKLink

entrez la description de l'image ici


Commentaires sur Terminology

Les jonctions sont des liens symboliques

Les jonctions et les liens symboliques font réellement la même chose de la même manière (points d'analyse), mis à part les différences susmentionnées dans leur traitement. En fait, techniquement, une jonction est un lien symbolique et la documentation peut parfois appeler une jonction un lien symbolique, comme c'est le cas ici . Donc, c'est juste quelque chose à savoir concernant la terminologie.

NTFS

Même si le PO le spécifie, il convient de souligner que "lien symbolique" est un terme très général qui n'est pas spécifique à NTFS. Donc, pour être précis, cette comparaison concerne les jonctions NTFS par rapport aux liens symboliques NTFS.

U8it
la source
3
Quelqu'un a testé la vitesse de traitement de Jonctions vs liens symboliques?
1000 Gbps
Le tableau avantages / inconvénients a été extrêmement utile, merci!
GordonM