No post anterior iniciamos o nosso laboratório sobre comando locate. Agora vamos à prática.
Usando o Comando Locate
locate [OPÇÂO]… PADRÂO…
- Procurando o arquivo tree com locate.
Obs.: tree aqui é um arquivo que criei, não se refere ao comando tree. Apenas um arquivo qualquer.[elder@centos65 ~]$ locate tree /home/elder/Labs/tree.html /home/elder/Labs/tree02.html /usr/bin/pstree /usr/bin/pstree.x11 /usr/bin/tree /usr/include/libxml2/libxml/HTMLtree.h /usr/include/libxml2/libxml/tree.h /usr/lib64/python2.6/lib-dynload/_elementtree.so /usr/lib64/python2.6/lib2to3/pytree.py /usr/lib64/python2.6/lib2to3/pytree.pyc /usr/lib64/python2.6/lib2to3/pytree.pyo /usr/lib64/python2.6/xml/etree..... .....................
Acima peguei apenas a parte inicial do resultado. É encontrado arquivos contendo tree em seus nomes.
- Buscar por arquivos que contenham apenas a palavra tree
[elder@centos65 ~]$ locate -b '\tree' /usr/bin/tree
- Exibindo apenas a quantidade de itens encontrados
[elder@centos65 Labs]$ locate -c tree 106
- Realizando busca ignorando maiúsculo e minúsculo(chamamos isso de case. lê-se queise 🙂 ) e limitando a busca para 10 arquivos
[elder@centos65 Labs]$ locate -l 10 -i tree /home/elder/Labs/Tree.html /home/elder/Labs/tree.html /home/elder/Labs/tree02.html /usr/bin/pstree /usr/bin/pstree.x11 /usr/bin/tree /usr/include/libxml2/libxml/HTMLtree.h /usr/include/libxml2/libxml/tree.h /usr/lib64/python2.6/idlelib/TreeWidget.py /usr/lib64/python2.6/idlelib/TreeWidget.pyc
Veja acima que foi encontrado Tree.html e tree.html; dentre outros.
- Usando -0 para separar o resultado na mesma linha(separado pelo caracter ascii NUL). Resultado assim é bom para ser usado por outros comandos.
[elder@centos65 Labs]$ locate -l 10 -0 tree /home/elder/Labs/tree.html/home/elder/Labs/tree02.html/usr/bin/pstree/usr/bin/pstree.x11/usr/bin/tree/usr/include/libxml2/libxml/HTMLtree.h/usr/include/libxml2/libxml/tree.h/usr/lib64/python2.6/lib-dynload/_elementtree.so/usr/lib64/python2.6/lib2to3/pytree.py/usr/lib64/python2.6/lib2to3/pytree.pyc
- Vendo informações(estatísticas)
[elder@centos65 Labs]$ locate -S Banco de dados /var/lib/mlocate/mlocate.db: 5.780 diretórios 52.630 arquivos 2.624.899 bytes em nomes de arquivos 1.122.946 bytes usados para armazenar a base de dados
Usando locate com links Simbólicos
Usaremos as opções de locate:
- -e ou existing = Retorna apenas arquivos que existem no momento em que executamos locate. Isso é, Se for um link e ele estiver quebrado não irá ser retornado, será tido como não encontrado.
- -P ou -H ou ainda nofollow = se locate encontrar um link, irá retornar o link como ok mesmo se for um link quebrado. nofollwo significa “não siga”, locate não irá seguir o link para ver se o arquivo que ele aponta realmente existe.
- -L ou follow = follow quer dizer “siga” do verbo seguir. follow é usando juntamente com -e. follow usando juntamente com -e faz com que links quebrados sejam omitidos. Bom… nãos é a mesma coisa de “nofollow, -P e -H”?
Sabemos que links simbólicos são como os atalhos no windows, um arquivozinho que aponta para outro arquivo. Ao clicar no link simbólico estaremos abrindo não ele mas o arquivo para o qual aponta.
Usando o comando “ln -s” criei dois links.
[elder@centos65 Labs]$ ls -l total 20 lrwxrwxrwx 1 elder elder 11 Out 4 17:50 link_para_tree -> ./tree.html lrwxrwxrwx 1 elder elder 13 Out 4 17:50 link_para_tree02_quebrado -> ./tree02.html -rw-rw-rw-+ 1 elder elder 7676 Set 17 15:31 tree02.html -rw-rw-rw-+ 1 elder elder 10092 Set 17 15:26 tree.html -rw-rw-rw-+ 1 elder elder 0 Out 4 16:32 Tree.htm
Agora irei remover o arquivo “tree02.html” para que o “link_para_tree02_quebrado” realmente fique quebrado, ou seja, aponte para um arquivo que já não existe
[elder@centos65 Labs]$ rm ./tree02.html
Listando o conteúdo da pasta vemos que o link “link_para_tree02_quebrado” está quebrado.

./tree02.html está piscando porque o arquivo para o qual ele aponta não existe mais. O link está quebrado.
praticando:
- localizando “link_para_tree”
[elder@centos65 Labs]$ locate link_para_tree /home/elder/Labs/link_para_tree /home/elder/Labs/link_para_tree02_quebrado
Encontrou os dois links, mesmo um deles estando quebrado.
- Usaremos -e de existing para trazer somente os arquivos que existem 🙂
[elder@centos65 Labs]$ locate -e link_para_tree /home/elder/Labs/link_para_tree
O link simbólico quebrado não apareceu, foi omitido.
Usando locate com a opção wholename(ou somente -w) e basename(ou -b)
Só para deixar mais claro:
- wholename = whole + name. Em português inteiro + nome. wholename procura por nomes inteiros. Por exemplo, acima, ao pesquisar “locate tree” obtivemos “tree.html”, “pstree”, “pstree.x11” etc…
- basename = base + name. Em português base + nome. basename traz arquivos contendo apenas o nome que passamos. Exemplo, acima, “locate -b tree” trouxe apenas “tree”
Antes, não entendia muito bem o uso da opção wholename. Lendo e raciocinando um pouco mais vi que wholename já é o padrão do comando locate, ou seja, usar “locate tree” é a mesma coisa que “locate wholename tree”; isto porque wholename já vem de forma implícita embutido dentro de locate.
Só depois de um tempo que vi escrito: This is the default behavior. Que quer dizer “Este é o comportamento padrão”
Outra coisa, dificilmente alguém, em boa consciência usará o nome por extenso das opções. Por exemplo, sempre usaremos -b ao invés de basename, ou -w ao invés de wholename. Mas, em scripts, algumas pessoas usam a opção por extenso por questão de legibilidade. Fica mais “entendível” o script.
Você já percebeu que usamos locate com opção -b no passo 02 desse artigo e que no passo 01 executamos “locate tree” que é a mesma coisa que “locate -w tree” já que wholename é padrão.
Se já usamos acho que nem precisamos mais de prática aqui.
Usando locate com Expressões Regulares
Para entender melhor sobre expressões regulares esse link do wikipedia: https://pt.wikipedia.org/wiki/Expressão_regular
- -r ou regexp = Busca arquivos por usando expressões regulares básicas. Qualquer nome de arquivo passado por você para locate será considerado uma expressão regular básica, simples.
- regex = Busca arquivos por usando expressões regulares. Qualquer nome de arquivo passado por você para locate será considerado uma expressão regular estendida, mais complexa.
- Usando -r para encontrar arquivos que terminal com “.html”.
$ = representa o final da palavra[elder@centos65 pasta_de_arquivos]$ locate -r '.html$' /usr/share/gtk-doc/html/libxml2/libxml2-xpointer.html /usr/share/phpMyAdmin/doc/html /usr/share/sgml/docbook/xsl-stylesheets-1.75.2/html /usr/share/sgml/docbook/xsl-stylesheets-1.75.2/xhtml /var/www/html /var/www/error/noindex.html /var/www/error/include/bottom.html
Observe que foi encontrado arquivos sem o ponto . como em
“/usr/share/phpMyAdmin/doc/html”Isso porque assim como $ o ponto . tem significado especial. Para dizermos ao locate que queremos o significado literal do ponto devemos escapar ele com barra invertida \
- Usando o mesmo comando e opções acima, só que agora com o ponto tendo seu significado literal.
[elder@centos65 pasta_de_arquivos]$ locate -r '\.html$' /usr/share/gtk-doc/html/libxml2/libxml2-xpointer.html /var/www/error/noindex.html /var/www/error/include/bottom.html /var/www/error/include/spacer.html /var/www/error/include/top.html /var/www/icons/README.html
Agora sim. Usei a barra invertida \ para tirar o significado especial do ponto .
- Usando agora regex como exemplo de expressão regular mais complexa. Abaixo procuro por nome de arquivos que tenha a letra A repetida 5 vezes
[elder@centos65 pasta_de_arquivos]$ locate --regex '[a]{5}' /usr/share/phpMyAdmin/themes/original/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png /usr/share/phpMyAdmin/themes/pmahomme/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png
Encontramos dois arquivos com o mesmo nome mais em locais diferentes: “ui-bg_flat_0_aaaaaa_40x100.png”
Conclusão
Ainda nos resta trabalhar com o comando updatedb em nosso laboratório. Mas podemos perceber que o comando locate é muito útil, mas muitas vezes subestimado por usuários que usam o comando find.
2 Comments to “Linha de Comando em Linux: locate e updatedb – parte 02”