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

22

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

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

Mike B
fonte

Respostas:

29

Se você copiar um arquivo, ele duplicará o conteúdo. Portanto, se você modificar o conteúdo de um único arquivo, isso não afetará o outro.

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

TheMeaningfulEngineer
fonte
3
Para arquivos muito grandes, a criação de um link físico é sempre mais rápida que a cópia do arquivo original?
Jorge Bucaran 15/10
14

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

Pedro
fonte
4
Obrigado pela resposta rápida. Então, por que eu gostaria de usar um link físico em vez de um link virtual?
Mike B
5
Um softlink é basicamente um ponteiro para outro arquivo. Portanto, se você excluir o arquivo original, o softlink ainda existirá, mas será interrompido. Um hardlink são dois nomes para o mesmo arquivo, para que possam ser excluídos individualmente.
Peter Peter
19
A explicação de Peter é boa, mas ele deixou de fora a "contagem de links". No inode do arquivo (nos metadados do disco), há uma contagem de links. Um link físico aumenta a contagem de links, um link virtual não. O kernel tem permissão para excluir o conteúdo de um arquivo se a contagem de links cair para zero.
Bruce Ediger
4
Eu acho que a resposta de Alan para isso tem um ponto importante: alterar um arquivo altera todos os seus hardlinks, com uma cópia eles teriam conteúdo diferente.
donothingsuccessfully
6

Nos sistemas de arquivos unix, todo nome de arquivo é na verdade um vínculo físico com a localização dos dados no disco, chamada de inode. Se você criar um novo link físico para um arquivo existente, não haverá espaço extra no disco, pois é apenas mais um ponteiro para os mesmos dados. Se você editar os dados por um ou outro link (ou editar o inode diretamente), os dois arquivos serão alterados.

O sistema mantém uma contagem de quantos links físicos 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 substituídos. Portanto, dado um arquivo com 2 links físicos, se você excluir um link, 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 dos arquivos usando a -iopção para o lscomando

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

rjmunro
fonte
0

Com referência à parte da pergunta, "por que eu gostaria de usar links físicos?":

Os arquivos vinculados por hardware (ou, por outro lado, os vinculados a soft (simbólico)) oferecem uma maneira útil de ter um único arquivo executável que pode ser criado para mascarar para diferentes propósitos.

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 pedaço de código com toda a funcionalidade compartilhada necessária para finalidades ligeiramente diferentes. Da perspectiva do usuário, a especificação de "o que" executar (por nome) limita as opções e a apresentação a um subconjunto de opções mais gerenciável.

Um exemplo clássico é o LVM. Houve uma época em HP-UX utilizados arquivos com link para os vários executáveis (por exemplo vgdisplay, vgcreate, vgextend, etc. Hoje, como o Linux, esses comandos são realmente simbólicos links (macios) para o lvmexecutável.

JRFerguson
fonte
Isso não tem nada a ver com a pergunta.
Rjmunro
1
@rjmunro Eu imploro para diferir. O OP perguntou: "por que eu gostaria de usar links físicos?"
JRFerguson
Eu não entendo o último exemplo. Antes, havia links físicos para muitos executáveis, agora existem links flexíveis para um executável. Como esses links flexíveis são distinguíveis?
Emanuel Berg
@EmanuelBerg Meu argumento foi que, independentemente de serem usados ​​links físicos ou virtuais, é o nome pelo qual o executável é chamado que determina as opções e argumentos válidos para execução.
JRFerguson
1
@EmanuelBerg TMTOWTDI
JRFerguson