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.
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
?
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?
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.
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
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.
** 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)
Da página SS64 no MKLink
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.