web-dev-qa-db-pt.com

"diretório junção" vs "diretório link simbólico"?

No contexto do NTFS:

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

/D Cria um link simbólico de diretório. O padrão é um link simbólico de arquivo.
/H Cria um link físico em vez de um link simbólico.
/J Cria uma junção de diretório.
Link especifica o novo nome do link simbólico.
Target especifica o caminho (relativo ou absoluto) ao qual o novo link se refere.

  1. Não é uma junção de diretório exatamente a mesma coisa que um link simbólico do diretório?

    Qual é a diferença entre mklink /D f1 f2 e mklink /J f1 f2?

  2. Como um "diretório" é na verdade apenas um arquivo , qual seria a diferença entre um link simbólico de diretório e um link simbólico de arquivo?

374
Pacerier

Uma junção definitivamente não é a mesma coisa que um link simbólico de diretório, embora eles se comportem de maneira semelhante. A principal diferença é que, se você estiver olhando para um servidor remoto, as junções são processadas no servidor e os links simbólicos do diretório são processados ​​no cliente . Veja também o comentário de Matthew sobre o fato de que isso significa que links simbólicos no sistema de arquivos local podem apontar para sistemas de arquivos remotos.

Suponha que em uma máquina chamada Alice você colocasse um ponto de junção c:\myjp e um link simbólico de diretório c:\mysymlink, ambos apontando para c:\targetfolder. Enquanto você estiver usando Alice você não notará muita diferença entre eles. Mas se você estiver usando outra máquina chamada Bob, então o ponto de junção

\\Alice\c$\myjp apontará para \\Alice\c$\targetfolder

mas o link simbólico

\\Alice\c$\mysymlink apontará para \\Bob\c$\targetfolder

(Advertência: por padrão, o sistema não segue links simbólicos em volumes remotos, portanto, na maioria dos casos, o segundo exemplo resultará em "Arquivo não encontrado" ou "O link simbólico não pode ser seguido porque o seu tipo está desativado. ")

A diferença entre um link simbólico de diretório e um link simbólico de arquivo é simplesmente que um representa um diretório e um representa um arquivo. Como o destino do link não precisa existir quando o link é criado, o sistema de arquivos precisa saber se deve informar aos aplicativos se é um diretório ou não.

Também deve ser notado que a criação de um link simbólico requer um privilégio especial (por padrão, disponível apenas para processos elevados), ao passo que a criação de uma junção requer apenas acesso ao sistema de arquivos.

351
Harry Johnston

Conversa complexa machuca o cérebro - eu gosto de gráficos:

Suponha que MyLink seja um link simbólico e qualquer MyJunc seja uma junção apontando para Target as created.

por exemplo.

mklink /D MyLink C:\T_Dir para criar um link simbólico para o diretório de destino

mklink /J MyJunc C:\T_Dir para criar uma junção de diretório para o diretório de destino

Onde a sintaxe é mklink [/J,/D] [link path] [target path] conforme digitado na máquina local


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

Erro * 1 - Se você desbloquear o acesso a links simbólicos remotos em sua máquina local, isso funcionaria ... mas somente na máquina local onde ele foi desbloqueado

52
Still.Tony

Os links simbólicos têm mais funcionalidade, enquanto as junções quase parecem ser um recurso legado devido a suas limitações, mas as implicações de segurança dessas limitações são especificamente o motivo pelo qual uma junção pode ser preferida em relação a um link simbólico. A segmentação remota torna os links simbólicos mais funcionais, mas também aumenta seu perfil de segurança, enquanto as junções podem ser consideradas mais seguras porque são restritas a caminhos locais . Então, se você quer um link local e pode viver com um caminho absoluto, você provavelmente está melhor com um entroncamento; Caso contrário, considere um link simbólico para suas habilidades adicionais.

enter image description here

** A declaração de diferença em velocidade/complexidade vem de uma declaração não verificada na entrada Wikipedia em pontos de nova análise NTFS (uma boa leitura). *


Outras comparações de links NTFS

Aqui estão algumas outras comparações sobre o tópico, mas elas podem ser enganosas quando consideramos junções porque elas não listam os benefícios listados acima.

Extraído daqui (uma boa leitura introdutória)

enter image description here

Da página SS64 no MKLink

enter image description here


Comentários sobre Terminologia

Junções são links simbólicos

Junções e links simbólicos estão realmente fazendo a mesma coisa da mesma maneira (pontos de nova análise), além das diferenças acima mencionadas em como eles são processados. De fato, tecnicamente, um Junction é um link simbólico, e às vezes a documentação pode chamar um Junction de um link simbólico, como é o caso aqui . Então, isso é apenas algo para estar ciente sobre a terminologia.

NTFS

Embora o OP especifique isso, vale a pena ressaltar que "link simbólico" é um termo muito genérico que não é específico do NTFS. Portanto, para ser específico, essa comparação é sobre Junções NTFS vs. Links Simbólicos NTFS.

38
u8it