Você está na página 1de 9

Comando locate

Salviano A. Leo 25/12/2013

Sumrio
1 Introduo 2 Como o comando locate funciona? updatedb e updatedb.conf 3 Sintaxe do comando locate 4 Exemplos de uso comando locate 4.1 Procurando por um arquivo . . 4.2 Mostrando somente uma contagem . . . . . . . . . . . . . . . Introduo 1 1 3 3 3 5 4.3 4.4 4.5 4.6 4.7 Usando o updatedb para atualizar o banco de dados mlocate Mudana da localizao do banco de dados mlocate . . . . Vericando a existncia de um arquivo . . . . . . . . . . . . . . Ignorando casos na sada da busca Restringindo a sada da busca .
Section 1

6 6 7 7 8

Quando preciso localizar alguns arquivos no sistema ou em alguns diretrios, pode-se usar o comando find para encontra-los. Embora ele seja um bom utilitrio para realizar pesquisas, porm ele lento. No entanto o comando locate pode procurar arquivos com muita rapidez. Embora o comando locate seja muito rpido, ele ainda no permite que se deixe de lado o comando find porque ele tem algumas limitaes, como ser mostrado. Como o comando locate funciona? updatedb e updatedb.conf
Section 2

Quando foi dito que o comando locate faz pesquisas muito rapidamente, a primeira questo que surge o que o comando locate faz para ser to rpido? Bem, o comando locate no busca os arquivos no disco, em vez disso, ele procura pelos arquivos em caminhos denidos em um banco de dados database [?]. O banco de dados database um arquivo que contm as informaes sobre todos os arquivos do seu sistema e seus respectivos caminhos. O arquivo de banco de dados database do comando locate est localizada em:
/ var / lib / mlocate / mlocate . db

A prxima questo lgica : o que mantm esta base de dados mlocate.db do comando locate atualizada? Bom o utilitrio responsvel por essa tarefa o updatedb, o qual quando o mesmo executado, ele verica todo o sistema e atualiza o arquivo do banco de dados mlocate.db. Uma da limitao do comando locate a sua dependncia em relao ao banco de dados que pode ser atualizado pelo utilitrio updatedb. Portanto, para obter resultados conveis e atualizados 1

em sua pesquisa com o comando locate, o banco de dados que ele usa para realizar a pesquisa deve estar sempre atualizado e para tal necessrio atualizar o banco de dados mlocate.db com o comando updatedb em intervalos regulares. Pode-se congurar o utilitrio updatedb conforme suas necessidades. Isto pode ser conseguido atravs da atualizao do updatedb.conf. Este um arquivo de congurao que updatedb l antes de atualizar o banco de dados. O updatedb.conf est localizado em /etc/:
# cat / etc / updatedb . conf PRUNE _BIND_MO UNTS = " yes " PRUNENAMES = " . git . bzr . hg . svn " PRUNEPATHS = " / tmp / var / spool / media " PRUNEFS = " NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs \ coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf \ fuse . glusterfs fuse . sshfs ecryptfs fusesmb devtmpfs "

Note que aqui a ltima linha foi quebrada para que mostrasse a linha inteira. O arquivo updatedb.conf contm informaes sob a forma de VARIVEIS=VALORES. Estas VARIVEIS so classicadas como: PRUNEFS: Uma lista separada por espaos em branco dos tipos de sistema de arquivos (como o usado em /etc/mtab), que no deve ser vericado pelo updatedb. O tipo de sistema de arquivo correspondente caso-insensvel (indiferente a maisculas e minscula. Por padro, nenhum tipo de sistema de arquivos ignorado. Ao adicionar um sistema de arquivos nessa lista ele ser ignorado, todos os sistemas de arquivos montados na subrvore so ignorados tambm, mesmo que seu tipo no coincida com qualquer entrada na PRUNEFS. PRUNENAMES: Uma lista de nomes de diretrio (sem caminhos) separada por espaos que no devem ser examinadas pelo updatedb. Por padro, nenhum nome de diretrio ignorado. Note que apenas os diretrios podem ser especicados, e nenhum mecanismo padro usado. PRUNEPATHS: Uma lista de nomes de caminho de diretrios separada por espaos que no devem ser examinadas pelo updatedb. Cada nome de caminho deve ser exatamente na forma em que o diretrio ser relatado pelo locate. Por padro, nenhum caminhos ignorado. PRUNE_BIND_MOUNTS: Uma das seqncia de 0, no, 1 ou sim. Se PRUNE_BIND_MOUNTS for 1 ou sim, montagens por vinculao no so vericados pelo updatedb. Todos os sistemas de arquivos montados na subrvore de uma montagem vinculada so ignorados, bem como, mesmo se eles no so montados por vinculao. Por padro, montagens por vinculao no so ignorados. Note-se que todas as informaes de congurao acima tambm pode ser alterado ou atualizado atravs das opes de linha de comando para o utilitrio updatedb. Com as montagens por vinculao [2], pode-se montar tudo, ou mesmo parte de um sistema de arquivos j montado em um outro local, e mantendo a acessibilidade do sistema de arquivos em ambos os pontos de montagem ao mesmo tempo! Por exemplo, pode-se usar uma montagem por vinculao para montar o seu sistema de arquivos raiz existente no seguinte diretrio /home/misterx/legal do usurio misterx, como segue:
> mount -- bind / / home / misterx / legal

Sintaxe do comando locate

Section 3

O comando locate muitas vezes a maneira mais simples e rpida de encontrar os locais de arquivos e diretrios no Linux e outros sistemas. Sua sintaxe bsica para localizar [3], nos sistemas operacionais do tipo Unix :
locate [ op es ] express o

Quando ele usado sem opes, ele ir exibir cada caminho absoluto para o qual o usurio tem permisso de acesso que contenha qualquer um dos nomes de arquivos e/ou diretrios que foram fornecidos a ele como argumentos (ou seja, dados de entrada, a expresso). O caminho absoluto, tambm conhecido como caminho completo, a hierarquia de diretrios do diretrio raiz para o arquivo ou diretrio designado. O diretrio raiz o diretrio no topo do sistema de arquivos (ou seja, a hierarquia de arquivos) que contm todos os outros diretrios e arquivos no sistema e que designado por uma barra (/). importante que o caminho absoluto seja retornado tanto porque ele mostra os locais exatos do sistema como porque ele torna possvel indicar a localizao dos arquivos ou diretrios que tm o mesmo nome mas diferentes caminhos absolutos. Assim, por exemplo, a seguinte comando ir listar os caminhos absolutos de todos os arquivos chamados arquivo1 e todos os diretrios dir1 para o qual o usurio tinha permisso de acesso:
> locate arquivo1 dir1

Ele tambm ira listar todos os outros caminhos absolutos que contenham essas palavras. Exemplos de uso comando locate 4.1 Procurando por um arquivo
Section 4

Par procurar por um arquivo particular, faa o seguinte


> locate sysctl . conf / etc / sysctl . conf / etc / ufw / sysctl . conf / usr / share / doc / procps / examples / sysctl . conf / usr / share / man / man5 / sysctl . conf .5. gz

O seguinte comando ir procurar pelo arquivo updatedb.conf em todo o sistema de arquivo


locate updatedb . conf / etc / updatedb . conf / usr / share / man / man5 / updatedb . conf .5. gz

Tambm pode-se usar "locate -0"para mostrar todo o resultado da pesquisa em uma nica linha. Por exemplo,
> locate -0 updatedb . conf / etc / updatedb . conf / usr / share / man / man5 / updatedb . conf .5. gz

A especicidade da busca pode ser aumentada usando os caracteres curigas (*) ou outras expresses regulares. Curingas so caracteres que podem ser usados para substituir qualquer 3

outro trecho ou carcter. Por exemplo, o caractere asterisco (*) um curinga que pode representar qualquer caractere nico ou qualquer palavra contendo qualquer nmero de caracteres. As expresses regulares so uma sequncia que descrevem ou correspondem a um conjunto de palavra, de acordo com certas regras de sintaxe. Por exemplo, o comando a seguir usa o curinga (*) para exibir todos os arquivos do sistema que tm a extenso de arquivo do tipo .png:
> locate " *. png "

A opo -q usada para suprimir mensagens de erro, tais como aquelas que podem ser devolvidas no caso do usurio no tem permisso para acessar determinados arquivos ou diretrios. Assim, o seguinte comando ira suprimir as mensagens de erro do exemplo anterior:
> locate " *. png " -q

Muitas vezes, ocorre de obtermos um grande nmero de resultados como retorno de uma busca qualquer. A opo -n seguido por um nmero inteiro limita os resultados para o nmero especicado. Por exemplo, o seguinte comando deve exibir apenas 15 resultados em uma busca por arquivos que tm uma extenso .html:
> locate -n 15 " *. html "

o qual equivalente ao comando


> locate " *. html " | head -n 15

Uma alternativa usar um pipe (representada pela barra vertical |) para redirecionar a sada do locate a partir da tela de exibio para o paginador less como mais ou menos, que apresenta apenas uma tela cheia de sada de cada vez, por exemplo,
> locate " *. html " | less

A opo -i faz uma pesquisa de maisculas e minsculas. Ou seja, ele ir retornar todos os resultados que coincidem com os argumentos, independentemente de letras individuais so minsculas ou maisculas. Por exemplo, o seguinte retornaria todos os arquivos com a extenso html, HTML, ou alguma combinao destes..:
> locate -i " *. HtmL "

Em alguns sistemas, como a Red Hat, a slocate programa instalado por padro em vez de localizar e digitar o comando localizar ativa um script (ou seja, um programa curto), que causa slocate para ser lanado. slocate fornece uma maneira segura de indexar e procurar rapidamente os arquivos em um sistema de armazenamento de permisses de arquivos e dados de propriedade de modo que os usurios no vo ver os arquivos para os quais eles no tm acesso. A opo-V pode ser usado para mostrar a verso do localizar usado, incluindo se localizar ou slocate. Outra maneira de determinar se slocate est sendo usado ver se um caminho absoluto, como /usr/bin/slocate devolvido quando o seguinte comando emitido:

> locate locate

locate e slocate realmente pesquisar um locate.db ou slocate.db incorporado na base de dados, denominados, respectivamente, em vez de toda a unidade de disco rgido em si, a m de proporcionar um tempo de procura muito mais curto. Este banco de dados atualizado automaticamente em uma base regular por cron, um pequeno programa que executado em segundo plano, executar vrias tarefas em intervalos regulares. A atualizao feita a cada noite, se o computador estiver ligado continuamente. Porque o banco de dados no atualizado imediatamente, criado recentemente arquivos e diretrios podem no aparecer quando procurando por eles com localizar ou slocate. Felizmente, no entanto, uma simples questo de atualizar o banco de dados manualmente, embora possa demorar alguns minutos. Atualizao manual pode ser feito o login como usurio root (ou seja, o usurio administrativo), por exemplo, usando o su (ou seja, substituir usurio) de comando, e em seguida, emitir o seguinte comando:
> updatedb

A mesma coisa pode ser feita pelo usurio root usando localizar com (, ou seja, atualizao) opo, ou seja, sua-u,
> locate -u

Para os curiosos, o banco de dados est localizado em /var/lib/slocate/slocate.db em alguns sistemas, como a Red Hat. A sua localizao exata em qualquer sistema especco pode ser encontrado pelo usurio root (porque os usurios comuns no tero permisso de acesso na maioria dos sistemas) com o comando localizar o seguinte:
> locate locate . db

O banco de dados um arquivo binrio (ou seja, um arquivo no-texto). No entanto, para que o usurio realmente curioso que tenha permisso de raiz, a parte legvel de seu contedo pode ser visualizado por primeiro usando as strings de comando para extrair todo o texto simples e at ento canalizando a sada para menos para a exibio de uma tela cheia de cada vez como se segue:
> strings / var / lib / slocate / slocate . db | less

Se se desejar efetuar uma pesquisa mais sosticada, incluindo a pesquisa por outros de nome (por exemplo, pelo tamanho, a data ou a localizao de criao) atributos, o comando find deve ser usado. 4.2 Mostrando somente uma contagem Para obter o nmero de arquivos encontrados, pode-se fazer
locate updatedb . conf | wc -l 2

ou usando somente o comando locate como mostrado abaixo

locate -c updatedb . conf 2

4.3

Usando o updatedb para atualizar o banco de dados mlocate

Considere que aps a realizar o backup de um arquivo


> cd / etc > cp sysctl . conf sysctl . conf . orig

tente-se fazer uma busca no sistema pelo arquivo sysctl.conf usando o comando locate. O arquivo sysctl.conf.orig no ir aparecer como resultado da busca.
> locate sysctl . conf / etc / sysctl . conf / usr / share / man / man5 / sysctl . conf .5. gz

A razo que aps a criao do arquivo sysctl.conf.orig, o banco de dados mlocate do comando locate no foi atualizado. Para obter o resultado correto na busca deve-se atualizar o banco de dados usando o comando updatedb e logo em seguida executar novamente o comando locate, conforme ilustrado a seguir
> updatedb updatedb : can not open a temporary file for

/ var / lib / mlocate / mlocate . db '

Note que somente o usurio root pode atualizar o banco de dados, assim como root, faa
> updatedb

ou nos sistema que fazem uso do sudo, faa


> sudo updatedb

Note que a atualizao do banco de dados do sistema pode ser demorada, dependendo do tamanho do sistema. As a atualizao do banco de dados o comando locate ir localizar o arquivo sysctl.conf.orig,
> locate sysctl . conf / etc / sysctl . conf / etc / sysctl . conf . orig / usr / share / man / man5 / sysctl . conf .5. gz

4.4

Mudana da localizao do banco de dados mlocate

The default database that locate utility reads is /var/lib/mlocate/mlocate.db, but if you wish to link the locate command with some other database kept at some other location, use the -d option. For example :
> locate -d < new db path > < filename >

Note that the database path can also be taken from stdin and if an empty path is mentioned then the default data base is picked. 4.5 Vericando a existncia de um arquivo Now suppose the le sysctl.conf.orig that we created in example 3 above got deleted, and if you try to locate sysctl.conf, it will still display the sysctl.conf.orig le.
> cd / etc > rm sysctl . conf . orig

> locate sysctl . conf / etc / sysctl . conf / etc / sysctl . conf . orig / usr / share / man / man5 / sysctl . conf .5. gz

As you see from the above output, locate command shows sysctl.conf.orig even after the le was deleted. This result is mis-leading. Ofcourse, you can execute updatedb, and try locate again, which will show proper results. Or, you can just use locate -e, which will display only the les that exists in the system, when you are executing the locate command. i.e Even when the le exist in the mlocate.db, it will still verify to make sure the le is physically present in the system before displaying it.
> locate -e sysctl . conf / etc / sysctl . conf / usr / share / man / man5 / sysctl . conf .5. gz

4.6

Ignorando casos na sada da busca

The locate command by default is congured to accept the le name in a case sensitive manner. In order to make the results case insensitive, we can use the -i option : In the following example, we created two les with both lowercase and uppercase.
> cd / tmp > touch new . txt NEW . txt

> updatedb

If you use the locate command only with the lowercase, it will nd only the lowercase le.
> locate new . txt / tmp / new . txt

Use locate -i, which will ignore case, and look for both lowercase and uppercase le.
> locate -i new . txt / tmp / NEW . txt / tmp / new . txt / usr / share / doc / samba - common / WHATSNEW . txt . gz

4.7

Restringindo a sada da busca

In the following example, locate command displayed several entries.


> locate passwd / etc / passwd / etc / passwd / etc / dovecot / conf . d / auth - passwdfile . conf . ext / etc / pam . d / passwd / etc / security / opasswd / etc / vsftpd / passwd / lib64 / security / pam_unix_passwd . so / usr / bin / gpasswd / usr / bin / htpasswd / usr / bin / ldappasswd / usr / bin / mksmbpasswd . sh / usr / bin / passwd ..

If you want to display only certain number of records, use locate -l option and specify how many records you want to see in the locate command output. For example, the following displays only 5 records (Even when locate command nds several records..)
> locate -l 5 passwd / etc / passwd / etc / passwd / etc / dovecot / conf . d / auth - passwdfile . conf . ext / etc / pam . d / passwd / etc / security / opasswd

Find (locate) only le name (basename)


locate -b file # example locate -b shadow

Limit locate output


locate -l 100 file # example locate -l 50 conf

Print number of found entries


locate -c file # example locate -c conf

Print locate statistics


locate -S

Find (locate) with full le info 8

Simply locate something and pipe output to ls command.


locate file | xargs ls - lah

Want to know even more Check help and manual


locate -- help man locate

Referncias [1] http://www.thegeekstuff.com/2012/03/locate-command-examples/. Acessada em 25/12/2013. [2] Um boa introduo a montagem vinculada http://docs.1h.com/Bind_mounts e https://fermilinux.fnal.gov/documentation/tips/mount-bind-chroot. Acessada em 25/12/2013. [3] Sintaxe de http://www.linfo.org/locate.html. Acessada em 25/12/2013.

[4] http://www.if-not-true-then-false.com/2010/linux-locate-command-find-files-and-dire Acessada em 21/12/2013. [5] Foram vistas diversas dicas do comando find no stio: http://www.dicas-l.com.br/. Acessada em 21/12/2013. [6] http://www.dicas-l.com.br/cantinhodoshell/cantinhodoshell_20080720.php# .UrX_qPgdx38. Acessada em 21/12/2013.

[7] http://www.cyberciti.biz/faq/howto-find-delete-empty-directories-files-in-unix-linux Acessada em 21/12/2013.