Você pode distinguir um arquivo com links físicos de um arquivo não vinculado com a "contagem de links". Eu vejo duas maneiras de obter isso na linha de comando:
% stat original
File: ‘original’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 804h/2052d Inode: 932815 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 500/ bediger) Gid: ( 1000/ bediger)
Access: 2012-07-13 22:13:52.317101530 -0600
Modify: 2012-07-13 22:13:52.317101530 -0600
Change: 2012-07-13 22:14:08.050894536 -0600
Birth: -
Ou
1010 % ls -li
total 0
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 original
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 secondary
Esse '2' solitário antes de "bediger" é a contagem de links. Observe que os dois nomes de arquivos têm o mesmo número de inode, 932815.
Estou certo de que esses dois comandos obtêm a contagem de links do campo st_nlink do struct stat, que é preenchido por uma stat()
chamada do sistema.
Tão perto quanto eu posso dizer, executar tar
com --hard-dereference
significa que, em vez de obter um único arquivo com dois nomes de arquivos distintos (como no exemplo acima), você obtém dois arquivos, cada um com um único nome de arquivo. tar
provavelmente verifica a contagem de links em cada arquivo e, por padrão, ao extrair, cria um link físico no segundo nome do arquivo para os dados do arquivo vinculado. Quando chamado --hard-dereference
na criação do arquivo morto, ele parece criar um arquivo totalmente novo para o segundo nome de arquivo quando a chamada de extração tar
é executada.