Comando locate

O comando locate é uma ferramenta essencial para qualquer usuário ou administrador de sistemas Linux que necessita encontrar arquivos de forma rápida no sistema de arquivos. Diferentemente do comando find, que procura por arquivos em tempo real e pode ser mais lento em sistemas muito grandes, o locate oferece resultados praticamente instantâneos. Essa velocidade é possível graças ao comando updatedb, que trabalha em conjunto com o locate para criar e manter um banco de dados com a localização dos arquivos.

O funcionamento desta dupla de comandos é baseado em uma premissa simples, porém engenhosa. Periodicamente ou manualmente, o comando updatedb é executado. Sua função é percorrer as estruturas de diretórios do sistema e compilar uma lista de todos os arquivos e seus caminhos absolutos. Essa lista é então armazenada em um banco de dados próprio. Quando um usuário executa o comando locate nome_do_arquivo, o sistema não percorre o disco rígido em tempo real, mas sim consulta esse banco de dados pré-compilado, retornando os caminhos de todos os arquivos cujo nome correspondem ao padrão pesquisado. Isso torna a busca extremamente eficiente.

Os arquivos de configuração e de banco de dados são cruciais para o funcionamento adequado do sistema locate/updatedb. O arquivo de configuração principal, normalmente localizado em /etc/updatedb.conf, permite que o administrador do sistema refine o comportamento do updatedb. Através dele, é possível definir quais sistemas de arquivos (como NFS ou proc) e quais caminhos (como /tmp ou /media) devem ser “podados” (prune), ou seja, ignorados durante a varredura para evitar a inclusão de arquivos temporários ou desnecessários no banco de dados.

Já a localização do banco de dados pode variar de acordo com a distribuição Linux e a implementação utilizada. Em sistemas que usam a implementação tradicional do GNU findutils, o banco de dados frequentemente reside em /var/cache/locate/locatedb. Por outro lado, em sistemas que utilizam o mlocate (uma implementação mais moderna com recursos de segurança), o caminho comum é /var/lib/mlocate/mlocate.db. O mlocate introduziu uma melhoria significativa: ele é capaz de ler a permissão dos diretórios, garantindo que um usuário, ao pesquisar, só veja arquivos aos quais ele teria acesso de leitura.

O pacote plocate (que significa “parallel locate”) é um sucessor moderno e mais rápido do mlocate e do slocate. Sua principal inovação é a capacidade de criar um índice de banco de dados muito mais compacto e que pode ser consultado de forma extremamente rápida, sem a necessidade de descomprimir e vasculhar todo o conteúdo, como acontecia com as versões anteriores. Isso resulta em buscas quase que instantâneas, mesmo em sistemas com milhões de arquivos. O plocate é projetado para ser um substituto imediato (“drop-in replacement”) para o mlocate, utilizando o mesmo comando locate e a mesma rotina de atualização via updatedb, muitas vezes sendo o padrão em distribuições Linux mais recentes. Ele pode ser instalado pelo comando “sudo apt install plocate”.

Para verificar qual desses pacotes locate está instalado no seu sistema, execute os seguintes comandos (o último contém o locate tradicional):

dpkg -s plocate
dpkg -s mlocate
dpkg -s findutils

O locate-updatedb.timer (ou nomes similares como mlocate-updatedb.timer e plocate-updatedb.timer) é uma unidade de timer do systemd projetada para automatizar a execução periódica do comando updatedb. Esta unidade representa a substituição moderna dos tradicionais jobs do cron para esta finalidade, aproveitando os recursos avançados de agendamento do systemd. Ao ser ativado, o timer dispara um serviço companion (como plocate-updatedb.service), que por sua vez executa o script ou comando necessário para reconstruir o índice de arquivos, geralmente com tipo oneshot e prioridade de E/S ajustada para não prejudicar o desempenho do sistema. Dependendo da distribuição Linux e da implementação do locate instalada (como mlocate ou plocate), o timer pode ser habilitado automaticamente durante a instalação do pacote, ou pode necessitar de ativação manual pelo administrador. Para gerenciar este timer, comandos como systemctl enable (para ativar na inicialização) e systemctl start (para iniciar imediatamente) são utilizados.

Por padrão, estes timers são configurados para acionar a atualização do banco de dados uma vez por dia. No entanto, pode acontecer do comando estar configurado para atualizar a base toda meia noite, mas o computador estar desligado essa hora e as outras configurações padrão tornarem essa atualização impraticável. Se deseja personalizar isso de alguma forma, você pode criar um arquivo de override para ele, com os seguintes comandos:

sudo mkdir -p /etc/systemd/system/plocate-updatedb.timer.d
sudo nano /etc/systemd/system/plocate-updatedb.timer.d/override.conf

O arquivo criado pode ter o seguinte conteúdo:

[Timer]
# Limpa as configurações originais para redefinir
OnCalendar=
OnCalendar=daily
# Remove o atraso aleatório de 1 hora
RandomizedDelaySec=0
# Reduz a folga de 6 horas para apenas 1 minuto
AccuracySec=1min
# Garante execução 10 minutos após o boot (para arquivos novos do dia)
OnBootSec=10min
Persistent=true

Por fim, para aplicar as mudanças, use:

sudo systemctl daemon-reload
sudo systemctl restart plocate-updatedb.timer

O comando “systemctl cat locate.timer” permite ver tudo o que há dentro do arquivo original e do override gerado.

Com o plocate, a atualização do banco de dados é extremamente rápida (frequentemente menos de 1 segundo). Não há motivo para o Debian te fazer esperar 1 ou 6 horas por uma tarefa tão leve. Com esse ajuste, 10 minutos após você logar, o banco de dados estará 100% atualizado com tudo o que existe no disco.

Fontes

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.