Qual é a diferença entre links simbólicos e hard links?

52

Quando você usaria um sobre o outro?

    
por ripper234 18.03.2011 / 19:45

10 respostas

34

As diferentes semânticas entre os links hard e soft os tornam adequados para coisas diferentes.

Links físicos:

  • indistinguível de outras entradas de diretório, porque a entrada de diretório every é hard link
  • "original" pode ser movido ou excluído sem quebrar outros links físicos para o mesmo inode
  • possível apenas dentro do mesmo sistema de arquivos
  • as permissões devem ser as mesmas que as do "original" (as permissões são armazenadas no inode, não na entrada do diretório)
  • só pode ser feito para arquivos, não diretórios

Links simbólicos (links suaves)

  • simplesmente registra esse ponto em outro caminho de arquivo. ( ls -l mostrará para qual caminho um link simbólico aponta)
  • será interrompido se o original for movido ou excluído. (Em alguns casos, é realmente desejável que um link aponte para qualquer arquivo que ocupe atualmente um determinado local)
  • pode apontar para um arquivo em um sistema de arquivos diferente
  • pode apontar para um diretório
  • em alguns formatos de sistema de arquivos, é possível que o symlink tenha permissões diferentes do arquivo para o qual ele aponta (isso é incomum)
por 25.10.2011 / 04:49
16

O ponto de ambos os tipos de links é fornecer uma maneira de fazer um arquivo aparecer em dois locais ao mesmo tempo. Isso tem muitos usos. 9 de 10 vezes você deseja usar links simbólicos.

Links simbólicos ou "links simbólicos" funcionam um pouco como os atalhos do Windows. O conteúdo de um symlink é um ponteiro para o local real do arquivo / diretório. Se você excluir o arquivo real, o link simbólico ficará "pendurado" e não funcionará. A exclusão do link simbólico não exclui o arquivo real. Você pode ter tantos links simbólicos para um único arquivo (ou até mesmo outros links simbólicos) que desejar.

Ao contrário do Windows, eles funcionam no nível do sistema de arquivos, não no shell ou no nível do aplicativo; portanto, praticamente qualquer aplicativo "seguirá" os links simbólicos conforme o esperado. ls -al pode ser usado como uma maneira rápida de ver onde os links simbólicos "apontam" para.

Os hardlinks funcionam mesmo em um nível inferior. Um hardlink é uma entrada de diretório real, física no nível do sistema de arquivos do arquivo. Tecnicamente, uma entrada de diretório é um hardlink, assim cada arquivo tem pelo menos um hardlink em um diretório em algum lugar. Os hardlinks não são separados do arquivo para o qual eles apontam; se um arquivo tiver vários hardlinks em diretórios diferentes, a exclusão do hardlink com utilitários como rm não excluirá verdadeiramente o arquivo, até que todos os hardlinks tenham desaparecido.

Não consigo pensar em situações em que o uso de hardlinks seja comum, ou mesmo necessário, a menos que você intencionalmente queira impedir que os arquivos sejam excluídos ou esteja fazendo algum trabalho estranho de baixo nível com partições ou outras coisas relacionadas ao sistema de arquivos. EDIT: Há ótimas idéias nas outras respostas a essa pergunta, embora!

    
por 18.03.2011 / 19:58
12

Links físicos são muito úteis para mecanismos de backup baseados em disco, porque você pode ter uma árvore de diretórios completa para cada backup enquanto compartilha o espaço para arquivos que não foram alterados - e o sistema de arquivos controla a contagem de referência. a última referência a uma determinada versão desaparece porque o backup foi expirado / removido por motivos de espaço, o espaço usado é automaticamente recuperado. Alguns clientes de e-mail também o usam para mensagens arquivadas em várias pastas, pelo mesmo motivo.

    
por 18.03.2011 / 20:01
3

Links físicos são apenas referências aos mesmos espaços de disco, isto é, o 'por que' você não pode hardlinkar algo em outro sistema de arquivos.

Links simbólicos são arquivos que ligam outros arquivos (como atalhos do Windows), talvez no mesmo sistema de arquivos, talvez não.

EDIT: vou explicar mais alguma coisa. Todo arquivo que existe tem um mínimo de 1 link físico. Hard links são o caminho para acessar o conteúdo de um inode do sistema de arquivos. Você pode obter o número de inode de um arquivo com ls -i e obter o número de hardlinks com stat da seguinte maneira:

$ stat plantilla-disenos.odt 
  File: «plantilla-disenos.odt»
  Size: 12367       Blocks: 32         IO Block: 4096   fichero regular
Device: 803h/2051d  Inode: 319875      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   d4rio)   Gid: ( 1000/   d4rio)
Access: 2011-02-11 21:36:19.000000000 -0300
Modify: 2010-03-02 23:27:28.000000000 -0300
Change: 2010-04-10 17:46:27.000000000 -0300

Obrigado @geekosaur por esta referência:

The kernel has to restart pathname-to-inode translation (traversing the directory tree) to expand symlinks, whereas hard links all use the same inode. (You'll often see this referred to as namei, from the name of the kernel function that did this in traditional Unix.)

e isto (editado):

Hard links are very useful for disk-based incremental backup mechanisms like Apple's Time Machine, because you can have a full directory tree for each backup while sharing the space for files that haven't changed — and the filesystem keeps track of reference counting, so when the last reference to a given version goes away because the backup was expired/removed for space reasons, the space it used is automatically reclaimed. Some mail clients also use it for messages filed to multiple folders, for the same reason.

Felicidades

    
por 18.03.2011 / 19:51
3

Links "hard" compartilham o mesmo inode

$ touch foo
$ ln foo foolink # Creates a hard  link
$ ls -li foo foolink
54996 -rw-r--r-- 2 bsd users 0 2011-12-11 09:06 foo
54996 -rw-r--r-- 2 bsd users 0 2011-12-11 09:06 foolink

Se eu editar foo ou foolink, haverá apenas um arquivo e será atualizado. Se eu remover apenas um dos nomes de arquivo, o inode e os dados persistirão, o foolink sobreviverá.

$ rm foo
$ ls -li foo foolink
ls: cannot access foo: No such file or directory
54996 -rw-r--r-- 1 bsd users 0 2011-12-11 09:06 foolink

Se eu criasse o mesmo, mas com um link "suave" ou simbólico, Há um arquivo, um inode e um novo arquivo com seu próprio inode apontando para o primeiro.

$ touch foo
$ ln -s foo foolink # Create symlink
$ ls -li foo foolink
55029 -rw-r--r-- 1 bsd users 0 2011-12-11 09:11 foo
55033 lrwxrwxrwx 1 bsd users 3 2011-12-11 09:11 foolink -> foo

Se eu editar foo ou foolink, ainda haverá apenas um arquivo e ele será atualizado.

Se eu remover apenas o link simbólico, o inode e os dados persistirão. Se eu remover foo, os dados desaparecerão, o link simbólico persistirá, mas apontará para um arquivo inexistente.

$ rm foo
removed 'foo'
$ ls -l foo foolink 
ls: cannot access foo: No such file or directory
lrwxrwxrwx 1 bsd bsd 3 2011-12-11 09:11 foolink -> foo
    
por 11.12.2011 / 15:19
2

Um link suave aponta para outro nome de caminho. Esse nome de caminho pode ou não existir. O caminho não é procurado até você acessar o link simbólico. Se o caminho não existir quando você tentar acessá-lo, você terá um link simbólico quebrado.

Com um link físico, você tem um arquivo com vários nomes. Você não pode dizer que um deles é o arquivo "real" e os outros são apenas um link para ele. Eles são todos iguais. Não há um link rígido quebrado do jeito que há links simbólicos quebrados.

Links físicos funcionam apenas dentro de um único sistema de arquivos. Se você deseja vincular a um arquivo em um sistema de arquivos diferente (por exemplo, uma partição diferente ou um compartilhamento de rede), você deve usar um link temporário.

Outra grande diferença é o que acontece quando você exclui um arquivo vinculado. Se você excluir um de um par de arquivos com hardlink, crie um novo arquivo com o mesmo nome, você terá dois arquivos separados (o link desapareceu). Se você excluir o alvo de um link simbólico e criar um novo arquivo com o mesmo nome, o link apontará para o novo arquivo.

    
por 25.10.2011 / 04:39
1

HARD LINK (somente arquivos) vs SOFT LINK (arquivos ou diretórios) vs BIND (HARD LINK para diretórios)

Enquantoarespostadadaxelrodexplicabemaquestão,eupenseiqueaimagemnestecasofezumagrandediferença,especialmenteparainiciantesquenãoentendeminodeseojargãocomplicadodoLinuxainda.

Pensenisso,sevocê"deletou" tudo do seu disco, você pode rodar o software para restaurar os dados, porque os 1's e 0's ainda estão lá, você acabou de deletar todos os Hard Links. O objetivo do Recovery Software é reconstruir os Hard Links para entender os 0s e 1's

Eu li um ótimo "one liner" que fez tudo isso fazer sentido e eu queria compartilhar!

Todos os arquivos no Linux são "Hard Links" para os 0s e 1's no disco. Quando você cria um dado (0s & 1s), o sistema operacional cria um link físico na árvore de arquivos para referenciar esse ponto no disco rígido.

Crie o HARD LINK 2 e exclua HARD LINK 1 Arquivo Original :

Você pode criar outro link físico e excluir o arquivo original, e ainda terá acesso ao link físico recém-criado.

Excluir FILE (HARD LINK 1) que é SOFT LINKed para:

Se você excluiu o HARD LINK 1, acha que o SOFT LINK funcionaria? Não, o sistema operacional informará que o HARD LINK 1 não existe.

Excluir SOFT LINK para HARD LINK:

Ao contrário, se você excluir o SOFT LINK, o HARD LINK funcionará? Sim. Contanto que o sistema operacional tenha um HARD LINK File , ele informará que o preenchimento não foi excluído.

- Também vale a pena pesquisar / notar é o BIND, uma maneira de ligar dois diretórios como o symlinking de dois diretórios, mas é transparente para o sistema operacional (OS pode dizer quando você Symlink e alguns têm regras sobre o tempo que eles podem seguir Symlinks). Ele usa o suporte, não o LS, e pode ser configurado via FSTAB.

O que é uma montagem BIND

    
por 29.08.2015 / 07:32
1

Links físicos são entradas de diretório adicionais para o mesmo arquivo. Isso significa

  • Todos os links físicos para um arquivo devem estar no mesmo sistema de arquivos (porque uma entrada de diretório não pode apontar para um arquivo em um sistema de arquivos diferente), mas não necessariamente no mesmo diretório.
  • Não há diferença entre a entrada de diretório original e o novo link físico; a partir da visão do sistema operacional, eles são apenas duas entradas de diretório para o mesmo arquivo. Um arquivo é excluído apenas se todos dos links físicos forem excluídos (e, além disso, não resta nenhum processo que tenha esse arquivo ainda aberto).
  • Se você mover / renomear o "original", contanto que não o mova para outro sistema de arquivos, os outros links físicos não serão afetados; eles ainda apontam para o mesmo arquivo.
  • Muitos editores não gravam o novo conteúdo no mesmo arquivo ao salvar, mas fazem o seguinte procedimento:

    1. Escreva o novo conteúdo para um arquivo novo .
    2. Renomeie o arquivo antigo para um nome de backup (ou, se não for manter os backups da versão anterior, simplesmente exclua-o).
    3. Renomeie o arquivo recém-gravado para o nome do arquivo anterior.

    Esse esquema significa que qualquer outro link físico para o mesmo arquivo agora não apontará mais para o arquivo atual, mas para a versão anterior (isso é verdade mesmo no caso do editor excluir o arquivo antigo, porque no Unix, "excluir" "um arquivo significa apenas excluir seu link; somente se o link excluído for o único link que o arquivo real é excluído).

  • Como o link físico vai diretamente para o arquivo, você pode acessar esse arquivo mesmo que não tenha acesso ao local original desse arquivo (por exemplo, porque você não tem permissões no diretório a entrada original está em). Os únicos direitos que determinam o seu acesso são os direitos de acesso do próprio arquivo (que estão associados ao arquivo, não ao link; você não pode criar hard links com permissões diferentes para o mesmo arquivo) e os direitos de acesso ao caminho do hard link está contido em (basicamente, os direitos de execução do diretório no qual o link está e quaisquer diretórios-pai diretos e indiretos).

Links simbólicos, por outro lado, armazenam o nome do caminho (o nome do arquivo - ou melhor, sua entrada de diretório - potencialmente incluindo seu caminho, como /bin/sh ou subdir/foo.bar ) - de outro arquivo. Se o nome do caminho for relativo, ele sempre será interpretado em relação ao diretório em que o link está contido. Isso significa:

  • Um link simbólico pode se referir a arquivos em um sistema de arquivos diferente (até mesmo em um sistema de arquivos que não suporta links físicos ou suaves, como o FAT).

  • Se o arquivo original for excluído, o link simbólico não preservará o conteúdo do arquivo. A menos que existam outros links para o mesmo arquivo, o conteúdo do arquivo será eliminado. O link simbólico será deixado pendente (isto é, referindo-se a um nome de caminho que não corresponda a uma entrada de diretório). Por outro lado, a exclusão do link simbólico não afeta o arquivo original, pois se refere apenas ao nome do caminho.

  • Se o arquivo original for movido ou renomeado, o link simbólico não será atualizado, mas ficará pendente. Se você mover o link simbólico, ele só será interrompido se contiver um caminho relativo e o caminho não for mais válido a partir da nova posição.

  • Se o arquivo original for substituído por um novo arquivo com o mesmo nome (como no cenário do editor descrito acima), o link se referirá ao novo arquivo.

A maioria dos usos de hard links é basicamente uma maneira de ter uma cópia de um arquivo sem ter que armazenar o conteúdo do arquivo duas vezes. Isso funciona melhor se os arquivos nunca forem alterados novamente, pois, do contrário, é fácil quebrar acidentalmente o link (consulte o cenário do editor acima). Existem, é claro, casos em que você deseja que o link seja quebrado, como no caso de manter vários backups: Para arquivos que foram alterados em backups mais recentes, você não deseja que a cópia seja mais antiga backups para mudar também.

Normalmente, se você quiser um link, você usará um link simbólico. Um exemplo é quando você move um diretório para outra partição (porque o que está em fica cheio), você pode definir um link flexível da posição antiga para a nova, então qualquer programa que tente acessar o diretório no local antigo acessá-lo no novo local em vez disso. Isso não seria possível com hard links. No entanto, esteja ciente de que os links simbólicos no diretório movido podem quebrar se contiverem caminhos relativos que saiam do diretório movido.

    
por 30.08.2015 / 11:49
0

Um link físico manterá um arquivo no disco até que todos os links para ele, mesmo os primeiros (um "nome de arquivo" seja tecnicamente um link físico), tenham sido excluídos. Um link flexível pode ser deixado "pendurado" até que o arquivo que ele aponta (s / ed) seja substituído.

    
por 25.10.2011 / 04:41
0

Esta é uma pergunta muito antiga, mas eu tenho um caso de uso que exige que eu use hard links.

Sou músico e tenho muitos e muitos e muitos arquivos de áudio de vários tipos em vários discos rígidos conectados ao meu Mac. Terabytes vale a pena. Eu os tenho organizado principalmente muito bem com diretórios de links simbólicos para que eu possa encontrá-los pelo editor de conteúdo, estilo / som e outros critérios com base em como eu estou pensando no momento. Infelizmente, um programa que uso, o Ableton Live, é completamente incapaz de visualizar aliases ou links simbólicos de seu navegador de arquivos. A única solução que encontrei é criar hard links dos diretórios que eu quero ver e, então, tudo funciona bem.

Então, este é outro caso de quando você pode precisar usar links físicos, que podem não ter ocorrido a outros.

    
por 18.02.2017 / 03:21