Qual é a diferença entre Link simbólico e Atalho?

Respostas:

57

Eu acho que o ponto importante é que os atalhos são apenas um arquivo. Eles têm um tamanho (pequeno, que apenas faz referência a onde apontam) e exigem um aplicativo para suportar esse tipo de arquivo para serem usados.

Um link simbólico é o nível do sistema de arquivos e tudo o vê como o arquivo original. Um aplicativo não precisa de suporte especial para usar um link simbólico.

Phoshi
fonte
6
Comandos árvore andar (qualquer coisa como os utilitários Unix find, tar, du, etc) não precisa saber sobre links simbólicos ou podem fazer algumas coisas muito estúpidas. Por exemplo, cegar os links simbólicos a seguir pode criar ciclos no sistema de arquivos, e isso é ruim .
# 2
9
@dmckee; Muito bom ponto, embora nenhum aplicativo precise de suporte específico para segui-los, eles precisam de suporte específico para não segui-los!
Phoshi 6/03/11
Sim, não precisa de suporte para usá- los, mas precisa saber sobre eles.
dmckee
@Phoshi O que exatamente você quer dizer com "e eles exigem um aplicativo para suportar esse tipo de arquivo para serem usados". Você pode explicar com um exemplo?
Geek
7
@ Geek: Um "atalho" é efetivamente um arquivo que contém o caminho de outro arquivo. Ao lê-lo, você lê um arquivo especialmente formatado que indica onde procurar a seguir. Se o seu aplicativo não escutar e simplesmente ler o arquivo literalmente, você não o seguirá. Um link simbólico é no nível do sistema de arquivos, é o próprio sistema de arquivos que mantém o caminho "verdadeiro" dos dados e, quando você tenta acessá-lo, recupera os dados apontados.
Phoshi
20

Um "link simbólico" pode realmente funcionar como um substituto para um diretório ou arquivo de uma maneira funcional e é comumente usado em ambientes Unix / Linux. Embora aparentemente haja suporte para isso no Windows, ainda não vi nenhum uso real.

Um "atalho" é apenas um arquivo comum que tem uma referência ao arquivo ou diretório de destino, além de outras coisas, como o ícone a ser exibido. Diferente de um Link Simbólico, você não pode "cd ./shortcut-name" no DOS (no Unix / Linux, você pode "cd ./symlink-name" e funcionará como um subdiretório real).

Além disso, na maioria dos aplicativos Windows, quando você clica em um atalho em qualquer caixa de diálogo Arquivo-> Abrir GUI, seu campo de nome de arquivo é preenchido com o nome de arquivo desse atalho, além de atuar como um subdiretório, enquanto no Unix / Linux a GUI trata um link simbólico como um caminho (sem modificar o campo nome do arquivo).

Randolf Richardson
fonte
No Unix / Linux, há também "Hard Links", que sempre são aplicados a arquivos (não diretórios). Essas são entradas de nome de arquivo natural no sistema de arquivos que apontam para os mesmos dados do arquivo que outra entrada de nome de arquivo em outro lugar (não precisa estar no mesmo diretório).
Randolf Richardson
4
@ Randolf: 1) Também existem hardlinks no Windows. 2) Um recurso dos atalhos do shell é o rastreamento automático de destinos - se o destino for movido, na maioria das vezes os atalhos continuarão funcionando. (Em um domínio do AD, é possível rastrear arquivos em computadores; por exemplo, se você mover um HD para outro lugar.) 3) Um uso de links simbólicos está redirecionando um arquivo ou diretório para um local alternativo - eles podem apontar para arquivos (ao contrário de junções ) e diretórios (ao contrário dos hardlinks), os sistemas de arquivos cruzados (ao contrário dos hardlinks) e o AFAIK podem até apontar para locais de rede.
grawity
Comentários tardios e não tenho certeza se não sei o que estou fazendo com atalhos, mas tive que criar um link simbólico em vez de um atalho para o meu arquivo vimrc (refiro um projeto dotfiles que eu uso no um diretório separado).
precisa saber é o seguinte
11

Como já mencionado, um link simbólico é um dos tipos de links disponíveis no nível do sistema de arquivos, o que o torna transparente para os aplicativos. Achei esta documentação muito útil (especialmente a seção "Cortar / desenrolar / unir junções externas / links simbólicos"). E a ferramenta também parece boa. (Ao mencionar isso e mklink, espero que mais pesquisas encontrem essa discussão.)

Um atalho é um arquivo, não um link real, e geralmente é seguido apenas com êxito como um link quando interpretado pela interface do usuário do Windows (interface do usuário). Por exemplo, quando você clica duas vezes em um atalho de pasta, o Windows o redireciona para esse outro local. (Isso inclui as caixas de diálogo genéricas Abrir e salvar arquivos que a maioria dos aplicativos chama.) Na minha área de trabalho, tenho um atalho para esta pasta: C: \ ProgramData \ Microsoft \ Windows \ Menu Iniciar \ Programas \ G

O nome do arquivo do atalho é: C: \ Users \ user5 \ Desktop \ Games.lnk, embora o Windows suprima a extensão .lnk e mostre apenas "Jogos", mesmo se você desmarcar "ocultar extensões para tipos de arquivos conhecidos". Mas se você abrir um prompt de comando e executar um diretório, verá:

C:\Users\user5\Desktop>dir "g*"
 Volume in drive C has no label.
 Volume Serial Number is 900...
 Directory of C:\Users\user5\Desktop
03/08/2014  05:30 PM             1,710 Games.lnk
               1 File(s)          1,710 bytes
               0 Dir(s)  246,818,222,080 bytes free

Eu posso criar o equivalente com um link simbólico usando a opção \ D (para o diretório):

C:\Users\user5\Desktop>mklink /D mysymlink  "C:\ProgramData\Microsoft\Windows\S
tart Menu\Programs\G"
symbolic link created for mysymlink <<===>> C:\ProgramData\Microsoft\Windows\Sta
rt Menu\Programs\G

C:\Users\user5\Desktop>cd mysymlink

C:\Users\user5\Desktop\mysymlink>

(Uma junção de diretório (\ J) também é uma opção, pois esse é um link de pasta.) O Windows Explorer, assim como esse console e a maioria dos aplicativos, permite navegar "para dentro" desse aparente subdiretório, em vez de (a) redirecionar "transversalmente" para um local diferente ou (b) com falha.

Atalhos não se comportam como subdiretórios. Eu posso chamar o comportamento de arquivo padrão da interface do usuário do Windows com este comando (isso abre a pasta "G" no Windows Explorer):

C:\Users\user5\Desktop>"Games.lnk"

Enquanto o mysymlink é listado (veja a contagem) como um subdiretório verdadeiro e não pode ser iniciado dessa maneira:

C:\Users\user5\Desktop>dir "my*"
 Volume in drive C has no label.
 Volume Serial Number is 900...

 Directory of C:\Users\user5\Desktop

03/29/2014  06:08 PM    <DIR>          mysubdir
03/29/2014  05:40 PM    <SYMLINKD>     mysymlink [C:\ProgramData\Microsoft\Windo
ws\Start Menu\Programs\G]
               0 File(s)              0 bytes
               2 Dir(s)  246,816,153,600 bytes free

C:\Users\user57\Desktop>mysubdir
'mysubdir' is not recognized as an internal or external command,
operable program or batch file.

C:\Users\user57\Desktop>mysymlink
'mysymlink' is not recognized as an internal or external command,
operable program or batch file.

Por outro lado, você não pode alterar o diretório para um atalho:

C:\Users\user5\Desktop>cd "Games.lnk"
The directory name is invalid.

A interface do usuário do Windows permite clicar com o botão direito do mouse para editar as propriedades de um atalho. Ou, o seguinte mostra exatamente o que realmente está armazenado no arquivo .lnk (dados binários), embora um editor hexadecimal seja exibido melhor:

C:\Users\user5\Desktop>notepad.exe "Games.lnk"

Enquanto a tentativa de executar o bloco de notas em uma subpasta real aparece uma mensagem de erro "Acesso negado" e um bloco de notas vazio.

Por outro lado, se eu criar um link simbólico de arquivo (não um link simbólico de pasta), posso iniciá-lo com o Bloco de Notas. Das seguintes chamadas do notepad.exe, as duas primeiras funcionam e a terceira falha (abre o arquivo .LNK, o arquivo binário gobbled).

C:\Users\user5\Desktop>mklink symplain.txt plain.txt
symbolic link created for symplain.txt <<===>> plain.txt

C:\Users\user5\Desktop>notepad.exe "symplain.txt"

C:\Users\user5\Desktop>notepad.exe "plain.txt"

C:\Users\user5\Desktop>notepad.exe "plain.txt.lnk"

Isso não é apenas uma coisa de console. Copiando um atalho para o Bloco de Notas para minha área de trabalho e tentando arrastar e soltar cada um dos três nele, ele exibe exatamente o mesmo comportamento. (Como arrastar e soltar, ao contrário do clique duplo, permite que o aplicativo interprete o atalho.)

Com relação às diferenças entre links simbólicos e junções de diretório, consulte esta discussão e aqui está uma descrição muito útil :

"Uma grande diferença na maneira como o Windows resolve links simbólicos e junções de diretório é onde o processamento ocorre. O Windows processa links simbólicos no sistema local, mesmo quando faz referência a um local em um servidor de arquivos remoto. O Windows processa junções de diretório que fazem referência a um controle remoto. Portanto, os links simbólicos em um servidor podem se referir a locais acessíveis apenas a partir de um cliente, como outros volumes de cliente, enquanto as junções de diretório não podem.Para resolver isso, o Windows Vista oferece suporte ao novo tipo de link simbólico para os dois arquivos e diretórios.

"Muitos comandos do sistema de arquivos foram atualizados para entender as implicações dos links simbólicos. Por exemplo, o comando Excluir sabe não seguir os links, o que resultaria na exclusão do destino, mas excluir o link. No entanto, porque nem todos os aplicativos pode manipular links simbólicos corretamente, a criação de um link simbólico requer o novo privilégio Criar link simbólico que apenas os administradores possuem por padrão ".

Jon Coombs
fonte
2

"Os links simbólicos diferem dos atalhos, pois oferecem um caminho * transparente para o objeto de dados desejado. Com um atalho (.lnk), é necessário ler e interpretar o conteúdo do arquivo de atalho e, em seguida, abrir o arquivo que ele faz referência (por exemplo, é um processo de duas etapas). Quando um aplicativo usa um link simbólico, obtém acesso imediato ao objeto de dados referenciado pelo link simbólico (ou seja, é um processo de uma etapa). "

Fonte: http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html

ariefcfa
fonte
0

Às vezes é bom ter um exemplo funcional, por isso não vou explicar como eu uso essa função.

Uso o google drive para fazer backup de arquivos, mas às vezes quero fazer backup de arquivos em uma pasta específica (não consigo movê-los para ../google drive). Especialmente com os aplicativos universais do Windows 10, os arquivos de configuração são armazenados em appdata e, na maioria das vezes, não consigo alterar esse local.

Eu uso o aplicativo stikynot nativo do Windows e queria fazer backup de minhas anotações, então usei um link simbólico aqui. O Google Drive reconhece o link como um arquivo real e sincroniza os arquivos, enquanto o arquivo real ainda está na pasta appdata.

Quando tenho localmente arquivos como pastas de projeto que não quero sincronizar com a nuvem, uso atalhos (copiar, colar -> colar atalho).

sommmen
fonte