A contagem do link físico é armazenada no inode. Ele começa em 1 quando o arquivo é criado, aumenta em 1 sempre que a chamada do sistema link
for bem-sucedida e diminui em 1 sempre que a chamada do sistema unlink
for bem-sucedida.
A única maneira de encontrar todos os hard links para o mesmo arquivo, ou seja, encontrar todos os caminhos que levam a um determinado inode, é percorrer todo o sistema de arquivos e comparar os números de inode. O inode não aponta de volta para as entradas do diretório.
Diretórios são um caso especial: seus hard links obedecem a regras rígidas. (Algumas variantes unix permitem que o root ignore essas regras por conta do administrador.) Os links físicos para um diretório são .
entry, ..
entry de seus filhos e uma entrada em seu diretório pai (o pai sendo o diretório atingido pelo diretório ..
entry).
Não há como encontrar todos os links simbólicos apontando para um arquivo. Eles podem estar em qualquer lugar, inclusive em um sistema de arquivos que não esteja montado.
Com o GNU ou FreeBSD find, você pode usar find /some/dir -samefile /path/to/foo
para encontrar todos os hard links para o arquivo /path/to/foo
que estão sob /some/dir
. Com a opção -L
, você pode encontrar todos os links físicos e físicos para esse arquivo. Você pode encontrar um inode por número com o predicado -inum
em vez de -samefile
.