Linha de Comando em Linux: locate e updatedb – parte 02

No post anterior iniciamos o nosso laboratório sobre comando locate. Agora vamos à prática.

Usando o Comando Locate

locate [OPÇÂO]… PADRÂO…

 

  1. 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.

  2. Buscar por arquivos que contenham apenas a palavra tree
    [elder@centos65 ~]$ locate  -b '\tree'
    /usr/bin/tree
    
  3. Exibindo apenas a quantidade de itens encontrados
    [elder@centos65 Labs]$ locate -c tree
    106
    
  4. 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.

  5. 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
  6. 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 serem 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 que ele 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.

link quebrado no linux
link quebrado no linux

 

./tree02.html está piscando porque o arquivo para quem ele aponta não existe mais. O link está quebrado.

 

praticando:

  1. 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.

  2. 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.

 

  1. 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 \

  2. 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 .

  3. 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.

Leitor voraz e um dos administradores do GNU/Linux Brasil no Whatsapp, facebook, youtube e nesse dito site: www.gnulinuxbrasil.com.br

One thought on “Linha de Comando em Linux: locate e updatedb – parte 02

Deixe uma resposta

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