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


Dans le contexte de NTFS:

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

/D      Crée un lien symbolique de répertoire. Le 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. N'est pas un jonction d'annuaire exactement la même chose qu'un lien symbolique du répertoire?

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

  2. Comme un "répertoire" est en fait juste un fichier, quelle serait la différence entre un lien symbolique de répertoire et un lien symbolique de fichier?


336
2017-10-05 03:28


origine


En relation: superuser.com/q/347930/24500 - surfasb


Réponses:


Une jonction n'est certainement pas la même chose qu'un lien symbolique de répertoire, même si elles se comportent de la même manière. La principale différence est que, si vous consultez un serveur distant, les jonctions sont traitées sur le serveur et les liens symboliques des répertoires sont traités chez le client. Voir également le commentaire de Matthew sur le fait que cela signifie que les 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 mettiez un point de jonction c:\myjp et un lien symbolique d'annuaire c:\mysymlink, les deux pointant 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, alors le point de jonction

\\Alice\c$\myjp pointera à \\Alice\c$\targetfolder

mais le lien symbolique

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

(Attention: par défaut, le système ne suit pas les liens symboliques sur les volumes distants, donc dans la plupart des cas, le deuxième exemple se traduira par "Fichier non trouvé" 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. La cible du lien n’ayant 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 d’un répertoire ou non.

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


315
2017-10-22 19:03



Pour être clair, il peut y avoir d’autres différences fonctionnelles plus subtiles entre les jonctions de répertoires et les liens symboliques de répertoires. La solution distante ou locale est la plus évidente du point de vue de l'utilisateur (et non du développeur). - Harry Johnston
@MatthewSteeples voulez-vous dire que si je crée un lien symbolique C:\testlink (qui pointe vers C:\test sur mon ordinateur) et que quelqu'un accède à distance à mon ordinateur et clique sur C:\testlink, ce serait résoudre à la C:\test sur son ordinateur, alors que si je crée une jonction d'annuaire C:\testlink (qui pointe vers C:\test sur mon ordinateur), et quelqu'un accède à distance à mon ordinateur et clique sur C:\testlink) il le mènerait à la C:\test sur mon ordinateur? Ou est-ce que je l'ai mal compris? - Pacerier
@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 côté client). Par exemple, C: \ MyNetworkShare pourrait pointer sur \\ Alice \ Share - Matthew Steeples
@MatthewSteeples mais nous ne pouvions pas créer une jonction de répertoire C:\MyNetworkShare qui pointe vers \\Alice\Share ainsi que? - Pacerier
@Pacerier, non, les points de jonction doivent être locaux. - Harry Johnston


La conversation complexe fait mal au cerveau - J'aime les cartes:

Assumer tout MyLink est un lien symbolique et tout MyJunc est une jonction pointant à 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 vers le répertoire cible

Où la syntaxe est mklink [/J,/D] [link path] [target path] comme tapé 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 ***

Erreur * 1 - Si vous débloquiez l'accès à des liens symboliques distants sur votre ordinateur local, cela fonctionnerait alors ... mais uniquement sur l'ordinateur local où il est débloqué


42
2018-02-02 16:30



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éez un lien comme ça: d:\_tmp>mklink /d data-link data. L'utilisateur distant a un accès complet à d:\_tmp et tous ses sous-dossiers, mais il ne sera toujours pas en mesure d'ouvrir d:\_tmp\data-link. - Nux
En effet, lorsqu'un lien symbolique est évalué côté client, il pointe vers d: \ _ tmp \ data sur le client et non sur le serveur. - apraetor
Je pense que la raison pour laquelle c'est étrange est claire. Mais je suis d’accord avec @Nux que c’est étrange, du moins dans le cas des liens symboliques relatifs. - Jon Coombs


J'avais l'impression que les jonctions étaient juste là pour des raisons historiques et que les liens symboliques étaient tout à fait meilleurs (les choses apparaissent de cette façon à leur valeur nominale). Il s'avère que ce n'est pas tout à fait vrai. Il y a de bonnes raisons d'utiliser une jonction au lieu d'un lien symbolique. La principale différence réside dans la sécurité et les chemins distants ou locaux. Oui, le ciblage à distance rend les liens symboliques plus fonctionnels, mais améliore également leur profil de sécurité. Donc, si vous voulez un lien local et pouvez vivre avec un chemin absolu, vous êtes probablement mieux avec une jonction; sinon, considérez un lien symbolique pour ses capacités supplémentaires.

enter image description here

** L’énoncé de différence de vitesse / complexité provient d’une déclaration non vérifiée dans le Entrée Wikipedia sur les points d'analyse NTFS (une bonne lecture). *


Autres comparaisons de liens NTFS

Voici d'autres comparaisons sur le sujet, mais celles-ci peuvent être trompeuses lorsque l'on considère les carrefours car elles ne listent pas les avantages que je liste ci-dessus.

Prise d'ici (une bonne lecture d'introduction)

enter image description here

De Page SS64 sur MKLink

enter image description here


Commentaires sur la terminologie

Les jonctions sont des liens symboliques

Les jonctions et les liens symboliques font vraiment 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 parfois la documentation peut appeler une jonction un lien symbolique, comme c'est le cas ici. Donc, il suffit de connaître 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 au NTFS. Donc, pour être précis, cette comparaison concerne les jonctions NTFS et les liens symboliques NTFS.


13