2011-10-05 03:28:14 +0000 2011-10-05 03:28:14 +0000
412
412

"junção de directórios" vs "ligação simbólica de directório"?

No contexto da NTFS:

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

/D* Cria uma ligação simbólica de directório. Por defeito é uma ligação simbólica de ficheiro. /H* Cria uma ligação difícil em vez de uma ligação simbólica. /J* Cria uma ligação de directório. Link especifica o novo nome da ligação simbólica.
Target especifica o caminho (relativo ou absoluto) a que a nova ligação se refere.

  1. Não é uma ** junção de directórios** exactamente a mesma coisa que uma ** ligação simbólica de directório**?

  2. Uma vez que uma “directoria” é na realidade apenas um file, qual seria a diferença entre uma ligação simbólica de directório e uma ligação simbólica de ficheiro?

Respostas (3)

382
382
382
2011-10-05 03:43:56 +0000

Uma junção não é definitivamente a mesma coisa que uma ligação simbólica de um directório, embora se comportem de forma semelhante. A principal diferença é que, se estiver a olhar para um servidor remoto, junções são processadas no servidor e links simbólicos de directórios são processados no cliente. Veja também o comentário de Matthew sobre o facto de que isto significa que as ligações simbólicas no sistema de ficheiros local podem apontar para sistemas de ficheiros remotos.

Suponha que numa máquina chamada Alice você colocaria um ponto de junção c:\myjp e uma ligação simbólica de directório c:\mysymlink, ambos apontando para c:\targetfolder. Enquanto estiver a utilizar a Alice não irá notar muita diferença entre eles. Mas se estiver a usar outra máquina chamada Bob, então o ponto de junção

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

mas o link simbólico

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

(Caveat: por defeito, o sistema não segue links simbólicos em volumes remotos, por isso na maioria dos casos o segundo exemplo irá na realidade resultar ou em “File Not Found” ou _“O link simbólico não pode ser seguido porque o seu tipo está desactivado. "A diferença entre um link simbólico de directório e um link simbólico de ficheiro é simplesmente que um representa um directório e um representa um ficheiro. Uma vez que o alvo da ligação não precisa de existir quando a ligação é criada, o sistema de ficheiros precisa de saber se deve dizer às aplicações que é ou não uma directoria.

Também deve ser notado que criar uma ligação simbólica requer privilégios especiais (por defeito, apenas disponível para processos elevados) enquanto que criar uma junção apenas requer acesso ao sistema de ficheiros.

65
65
65
2015-10-22 19:03:16 +0000

A conversa complexa magoa o cérebro – Eu gosto de gráficos:

Assumir que qualquer MyLink é uma ligação simbólica e qualquer MyJunc é uma junção que aponta para Target as created.

e.g.

mklink /D MyLink C:\T_Dir para criar uma ligação simbólica ao directório alvo

mklink /J MyJunc C:\T_Dir para criar uma ligação simbólica ao directório alvo

Onde a sintaxe é mklink [/J,/D] [link path] [target path] como 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 desbloqueou o acesso a ligações simbólicas remotas na sua máquina local, então isto funcionaria … mas apenas na máquina local onde está desbloqueado

55
55
55
2018-02-02 16:30:06 +0000

As ligações simbólicas têm mais funcionalidade, enquanto os cruzamentos quase parecem ser uma característica herdada devido às suas limitações, mas as implicações dessas limitações em termos de segurança são especificamente a razão pela qual um cruzamento pode ser preferido a um elo simbólico. O estabelecimento de objectivos circunscritos torna as ligações simbólicas mais funcionais, mas também aumenta o seu perfil de segurança, ao passo que os cruzamentos podem ser considerados mais seguros por estarem limitados a trajectos locais. Portanto, se você quer uma ligação local e pode viver com um caminho absoluto, provavelmente está melhor com um entroncamento; caso contrário, considere uma ligação simbólica pelas suas capacidades adicionais.

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


Outras comparações de ligações NTFS

Aqui estão algumas outras comparações sobre o tema, mas estas podem ser enganosas quando se consideram os cruzamentos porque não listam os benefícios que enumero acima. Extraído daqui (uma boa leitura introdutória)

A partir de SS64 página em MKLink


** Comentários sobre Terminologia**

Junctions are Symbolic Links

Junctions and Symbolic links are really doing the same thing in the same way (reparse points), para além das diferenças na forma como são processados. Na verdade, tecnicamente, uma junção é uma ligação simbólica e, por vezes, a documentação pode chamar a uma junção uma ligação simbólica, como é o caso aqui . Portanto, isto é apenas algo a ter em conta no que diz respeito à terminologia.

NTFS

Mesmo que o PO especifique isto, vale a pena salientar que “ligação simbólica” é um termo muito geral que não é específico da NTFS. Assim, para ser específico, esta comparação é sobre NTFS Junctions vs. NTFS Symbolic Links.