Como a pesquisa de um arquivo (localizar) ou preenchimento automático funciona?

7

Eu sou um usuário do Windows e venho do Windows com toda a indexação e eternos tempos de espera ao pesquisar arquivos, acho surpreendente a rapidez com que localizar o trabalho ou o autocompletar (que eu sei) trabalho no linux.

Existe alguma indexação sendo feita em segundo plano ou como isso é conseguido? Eu ainda tenho uma instalação muito limpa, então talvez isso vá mal com o tempo, mas no Windows no momento em que você deseja procurar em uma pasta que não está indexada, você tem que esperar por alguns segundos.

    
por oli206 10.10.2010 / 19:43

2 respostas

17

I find it surprising how fast does locate work or the autocompletion (that I know) work in linux. ... Is there any indexing being done in the background or how is this achieved?

Na verdade, são duas perguntas completamente distintas.

locate usa um índice (o slocate armazena em /var/lib/slocate/ ), que é atualizado por um trabalho noturno cron . Este trabalho noturno normalmente é executado em cerca de 1 ou 2AM, hora local, e analisa completamente todo o seu 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 , então bash-completion é a coleção de scripts que gerenciam como isso funciona. ( zsh tem uma coleção de nome semelhante, e a maioria dos outros shells tem alguma forma de preenchimento embutido.) Quando a tecla Tab é pressionada, o shell executa um script que decide, com base no que você já digitou, o que exatamente precisa ser completado. Em seguida, 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 em $PATH . O comando locate é normalmente não usado para isso.

    
por 10.10.2010 / 20:28
4

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

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

por 10.10.2010 / 20:11

Tags