Como a pesquisa de um arquivo (localização) ou o preenchimento automático funciona?

8

Eu sou usuário do Windows e venho do Windows com todos os tempos de indexação e espera eterna ao procurar arquivos, acho surpreendente a rapidez com que a localização do trabalho ou o preenchimento automático (que eu sei) funcionam no linux.

Existe alguma indexação sendo executada em segundo plano ou como isso é alcançado? Eu ainda tenho uma instalação bem limpa, talvez isso melhore com o tempo, mas no Windows, no momento em que você deseja pesquisar em uma pasta que não está indexada, é necessário aguardar alguns segundos.

oli206
fonte

Respostas:

18

Acho surpreendente a rapidez com que o trabalho de localização ou o preenchimento automático (que eu sei) funcionam no linux. ... Existe alguma indexação sendo executada em segundo plano ou como isso é alcançado?

Na verdade, são duas questões completamente distintas.

locateusa um índice (slocate o armazena /var/lib/slocate/), que é atualizado por um crontrabalho noturno . Esse trabalho noturno geralmente é executado aproximadamente às 1 ou 2 da manhã, horário local, e varre completamente todo o sistema (incluindo todas as unidades conectadas). O índice resultante é simplesmente uma lista de nomes de arquivos.

O preenchimento automático é tratado pelo seu shell. A maioria dos sistemas usa bash, assim bash-completioncomo a coleção de scripts que gerenciam como isso funciona. ( zshpossui uma coleção com o mesmo nome e a maioria dos outros shells possui alguma forma de conclusão embutida.) Quando Tabpressionado, o shell executa um script que decide, com base no que você já digitou, o que exatamente precisa para ser completado. O script gera uma lista de possíveis conclusões, que podem ou não ser a lista de arquivos no diretório atual ou a lista de arquivos executáveis ​​no seu $PATH. O locatecomando normalmente não é usado para isso.

greyfade
fonte
1
Obrigado! Eu vejo, por isso não é tão "mágico" :)
oli206
greyfade arruinou a magia sempre -_-
Michael Mrozek
@ Michael Mrozek: Desculpe. :(
greyfade
O shell executa um script não parece 100% correto, ao implementar um shell, as pessoas não devem se enganar ao pensar que devem escrever scripts externos. É simplesmente uma rotina no próprio código, pode ou não acessar arquivos externos para conveniência da configuração, mas a conclusão interna simples funciona bem.
Aki
1
@NabinKhadka Desde que minha resposta foi escrita, acho que o Ubuntu mudou para outro locateserviço. Não sei qual deles - não uso o Ubuntu - mas o mlocate vem à mente. Verifique /etc/updatedb.conf. Pode ter o caminho padrão para qualquer locateferramenta que você tenha.
greyfade
5

Normalmente, o find usa um índice que é gerado uma vez por dia por meio de um cron-job (/etc/cron.daily/mlocate no meu sistema, por exemplo). Não é nada sofisticado, basicamente um percurso completo do sistema de arquivos com algumas otimizações e a construção da estrutura de dados do índice.

Os shells provavelmente usam algum cache interno para a conclusão do comando, mas não usam um arquivo de índice global. Além disso, normalmente, os kernels do Unix mantêm um cache de dentry, ou seja, eles armazenam em cache as informações do diretório de arquivos usadas pelas listagens de diretórios etc. na memória (incluindo a descrição de arquivos inexistentes - que também é chamado de cache inverso).

maxschlepzig
fonte