Linha de Comando em Linux: Find – Parte 01

O laboratório anterior foi sobre locate  e acabamos tendo que dividi-lo em 3 posts. Bom, o comando find é mais complexo e completo e o menosprezaríamos se ele coubesse em apenas um artigo. A não ser que seja um artigo mega gigante 🙂

Essa parte deste artigo fala sobre a estrutura do comando find.  Pode parecer chato no momento por se tratar ainda apenas de teoria. Mas na parte 2 em diante já já iniciaremos a praticar em nosso laboratório de testes.

Definição

Find é uma palavra do dicionário inglês que significa procurar, encontrar etc…

O comando find procura pro arquivos em uma pasta e suas subpastas.

 

Descrição

Find é uma das ferramentas de busca mais usada no Linux.

Por fazer uma busca baseada em “força bruta”  ele é mais lento que o comando locate. Mas é ótimo em encontrar arquivos através de suas propriedades. Coisa que  locate não faz. Por exemplo, posso procurar arquivos que pertençam ao usuário José, ou ainda melhor, procurar arquivos que estão com permissões full e possibilitam acesso indevido.

find tem a seguinte estrutura:

find [-H] [-L] [-P] [-D debug_opções] [-O nível] [Caminho…] [expressão]

  • find = O comando a ser usado
  • [-H] [-L] [-P]    =   Opções para fazer “find” seguir ou não Links. Sabemos que um link é um arquivo especial que aponta para outro arquivo, isto é, abre outro arquivo.
  • [-D debug_opções]  = Exibe informações para diagnóstico.  Debugs são ótimos para depuração de erros. Útil para saber o porquê “find” não está fazendo o que queremos.
  • [-O nível]   = Otimiza as buscas. Nível pode ser trocado por 0, 1, 2 ou 3. Como em “find -O 1 -name meuarquivo.txt “
  • [Caminho…]  = Caminho dentro do qual queremos que find encontre o arquivo que desejamos. Exemplo: find  /home/elder/   -name “arquivo.txt”.  Para encontrar arquivo.txt dentro do caminho /home/elder/.
  • [expressão]  = Expressão a ser usada.

 

A estrutura acima, por si só, não ajuda muito para entendermos o funcionamento de find.  Quando estivermos praticando ficará mais fácil a compreensão.

Comando find

O comando find pode ser executado sem nenhum acompanhamento. Dessa forma ele exibe todos os arquivos  e subpastas da pasta acessada por você.

[elder@centos65 Labs]$ find
.
./tree.html
./pastaLabs
./link_para_tree02_quebrado
./.arquivoOculto.txt
./link_para_tree
./Tree.html
./.pasta

Opções “verdadeiras” do Comando find

 

O manual do comando find chama de verdadeiras as opções que inserimos antes do caminho. Pois existem outras  opções que inserimos dentro das expressões.

Temos as seguintes opções para o comando find que inserimos antes do caminho:

  • -H =  Não siga links simbólicos a não ser que seja passado o nome do link na linha de comando.
  • -L = Siga links simbólicos. Quando find encontra um link simbólico ele exibe informações do arquivo para o qual esse link aponta e não do link em si. Obs.: a não ser que o link esteja quebrado ou find por alguma razão não encontre arquivo para o qual ele aponta.
  • -P = Nunca siga links simbólicos. Este é o comportamento padrão. Quando find encontra um link ele exibe as informações desse link e não do arquivo ou pasta para o qual o link aponta.
  • -D = Imprime informações para diagnóstico. Conforme dito acima, com -D fica fácil depurarmos e sabermos a razão porque algo não ocorre conforme desejamos ao usar find.  Possui sub-opções:
    [elder@centos65 Labs]$ find -D help
    
    help       Exibe as opções para -D
    tree       Exibe expressões em formato de árvore(com ramificações)
    search     Navega pela árvore das pastas verbosamente(exibindo mais informações))
    stat       Exibe mensagens com stat(2) e lstat(2) enquanto examina arquivos
    rates      Exibe um resumo indicando com qual frequência cada predicado obteve sucesso ou falhou.
    opt        Mostra informações relativas à otimizações. Veja -O
    exec       Exibe informações para -exec, -execdir, -ok e -okdir

-O = Otimiza as buscas. O programa find reorganiza a estrutura com que você digitou o comando para dar mais velocidade e eficiência aos resultados.  Podemos usar -O com os valores 0, 1, 2,3. Como em -O 0, -O 1 ou -O 2 ou ainda -O 3
Temos os seguintes significados para os níveis de -O:

        • 0 = O equivalente ao nível 1 abaixo  🙂 sim, é assim que está no manual do comando find.
        • 1 = Essa otimização já é o comportamento padrão. Expressões são reordenadas de forma que são realizados primeiro os testes que fazemos digitando o nome dos arquivos.  Isso se dá quando usamos -name, -iname ou -regex.
        • 2 = Os testes que fazemos com as opções -type ou -xtype são realizados depois dos testes que realizamos buscando por nomes de arquivos(-name, -iname) mas antes dos testes que buscam informações de inodes.
        • 3 = Esse nível é baseado no que o manual do comando find chama de custos. Os testes mais rápidos(mais baratos) são feitos primeiros e os mais demorados(caros), se necessário, são deixados por últimos.

 

Expressões

 

Expressões podem ser divididas em opções, testes e ações:

  •  opções: Como exemplo de opções temos -help, -maxdepth, -daystart.
    Lembra acima quando disse que “-H, -O, -L, -P” são tidas como opções verdadeiras?  Isso porque dentro das expressões também há opções. Então aquelas são verdadeiras e essas meia que falsas por virem após o caminho.
  • testes:  Testes são importantes. Usando, por exemplo, “-size +3G” buscaremos por arquivos com mais de 3 Giga Bytes. Podemos também usar “-atime 2” sabermos quais arquivos que foram acessados há 2 dias; também “-cmin 10”  para buscarmos arquivos acessados há 10 minutos. As opções para testes veremos na próxima parte desse artigo.
  • Ações: Podemos definir uma ação a ser aplicada aos resultados da busca. Por exemplo podemos usar  “-delete”  para excluir os resultados encontrados.

 

Conclusão

Essa é apenas a primeira parte do nosso laboratório de uso da ferramente find.

 

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

2 thoughts on “Linha de Comando em Linux: Find – Parte 01

Deixe uma resposta

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