No OpenBSD , o banco de dados de localização é, por padrão, reconstruído uma vez por semana pelo /etc/weekly
script chamando /usr/libexec/locate.updatedb
como usuário nobody
.
O utilitário locate.updatedb
é um script /bin/sh
( pdksh
no OpenBSD) que mais ou menos executa find
nos sistemas de arquivos raiz. Qualquer coisa que nobody
possa acessar é colocada no banco de dados de localização.
Acho difícil acreditar que find /
seria mais rápido que locate
em um sistema no qual locate
usa um banco de dados de arquivos criado por meio de find /
.
A diferença é, obviamente, que você pode encontrar mais arquivos executando find
como um usuário que tenha mais acesso do que o usuário nobody
.
No Linux , pelo menos na máquina Ubuntu a que tenho acesso no trabalho, o banco de dados locate
parece ser recriado diariamente, de acordo com o manual locate(8)
. Isso é feito através do utilitário updatedb
.
Este utilitário (um link simbólico para /usr/bin/updatedb.mlocate
nesta máquina) é um binário compilado pertencente ao pacote mlocate
.
Você pode dar uma olhada em as fontes de mlocate
se quiser, mas é basicamente um programa em C que atravessa o sistema de arquivos. mlocate
também tenta evitar a passagem de bits do sistema de arquivos que não mudou entre as execuções.
Mais uma vez, acho difícil acreditar que consultar o banco de dados mlocate
seria mais lento (sob quaisquer circunstâncias) do que executar find /
.
No final do dia, é por isso que todas as ferramentas locate
(que eu conheço) funcionam em um banco de dados.