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?
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
fonte
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
-i
opção para ols
comandoUm link virtual, por outro lado, aponta para outro arquivo por seu nome. Se você mover ou excluir o arquivo original, o link será quebrado.
fonte
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 olvm
executável.fonte