Os links físicos são equivalentes aos atalhos do Windows?

52

A Wikipedia define um link físico como:

uma entrada de diretório que associa um nome a um arquivo em um sistema de arquivos. (Um diretório é um tipo especial de arquivo que contém uma lista dessas entradas.) O termo é usado em sistemas de arquivos que permitem a criação de vários links físicos para o mesmo arquivo.

Gostaria de saber se o conceito de link físico é equivalente ao conceito de atalho do Windows .

Se links físicos não equivalem a atalhos, qual é o recurso mais próximo do Windows para links físicos?

Computernerd
fonte
11
Na verdade, existem ótimas referências dessa página wiki que você compartilhou.
eccentricSam
8
O Microsoft NTFS suporta hardlink e eles são muito semelhantes ao unix. Eu acho que os atalhos são objeto especial ob as janelas environnement, mas eles não estão relacionados com a organização filesytem ao contrário do hardlinks reais
kiwy
O link a seguir fornece boas explicações: comptb.cects.com/…
3
Eu acho que o paralelo é enganador, atalhos são "interface" links apenas arquivos com informações de texto sobre o destino que são interpretadas pela interface e não pelo sistema de arquivos. De uma linha de comando, eles não estão realmente apontando para algo no sentido do sistema de arquivos. O Windows (ou melhor, o NTFS) possui links simbólicos adequados en.wikipedia.org/wiki/NTFS_symbolic_link que não são atalhos nem hardlinks. Eu os uso no Windows para ter pastas do Dropbox em qualquer lugar, isso não pode ser feito com atalhos.
ALFC
5
Os arquivos de atalho do Windows são muito parecidos com os arquivos .desktop do Linux. Links simbólicos e links físicos do Linux são algo completamente diferente que às vezes serve ao mesmo propósito.
mikebabcock

Respostas:

113

Não, um link físico é completamente diferente. Um link virtual está mais próximo de um atalho do Windows (embora existam diferenças importantes, os links simbólicos são mais semelhantes aos atalhos do Windows do que os links físicos). Um link físico é uma coisa diferente e quase nunca será necessária.

Resumidamente, um link virtual é criado com este comando:

ln -s foo bar

Se você executar ls -l, verá:

lrwxrwxrwx 1 terdon terdon 3 Mar 10 15:58 bar -> foo
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

O ->meio que baré um link para foo. Portanto, a abertura bar, com um editor de texto, por exemplo, abrirá o arquivo separado foo. No entanto, a exclusão barapenas excluirá o atalho, não afetará o arquivo foo.

Os links físicos, por outro lado, são criados com este comando:

ln foo bar

Se você executar agora ls -l, não há indicação de nenhum relacionamento entre os arquivos:

-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 bar
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

Mas - e isso é muito importante - esses são realmente o mesmo arquivo . Arquivos em sistemas de arquivos Unix são armazenados usando inodes ; um inode é basicamente a maneira como o sistema de arquivos mapeia um nome de arquivo para um local específico no disco rígido físico. Portanto, links físicos são arquivos que apontam para o mesmo inode que seu destino. Outra maneira de colocar isso é que todos os arquivos são realmente links físicos apontando para seus inodes. Criar um link direto para um arquivo apenas cria um novo ponteiro (arquivo) no sistema de arquivos que aponta para o mesmo inode. Cada inode pode ter vários arquivos apontando para ele ou um, ou nenhum.

Para entender isso mais claramente, use o ls -ique mostra o inode associado a um arquivo. Vamos criar um link virtual e um link físico e ver o que acontece:

ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo

Agora, verifique seus inodes:

insira a descrição da imagem aqui

Como você pode ver acima, ambos fooe HardLinkToFootêm o mesmo inode (16648029), enquanto o SoftLinkToFoo possui um diferente (16648036).

O que acontece se renomearmos foocom mv foo bar?

insira a descrição da imagem aqui

A cor vermelha indica um link flexível quebrado, cujo alvo não pode mais ser encontrado. Isso ocorre porque os links flexíveis apontam para o nome de um arquivo, não para o seu inode. Observe que, apesar de alterar o nome, o inode permanece o mesmo, portanto o hardlink está correto e ainda funciona.

Em resumo, links físicos são na verdade duas manifestações do mesmo arquivo; eles são ponteiros para a mesma seção do disco. Links flexíveis são apenas atalhos. Para fazer uma analogia no mundo real, os hardlinks são como dois números de telefone diferentes para a mesma linha telefônica e os soft links são como ter duas linhas telefônicas diferentes na mesma casa.

terdon
fonte
6
@ Kiwy É o oposto: links simbólicos absolutos falham de muitas maneiras diferentes (assim que você move os dados, os monta em um local diferente, faz backup deles ...) e é melhor evitar.
Gilles 'SO- stop be evil'
3
Também é importante notar que a exclusão (via rmou unlink()) de um link físico apenas diminui a contagem de links até que a contagem atinja zero, quando os blocos ocupados pelo conteúdo do arquivo são liberados. Não tenho certeza de que dizer "links físicos são na verdade duas instâncias do mesmo arquivo" está estritamente correto, pois os dois nomes apontam para o mesmo inode e, portanto, o mesmo conteúdo, em vez de haver duas instâncias do arquivo em si. qualquer sentido.
Emmet
7
Observe que um atalho do Windows é um arquivo usado pelo shell e, portanto, pode fazer coisas que o shell conhece, mas não o sistema de arquivos. Por exemplo, você pode criar atalhos no espaço para nome do shell (por exemplo, Painel de Controle, Computador etc.) ou criar atalhos para aplicativos ainda a serem instalados (que serão instalados no primeiro uso). Essas coisas não têm equivalente direto no mundo do sistema de arquivos.
Joey
2
Eu amo essa resposta, mas na verdade é muito ruim para entender o que é um atalho do Windows. @ Shaakunthala abaixo tem uma resposta melhor, pois o atalho do Windows é mais um arquivo .desktop do Linux do que um link simbólico.
mikebabcock
18

Há uma boa explicação sobre o que são links flexíveis e físicos, mas uma coisa precisa ser esclarecida.

Do Windows atalhos são equivalentes ou similares a nem soft links , nem links de disco rígido . No nível do sistema de arquivos, são apenas arquivos. É o shell que entende sua estrutura e as interpreta como links. Os atalhos do Windows também podem apontar para objetos nos namespaces do shell que não estão relacionados ao sistema de arquivos (impressoras, itens do painel de controle, pastas virtuais).

Os atalhos do Windows, além do nome do objeto do sistema de arquivos, contêm as seguintes informações: PIDL ("caminho binário opaco" no espaço de nome do shell), descrição, tecla de atalho, ícone, diretório de trabalho. O Windows também adiciona identificadores de objeto NTFS se o sistema de arquivos NTFS for usado, para corrigir atalhos quebrados.

O equivalente aproximado de um atalho do Windows é um arquivo .desktop . Veja esta pergunta no SuperUser: Existe um equivalente a .lnk no Linux?

Athari
fonte
6

Não. No Linux, as coisas funcionam de maneira diferente.

Cada arquivo é representado por um objeto chamado 'inode'. Todo inode possui um número (ID) associado a ele.

Como sabemos, os humanos não são bons em lembrar números, mas nomes. (Foi assim que as agendas telefônicas evoluíram)

Portanto, o nome do arquivo entrou na imagem para dar a cada inode um nome legível por humanos. Basicamente, um hardlink vincula um nome de arquivo a um inode. Um inode pode ter vários hardlinks. Se não houver hardlinks presentes para um inode específico, o espaço em disco usado pelo inode poderá ser realocado para novos arquivos. O que significa que pelo menos um link físico deve ser apresentado para cada arquivo. O nome do arquivo (visualizado como o nome do arquivo / ícone que você vê no navegador de arquivos) é um link físico.

No Windows, o atalho é um arquivo separado (arquivo * .lnk). Ele contém informações sobre o arquivo original (compreensivelmente o caminho do arquivo). Na percepção do Linux, um atalho do Windows seria outro inode vinculado a um nome de arquivo que termina com '.lnk'.

Shaakunthala
fonte
3
NTFS realmente funciona muito parecido com isso. Um arquivo é uma entrada na MFT, e as entradas do diretório simplesmente mapeiam os nomes dos arquivos para os IDs dos arquivos. Ele suporta hardlinks e, desde 2008/7 / Vista (?), Até links simbólicos. Neste ponto, a maior diferença é cultural.
cHao 11/03
2

No Windows, você também pode criar links físicos se tiver um sistema de arquivos NTFS.

fsutil hardlink create target_file source_file

Os arquivos devem estar na mesma unidade lógica.

Assustador
fonte
Está correto - o NTFS também suporta hardlinks. Geralmente, as ferramentas exigem que você tenha privilégios de administrador para criá-las. Sobre a "mesma unidade lógica" - seria mais preciso dizer que eles precisam estar no mesmo sistema de arquivos. Uma unidade lógica pode ser qualquer coisa, incluindo uma letra de unidade criada pelo substcomando. Uma ferramenta pode não saber / cuidar disso e, assim, se recusar a criar um link físico. Uma coisa muito útil é a Extensão do Shell de Link, que permite ao explorador criá-los.
Tobias
1

Uma grande diferença: o link físico não pode ser criado para pastas, mas para arquivos.

O atalho pode ser criado para pastas, portanto, você não pode dizer que elas são equivalentes.

Sua pergunta deve ser a diferença entre link simbólico ou link virtual e atalho .

conforme isso:

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.

Um "atalho" é apenas um arquivo comum que tem uma referência ao arquivo ou diretório de destino.

Portanto, quando você clica em um atalho, o diretório é alterado para o arquivo real, enquanto o soft-link se refere à sua localização como se fosse o arquivo real. Para isso, no Linux, você pode usar terminal e cd em links simbólicos, enquanto não pode usar cd em atalhos .

Um atalho do Windows e um iniciador do Linux (apontando para algum local) seriam idênticos.

nux
fonte
2
O que? Softlinks são apenas arquivos, embora estranhos, eles também usam inodes, por exemplo. Eles NÃO são tratados como o original (que é hardlinks). Embora seja verdade que hardlinks não são permitidos para diretórios na maioria dos sistemas operacionais, esse é apenas um recurso de segurança e há exceções a esse (máquina do tempo OSX, por exemplo). E, é claro, você pode usar cd para atalhos (suponho que você queira dizer atalhos do Windows, pois, como você diz, pode usar cd para soflinks).
terdon
11
você tem certeza de que pode usar o cmd para cd para um atalho.
nux
11
Acabei de inicializar minha VM do Windows e criei um atalho para uma pasta na minha área de trabalho; os atalhos do Windows são muito semelhantes (se não idênticos) aos links simbólicos. Embora você não possa fazer o cd usando cmd.exe por algum motivo, é possível criar um .lnk em um diretório e usá-lo através do explorer.
terdon
11
eleitores para baixo deve dar uma razão para downvoting
nux
5
Desculpe, ainda não está correto. Os links simbólicos são arquivos que contêm seu destino como texto simples (veja aqui ); os links simbólicos não são tratados como originais; essa é toda a diferença entre links simbólicos e links físicos. Os lançadores Linux (suponho que você queira dizer arquivos .desktop) não têm nada a ver com isso, eles são completamente diferentes. Como você mesmo diz, os atalhos do Windows podem apontar para arquivos (incluindo programas) e pastas (mac e windows têm pastas, o Linux possui diretórios). Os arquivos .desktop permitem iniciar um programa. Eles não vinculam a lugar algum.
terdon