Qual é a diferença entre um link simbólico e um atalho?
Qual é a diferença entre um link simbólico e um atalho?
Respostas:
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.
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 .
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).
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 ".
"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
À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).