De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


O comando locate - listagem de arquivos do sistema

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 05 de junho de 2017

Para localizar arquivos em nosso sistema podemos usar dois comandos: find e locate. Com o comando find realizamos uma busca em tempo real, já com o comando locate a busca é feita a partir de uma base de dados atualizada periodicamente, segundo nossa conveniência.

O banco de dados utilizado pelo comando locate fica localizado em /var/lib/mlocate/mlocate.db.

O banco de dados é criado por um outro utilitário chamado updatedb. Ao ser invocado, este utilitário varre todo o sistema gerando uma listagem completa que por sua vez é copiada para o banco de dados.

Como o banco de dados é uma imagem da situação do sistema em um determinado momento, pode ocorrer que este banco de dados esteja desatualizado quando consultado. Por esta razão, a frequencia de atualização irá depender das necessidades de uso do utilitário. Dependendo do tamanho de seu sistema, você pode agendar, via cron, a execução do updatedb a cada hora, a cada dez minutos, enfim, com a frequencia que for mais conveniente.

No exemplo abaixo de crontab, o comando updatedb será executado a cada hora cheia.

# m h dom mon dow usercommand
0 * * * * root  updatedb

O modo como o comando updatedb atualiza o banco de dados é regulado pelo arquivo de configuração /etc/updatedb.conf:

PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs /var/lib/schroot /backup"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660
ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre tmpfs usbfs udf
fuse.glusterfs fuse.sshfs curlftpfs ecryptfs fusesmb devtmpfs"

A variável PRUNEPATHS define os diretórios que serão ignorados na indexação. Já a variável PRUNEFS identifica os tipos de partições que serão ignorados. No meu sistema atual, LinuxMint, eu acrescentei apenas o diretório /backup para ser ignorado, pois na maior parte dos casos o conteúdo deste diretório não me interessa.

Buscar por um arquivo é bastante simples. Basta fornecer o argumento de busca ao comando locate:

$ locate http

Com a diretiva -0 o resultado será exibido em apenas uma linha. Esta diretiva é particularmente interessante quando se deseja processar a saída do comando em um shell script:

for f in `locate -0 http`
do
  comando1
  comando2
  ...
done

Podemos também obter do comando locate apenas o número de ocorrências do termo pesquisado:

$ locate -c http

Como o comando updatedb atualiza um arquivo que se encontra no diretório /var/lib/mlocate, ele deve ser executado pelo usuário root. Entretanto, podemos também criar uma versão customizada, contendo apenas os arquivos que interessam. Por exemplo, para criar uma versão contendo apenas a listagem dos arquivos contidos a partir do diretório /home, basta emitir o comando abaixo:

$  updatedb -l 0 -o $HOME/.mlocate.db -U /home

Para fazer uma consulta utilizando a versão local do banco de dados, use a seguinte sintaxe:

$  locate -d $HOME/.mlocate.db [argumento de busca]

Muito importante, é possível fazer buscas ignorando se as letras são maiúsculas ou minúsculas. Para isto basta fornecer a diretiva -i:

$  locate -i http

O comando locate na verdade é um link lógico que aponta para o comando mlocate:

$ ls -l /etc/alternatives/locate
lrwxrwxrwx 1 root root 16 Jun 14  2016 /etc/alternatives/locate -> /usr/bin/mlocate

Os comandos mlocate e updatedb fazem parte do pacote mlocate. Por padrão, este software já vem instalado em sistemas Debian GNU/Linux e derivados.

Citando o documento Package: mlocate (0.26-1):

Existem várias implementações do locate: a original, encontrada nas findutils da GNU, slocate e mlocate. As vantagens do mlocate são:

  • indexa todo o sistema de ficheiros, mas os resultados da pesquisa só incluem ficheiros a que o utilizador tem acesso. Consegue isto ao actualizar a base de dados como root, mas tornando-a inacessível para utilizadores normais, que apenas lhe podem aceder através do programa. O slocate também faz isto, mas o locate original não.
  • em vez de reler todo o conteúdo de todos os directórios de cada vez que a base de dados é actualizada, o mlocate mantém informações temporais na sua base de dados e consegue determinar se o conteúdo dos directórios foi alterado sem os ler novamente. Isto torna as actualizações muito mais rápidas e menos exigentes para o disco rígido. Esta característica só se encontra no mlocate.

Ao instalar o mlocate, o binário /usr/bin/locate irá apontar para o mlocate através do mecanismo de alternativas. Após a instalação, pode desejar executar o /etc/cron.daily/mlocate manualmente para criar a base de dados, pois caso contrário o mlocate não funcionará até ser executado pelo cron (uma vez que o mlocate não usa a mesma base de dados que o locate). Também pode querer remover o pacote "locate" para não ter duas bases de dados distintas a serem actualizadas regularmente no seu sistema.

Referências

Veja também

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Rubens Queiroz de Almeida