linux comando locate

9
Comando locate Salviano A. Leão 25/12/2013 Sumário 1 Introdução 1 2 Como o comando locate funci- ona? – updatedb e updatedb.conf 1 3 Sintaxe do comando locate 3 4 Exemplos de uso comando locate 3 4.1 Procurando por um arquivo .. 3 4.2 Mostrando somente uma conta- gem ............... 5 4.3 Usando o updatedb para atua- lizar o banco de dados mlocate 6 4.4 Mudança da localização do banco de dados mlocate .... 6 4.5 Verificando a existência de um arquivo .............. 7 4.6 Ignorando casos na saída da busca 7 4.7 Restringindo a saída da busca . 8 Section 1 Introdução Quando é preciso localizar alguns arquivos no sistema ou em alguns diretórios, pode-se usar o comando find para encontra-los. Embora ele seja um bom utilitário para realizar pesquisas, porém ele é lento. No entanto o comando locate pode procurar arquivos com muita rapidez. Embora o comando locate seja muito rápido, ele ainda não permite que se deixe de lado o comando find porque ele tem algumas limitações, como será mostrado. Section 2 Como o comando locate funciona? – updatedb e updatedb.conf Quando foi dito que o comando locate faz pesquisas muito rapidamente, a primeira questão que surge é o que o comando locate faz para ser tão rápido? Bem, o comando locate não busca os arquivos no disco, em vez disso, ele procura pelos arquivos em caminhos definidos em um banco de dados “database” [?]. O banco de dados “database” é um arquivo que contém as informações 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 próxima questão lógica é: o que mantém esta base de dados mlocate.db do comando locate atualizada? Bom o utilitário responsável por essa tarefa é o updatedb, o qual quando o mesmo é execu- tado, ele verifica todo o sistema e atualiza o arquivo do banco de dados mlocate.db. Uma da limitação do comando locate é a sua dependência em relação ao banco de dados que pode ser atualizado pelo utilitário updatedb. Portanto, para obter resultados confiáveis e atualizados 1

Upload: salvianoleao

Post on 31-Dec-2015

79 views

Category:

Documents


0 download

DESCRIPTION

Este documento faz uma descrição do comando locate do Linux

TRANSCRIPT

Page 1: Linux Comando Locate

Comando locate

Salviano A. Leão

25/12/2013

Sumário1 Introdução 12 Como o comando locate funci-

ona? – updatedb e updatedb.conf 13 Sintaxe do comando locate 34 Exemplos de uso comando locate 3

4.1 Procurando por um arquivo . . 34.2 Mostrando somente uma conta-

gem . . . . . . . . . . . . . . . 5

4.3 Usando o updatedb para atua-lizar o banco de dados mlocate 6

4.4 Mudança da localização dobanco de dados mlocate . . . . 6

4.5 Verificando a existência de umarquivo . . . . . . . . . . . . . . 7

4.6 Ignorando casos na saída da busca 74.7 Restringindo a saída da busca . 8

Section 1Introdução

Quando é preciso localizar alguns arquivos no sistema ou em alguns diretórios, pode-se usar ocomando find para encontra-los. Embora ele seja um bom utilitário para realizar pesquisas,porém ele é lento.

No entanto o comando locate pode procurar arquivos com muita rapidez. Embora ocomando locate seja muito rápido, ele ainda não permite que se deixe de lado o comando findporque ele tem algumas limitações, como será mostrado.

Section 2Como o comando locate funciona? – updatedb e updatedb.conf

Quando foi dito que o comando locate faz pesquisas muito rapidamente, a primeira questãoque surge é o que o comando locate faz para ser tão rápido?

Bem, o comando locate não busca os arquivos no disco, em vez disso, ele procura pelosarquivos em caminhos definidos em um banco de dados “database” [?]. O banco de dados“database” é um arquivo que contém as informações sobre todos os arquivos do seu sistema eseus respectivos caminhos.

O arquivo de banco de dados “database” do comando locate está localizada em:

/var/lib/mlocate/mlocate.db

A próxima questão lógica é: o que mantém esta base de dados mlocate.db do comandolocate atualizada?

Bom o utilitário responsável por essa tarefa é o updatedb, o qual quando o mesmo é execu-tado, ele verifica todo o sistema e atualiza o arquivo do banco de dados mlocate.db. Uma dalimitação do comando locate é a sua dependência em relação ao banco de dados que pode seratualizado pelo utilitário updatedb. Portanto, para obter resultados confiáveis e atualizados

1

Page 2: Linux Comando Locate

em sua pesquisa com o comando locate, o banco de dados que ele usa para realizar a pesquisadeve estar sempre atualizado e para tal é necessário atualizar o banco de dados mlocate.dbcom o comando updatedb em intervalos regulares.

Pode-se configurar o utilitário updatedb conforme suas necessidades. Isto pode ser con-seguido através da atualização do updatedb.conf. Este é um arquivo de configuração queupdatedb lê antes de atualizar o banco de dados. O updatedb.conf está localizado em /etc/:

# cat /etc/updatedb.confPRUNE_BIND_MOUNTS="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 arquivoupdatedb.conf contém informações sob a forma de “VARIÁVEIS=VALORES”. Estas “VARIÁ-VEIS” são classificadas como:

PRUNEFS: Uma lista separada por espaços em branco dos tipos de sistema de arquivos(como o usado em /etc/mtab), que não deve ser verificado pelo updatedb. O tipo desistema de arquivo correspondente é caso-insensível (indiferente a maiúsculas e minúscula.Por padrão, nenhum tipo de sistema de arquivos é ignorado. Ao adicionar um sistemade arquivos nessa lista ele será ignorado, todos os sistemas de arquivos montados nasubárvore são ignorados também, mesmo que seu tipo não coincida com qualquer entradana PRUNEFS.

PRUNENAMES: Uma lista de nomes de diretório (sem caminhos) separada por espaçosque não devem ser examinadas pelo updatedb. Por padrão, nenhum nome de diretório éignorado. Note que apenas os diretórios podem ser especificados, e nenhum mecanismopadrão é usado.

PRUNEPATHS: Uma lista de nomes de caminho de diretórios separada por espaços quenão devem ser examinadas pelo updatedb. Cada nome de caminho deve ser exatamentena forma em que o diretório será relatado pelo locate. Por padrão, nenhum caminhos éignorado.

PRUNE_BIND_MOUNTS: Uma das seqüência de 0, não, 1 ou sim. Se PRUNE_BIND_MOUNTSfor 1 ou sim, montagens por vinculação não são verificados pelo updatedb. Todos os sis-temas de arquivos montados na subárvore de uma montagem vinculada são ignorados,bem como, mesmo se eles não são montados por vinculação. Por padrão, montagens porvinculação não são ignorados.

Note-se que todas as informações de configuração acima também pode ser alterado ouatualizado através das opções de linha de comando para o utilitário updatedb.

Com as montagens por vinculação [2], pode-se montar tudo, ou mesmo parte de um sistemade arquivos já montado em um outro local, e mantendo a acessibilidade do sistema de arquivosem ambos os pontos de montagem ao mesmo tempo! Por exemplo, pode-se usar uma montagempor vinculação para montar o seu sistema de arquivos raiz existente no seguinte diretório/home/misterx/legal do usuário misterx, como segue:

> mount --bind / /home/misterx/legal

2

Page 3: Linux Comando Locate

Section 3Sintaxe do comando locate

O comando locate é muitas vezes a maneira mais simples e rápida de encontrar os locais dearquivos e diretórios no Linux e outros sistemas.

Sua sintaxe básica para localizar [3], nos sistemas operacionais do tipo Unix é:

locate [opções] expressão

Quando ele é usado sem opções, ele irá exibir cada caminho absoluto para o qual o usuáriotem permissão de acesso que contenha qualquer um dos nomes de arquivos e/ou diretórios queforam fornecidos a ele como argumentos (ou seja, dados de entrada, a expressão).

O caminho absoluto, também conhecido como caminho completo, é a hierarquia de diretóriosdo diretório raiz para o arquivo ou diretório é designado. O diretório raiz é o diretório no topo dosistema de arquivos (ou seja, a hierarquia de arquivos) que contém todos os outros diretóriose arquivos no sistema e que é designado por uma barra (/). É importante que o caminhoabsoluto seja retornado tanto porque ele mostra os locais exatos do sistema como porque eletorna possível indicar a localização dos arquivos ou diretórios que têm o mesmo nome masdiferentes caminhos absolutos.

Assim, por exemplo, a seguinte comando irá listar os caminhos absolutos de todos os arquivoschamados arquivo1 e todos os diretórios dir1 para o qual o usuário tinha permissão de acesso:

> locate arquivo1 dir1

Ele também ira listar todos os outros caminhos absolutos que contenham essas palavras.Section 4

Exemplos de uso comando locate

4.1 Procurando por um arquivo

Par procurar por um arquivo particular, faça 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

Também pode-se usar "locate -0"para mostrar todo o resultado da pesquisa em uma únicalinha. Por exemplo,

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

A especificidade da busca pode ser aumentada usando os caracteres curigas (*) ou outrasexpressões regulares. Curingas são caracteres que podem ser usados para substituir qualquer

3

Page 4: Linux Comando Locate

outro trecho ou carácter. Por exemplo, o caractere asterisco (*) é um curinga que pode repre-sentar qualquer caractere único ou qualquer palavra contendo qualquer número de caracteres.As expressões regulares são uma sequência que descrevem ou correspondem a um conjunto depalavra, de acordo com certas regras de sintaxe. Por exemplo, o comando a seguir usa o curinga(*) para exibir todos os arquivos do sistema que têm a extensão de arquivo do tipo .png:

> locate "*.png"

A opção -q é usada para suprimir mensagens de erro, tais como aquelas que podem serdevolvidas no caso do usuário não tem permissão para acessar determinados arquivos ou dire-tórios. Assim, o seguinte comando ira suprimir as mensagens de erro do exemplo anterior:

> locate "*.png" -q

Muitas vezes, ocorre de obtermos um grande número de resultados como retorno de umabusca qualquer. A opção -n seguido por um número inteiro limita os resultados para o númeroespecificado. Por exemplo, o seguinte comando deve exibir apenas 15 resultados em uma buscapor arquivos que têm uma extensão .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 asaída do locate a partir da tela de exibição para o paginador less como mais ou menos, queapresenta apenas uma tela cheia de saída de cada vez, por exemplo,

> locate "*.html" | less

A opção -i faz uma pesquisa de maiúsculas e minúsculas. Ou seja, ele irá retornar todosos resultados que coincidem com os argumentos, independentemente de letras individuais sãominúsculas ou maiúsculas. Por exemplo, o seguinte retornaria todos os arquivos com a extensãohtml, HTML, ou alguma combinação destes..:

> locate -i "*.HtmL"

Em alguns sistemas, como a Red Hat, a slocate programa é instalado por padrão em vezde localizar e digitar o comando localizar ativa um script (ou seja, um programa curto), quecausa slocate para ser lançado. slocate fornece uma maneira segura de indexar e procurarrapidamente os arquivos em um sistema de armazenamento de permissões de arquivos e dadosde propriedade de modo que os usuários não vão ver os arquivos para os quais eles não têmacesso.

A opção-V pode ser usado para mostrar a versão do localizar é usado, incluindo se é localizarou slocate. Outra maneira de determinar se slocate está sendo usado é ver se um caminhoabsoluto, como /usr/bin/slocate é devolvido quando o seguinte comando é emitido:

4

Page 5: Linux Comando Locate

> locate locate

locate e slocate realmente pesquisar um locate.db ou slocate.db incorporado na base dedados, denominados, respectivamente, em vez de toda a unidade de disco rígido em si, a fimde proporcionar um tempo de procura muito mais curto. Este banco de dados é atualizadoautomaticamente em uma base regular por cron, um pequeno programa que é executado emsegundo plano, executar várias tarefas em intervalos regulares. A atualização é feita a cadanoite, se o computador estiver ligado continuamente.

Porque o banco de dados não é atualizado imediatamente, criado recentemente arquivos ediretórios podem não aparecer quando procurando por eles com localizar ou slocate. Felizmente,no entanto, é uma simples questão de atualizar o banco de dados manualmente, embora possademorar alguns minutos. Atualização manual pode ser feito o login como usuário root (ou seja,o usuário administrativo), por exemplo, usando o su (ou seja, substituir usuário) de comando,e em seguida, emitir o seguinte comando:

> updatedb

A mesma coisa pode ser feita pelo usuário root usando localizar com (, ou seja, atualização)opção, ou seja, sua-u,

> locate -u

Para os curiosos, o banco de dados está localizado em /var/lib/slocate/slocate.db emalguns sistemas, como a Red Hat. A sua localização exata em qualquer sistema específico podeser encontrado pelo usuário root (porque os usuários comuns não terão permissão de acesso namaioria dos sistemas) com o comando localizar o seguinte:

> locate locate.db

O banco de dados é um arquivo binário (ou seja, um arquivo não-texto). No entanto, paraque o usuário realmente curioso que tenha permissão de raiz, a parte legível de seu conteúdopode ser visualizado por primeiro usando as strings de comando para extrair todo o textosimples e até então canalizando a saída para menos para a exibição de uma tela cheia de cadavez como se segue:

> strings /var/lib/slocate/slocate.db | less

Se se desejar efetuar uma pesquisa mais sofisticada, incluindo a pesquisa por outros de nome(por exemplo, pelo tamanho, a data ou a localização de criação) atributos, o comando finddeve ser usado.

4.2 Mostrando somente uma contagem

Para obter o número de arquivos encontrados, pode-se fazer

locate updatedb.conf | wc -l2

ou usando somente o comando locate como mostrado abaixo

5

Page 6: Linux Comando Locate

locate -c updatedb.conf2

4.3 Usando o updatedb para atualizar o banco de dados mlocate

Considere que após 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. Oarquivo sysctl.conf.orig não irá aparecer como resultado da busca.

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

A razão é que após a criação do arquivo sysctl.conf.orig, o banco de dados mlocate docomando locate não foi atualizado. Para obter o resultado correto na busca deve-se atualizaro banco de dados usando o comando updatedb e logo em seguida executar novamente o comandolocate, conforme ilustrado a seguir

> updatedbupdatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db '

Note que somente o usuário root pode atualizar o banco de dados, assim como root, faça

> updatedb

ou nos sistema que fazem uso do sudo, faça

> sudo updatedb

Note que a atualização do banco de dados do sistema pode ser demorada, dependendo dotamanho do sistema.

Aós a atualização 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 Mudança da localização do banco de dados mlocate

The default database that locate utility reads is /var/lib/mlocate/mlocate.db, but if you wishto link the locate command with some other database kept at some other location, use the -doption.

For example :

> locate -d <new db path > <filename >

6

Page 7: Linux Comando Locate

Note that the database path can also be taken from stdin and if an empty path is mentionedthen the default data base is picked.

4.5 Verificando a existência de um arquivo

Now suppose the file sysctl.conf.orig that we created in example 3 above got deleted, and if youtry to locate sysctl.conf, it will still display the sysctl.conf.orig file.

> 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 filewas 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 files that exists in the system,

when you are executing the locate command. i.e Even when the file exist in the mlocate.db, itwill still verify to make sure the file 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 saída da busca

The locate command by default is configured to accept the file 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 files 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 find only the lowercase file.

> locate new.txt/tmp/new.txt

Use locate -i, which will ignore case, and look for both lowercase and uppercase file.

> locate -i new.txt/tmp/NEW.txt/tmp/new.txt/usr/share/doc/samba -common/WHATSNEW.txt.gz

7

Page 8: Linux Comando Locate

4.7 Restringindo a saída 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 howmany records you want to see in the locate command output.

For example, the following displays only 5 records (Even when locate command finds severalrecords..)

> 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 file name (basename)

locate -b file# examplelocate -b shadow

Limit locate output

locate -l 100 file# examplelocate -l 50 conf

Print number of found entries

locate -c file# examplelocate -c conf

Print locate statistics

locate -S

Find (locate) with full file info

8

Page 9: Linux Comando Locate

Simply locate something and pipe output to ls command.

locate file |xargs ls -lah

Want to know even moreCheck help and manual

locate --helpman locate

Referências

[1] http://www.thegeekstuff.com/2012/03/locate-command-examples/. Acessada em25/12/2013.

[2] Um boa introdução a montagem vinculada http://docs.1h.com/Bind_mountse https://fermilinux.fnal.gov/documentation/tips/mount-bind-chroot. Acessadaem 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-directories-quickly-and-efficiently/.Acessada em 21/12/2013.

[5] Foram vistas diversas dicas do comando find no sítio: 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.

9