Qual é a diferença entre links físicos e arquivos copiados?

20

Meu entendimento é que os hard links incluem uma cópia do arquivo original e que eu poderia excluir um arquivo com link físico em um diretório e ainda existiria no outro diretório.

Se for esse o caso, por que eu desejaria usar links físicos? Por que não apenas dois arquivos separados?

    
por Mike B 16.02.2013 / 19:06

4 respostas

27

Se você copiar um arquivo, ele duplicará o conteúdo. Então, se você modificar o conteúdo de um único arquivo, isso não terá efeito sobre o outro.

Se você criar um link físico que criará um arquivo apontando para o mesmo conteúdo. Então, se você alterar o conteúdo de um dos arquivos, a alteração será vista em ambos.

    
por 16.02.2013 / 19:15
12

Um link físico é basicamente um segundo nome de arquivo para o mesmo arquivo. Portanto, se você vincular um arquivo a um arquivo, ele será apenas uma vez no sistema de arquivos e, portanto, só ocupará espaço uma vez. Então você quer usar isso se você deseja salvar o espaço em disco

    
por 16.02.2013 / 19:09
5

Em sistemas de arquivos unix, cada nome de arquivo é, na verdade, um link rígido para a localização dos dados no disco, chamado de inode. Se você criar um novo link físico para um arquivo existente, ele não ocupará espaço extra no disco, pois é apenas outro ponteiro para os mesmos dados. Se você editar os dados por um ou outro link (ou editar o inode diretamente) ambos os arquivos serão alterados.

O sistema mantém uma contagem de quantos links rígidos cada inode possui. Quando a contagem de links é 0, o arquivo não pode mais ser alcançado e os dados são marcados como seguros para serem sobrescritos. Assim, dado um arquivo com 2 links físicos, se você excluir um dos links, os dados não serão excluídos. Somente se você excluir os dois, os dados desaparecerão.

Você pode ver os números de inode de arquivos usando a opção -i para o comando ls .

Um link, por outro lado, aponta para outro arquivo pelo nome do arquivo. Se você mover ou excluir o arquivo original, o link será quebrado.

    
por 17.02.2013 / 00:20
0

Com referência à parte da pergunta que perguntou "Por que eu desejaria usar links físicos?":

Arquivos com link físico (ou, para esse efeito, os que possuem um link simbólico) oferecem uma maneira útil de ter um único arquivo executável que pode ser feito para se mascarar com propósitos diferentes.

Ou seja, o nome pelo qual o código é chamado pode ser examinado para determinar quais opções estão disponíveis para execução. Isso permite o desenvolvimento e o empacotamento de um grande código com toda a funcionalidade compartilhada necessária para propósitos ligeiramente diferentes. Do ponto de vista do usuário, a especificação de "o que" executar (por nome) limita as escolhas e a apresentação a um subconjunto de opções mais gerenciável.

Um exemplo clássico é o LVM. Ao mesmo tempo, o HP-UX usava arquivos com link físico para vários executáveis (por exemplo, vgdisplay , vgcreate , vgextend , etc. Hoje, como o Linux, esses comandos são realmente links simbólicos (soft) para o lvm executável.

    
por 16.02.2013 / 21:23