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.