Onde as informações sobre hard / soft links são armazenadas?

5

Onde o sistema * nix armazena informações sobre o número de hard links para um inode específico? Não consigo encontrar nenhuma informação sobre isso. Em todos os lugares, o que é um link difícil, mas raramente uma informação um pouco mais avançada que toca coisas relacionadas a inodes.

Um inode armazena informações sobre o número de links, mas de onde ele é obtido? Posso localizar todos os links (hard e soft) conhecendo apenas o número de inode?

    
por Mike 27.01.2014 / 22:46

1 resposta

4

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 .

    
por 27.01.2014 / 23:01