Você escreveu:
It surprises me to see find iterate/walk through the complete filesystem when I do a simple find -inum 12345
find
, por definição, faz uma caminhada na árvore iniciando no diretório ou diretórios fornecidos, com um diretório inicial padrão de .
.
find -inum 12345
percorrerá toda a árvore de diretórios, começando com o diretório de trabalho atual. Ele provavelmente não passará por um sistema de arquivos inteiro, a menos que .
contenha um ponto de montagem do sistema de arquivos.
Existem maneiras mais eficientes de encontrar todos os arquivos com um determinado número de inode - fsdb
, debugfs
e ncheck
na resposta à qual você se vinculou - mas find
tem que fazer uma caminhada na árvore por causa normas . Note que se o inode que você está procurando tem apenas um link, você pode dar a find
a opção -quit
, se ela suportar, encerrar a caminhada da árvore após a primeira partida.
Mesmo esses outros comandos nem sempre são rápidos, em parte porque eles precisam examinar um sistema de arquivos inteiro em vez de apenas uma árvore de diretórios, mas eles fazem o melhor que podem com os dados disponíveis para trabalhar. O problema básico é a estrutura da maioria dos sistemas de arquivos Unix.
- existem muitas informações no inode de um arquivo, mas "o nome ou nomes do arquivo" e "o diretório ou diretórios que contêm o arquivo" não estão entre eles.
- A estrutura de um diretório na maioria dos sistemas de arquivos Unix é muito simples: ele contém apenas uma lista de entradas, cada uma delas com um par (número de inode, nome de arquivo).
- Para encontrar o diretório ou diretórios que contenham inode 12345 e o nome ou nomes pelos quais esses diretórios se referem a ele, na maioria dos sistemas de arquivos Unix, esses comandos precisam procurar em todas as entradas de todos os diretórios no sistema de arquivos até encontrar todos os diretórios. entradas correspondentes. O inode de um arquivo contém o número de entradas de diretório que se referem a ele, assim eles podem sair da pesquisa assim que encontrarem muitas entradas.
- Por outro lado, encontrar um nome de diretório é muito mais eficiente, porque cada diretório contém o número de inode de seu diretório pai,
..
, portanto, apenas um diretório precisa ser pesquisado para uma entrada correspondente. (Há uma exceção: o diretório raiz de um sistema de arquivos possui uma entrada ..
que aponta para o mesmo diretório).