Linha de Comando em Linux: Find – Parte 07, Exemplos de Uso

Aqui chegamos no momento de encerramento do nosso laboratório de testes do comando find. Foram, com esse, 7 artigos.

  1. Linha de Comando em Linux: Find – Parte 01
  2. Linha de Comando em Linux: Find – Parte 02, Opções Verdadeiras -H -L -P
  3. Linha de Comando em Linux: Find – Parte 03, Depuração(Debug) de Erros
  4. Linha de Comando em Linux: Find – Parte 04, Otimizando as Buscas com a Opção -O
  5. Linha de Comando em Linux: Find – Parte 05, Expressões
  6. Linha de Comando em Linux: Find – Parte 06, Operadores
  7. Linha de Comando em Linux: Find – Parte 07, Exemplos de Uso

Sendo que desses artigos apenas o 01, 05, 06 e o 07 são os que mais nos interessa, os mais usados no dia a dia.

Praticando

Lembre-se que o {} é usado por -exec ou -ok e significa o resultado encontrado por find

  1. Buscando todos arquivos com extensão “txt”
    [elder@centos65 Labs]$ find . -name "*txt"
    ./arquivo.txt
    ./awkTestes/inventory-shipped.txt
    ./awkTestes/email-list.txt
    ./minhaPasta/arquivos2.txt
    ./minhaPasta/pasta_filha_de_minhaPasta/arquivos_de_textos1.txt
    ./minhaPasta/pasta_filha_de_minhaPasta/arquivos_de_textos2.txt
    ./minhaPasta/pasta_filha_de_minhaPasta/arquivos_de_textos4.txt
    ./minhaPasta/pasta_filha_de_minhaPasta/arquivos_de_textos3.txt
    ./minhaPasta/pasta_filha_de_minhaPasta/arquivos_de_textos5.txt
    ./minhaPasta/arquivos4.txt
    ./minhaPasta/arquivos3.txt
    ./minhaPasta/arquivos1.txt
    ./minhaPasta/arquivos5.txt
    ./pastaLabs/tree_link.txt
    ./pastaLabs/lista_de_nomes.txt
    ./.arquivoOculto.txt
    ./listaFrutas.txt
    ./lista_de_nomes_LINK.txt
  2. Buscar todos os arquivos vazios, sem conteúdo, dentro da minha pasta home
    [elder@centos65 ~]$ find ~/  -type f -empty 
    /home/elder/.gnupg/pubring.gpg
    /home/elder/ls
    /home/elder/imagens_e_documentos/casa_thumb.jpg
    /home/elder/imagens_e_documentos/casa_thumbnail.jpg
    /home/elder/xfs_lab/teste01.txt
    /home/elder/pasta_de_arquivos/lista04.txt
    /home/elder/pasta_de_arquivos/lista02.txt
    /home/elder/pasta_de_arquivos/tree03.txt
    /home/elder/pasta_de_arquivos/tree02.txt
    /home/elder/pasta_de_arquivos/lista01.txt
    
  3. Buscar todos as pastas  vazias, sem conteúdo, dentro da minha pasta home
    [elder@centos65 ~]$ find ~/  -type d -empty 
    /home/elder/.pki/nssdb
    /home/elder/Download
    /home/elder/bind_xfs_lab
    /home/elder/imagens
    /home/elder/programas
    /home/elder/Labs/.pasta
    /home/elder/diretorio_de_arquivos/livros
    /home/elder/diretorio_de_arquivos/imagens
    /home/elder/diretorio_de_arquivos/programas
    
  4. Arquivos ou pastas dentro da minha home que pertençam  a outro usuário. Observe o uso da exclamação para inverter o sentido de “-user elder”.
    [elder@centos65 ~]$ find ~/ ! -user elder
    /home/elder/Labs/arquivo.txt
    /home/elder/Labs/listaFrutas.txt
  5. Arquivos ou pastas dentro da minha home que pertençam  a outro grupo e não ao meu. Observe o uso da exclamação para inverter o sentido de “-group elder”. Aqui, acrescentei a ação “-ls” para exib ir detalhes como usuário e grupo.
    [elder@centos65 ~]$ find ~/ ! -group  elder  -ls  
      3691    4 -rw-rw-rw-   1 maria    marcos       2644 Mai 29 15:18 /home/elder/Labs/arquivo.txt
      6424    0 -rw-rw-rw-   1 marcos   marcos          0 Jun  1 12:02 /home/elder/Labs/listaFrutas.txt
    148885    4 drwxrwx---   2 elder    salaeventos     4096 Jun  2 12:09 /home/elder/docs
    142613    0 -rw-r--r--   1 elder    marcos          0 Mar 12 12:44 /home/elder/docs/meuTextinho.txt
    142614    0 -rw-r--r--   1 elder    marcos          0 Mar 12 12:44 /home/elder/docs/meuTextinho02.txt
    
  6. Arquivos não acessados há mais de 240 dias(8 meses)
    [elder@centos65 ~]$ find -atime +240
    ./bin/meuPrograminha
    ./.ssh/known_hosts

    Iremos usar o comando “stat” no arquivo “./bin/meuPrograminha” para confirmar  a data de acesso

    [elder@centos65 ~]$ stat ./bin/meuPrograminha 
      File: "./bin/meuPrograminha"
      Size: 28        	Blocks: 8          IO Block: 4096   arquivo comum
    Device: fd00h/64768d	Inode: 136475      Links: 1
    Access: (0775/-rwxrwxr-x)  Uid: (  500/   elder)   Gid: (  500/   elder)
    Access: 2019-09-28 11:21:00.178000628 -0300
    Modify: 2019-09-28 10:51:07.045001146 -0300
    Change: 2019-09-28 11:12:44.812000835 -0300
  7. Arquivos modificados há mais de um ano(360 dias).
    [elder@centos65 ~]$ find -mtime +360  
    ./.bash_profile
    ./.bashrc
    ./imagens_e_documentos/004.pdf
    ./.bash_logout
    
  8. Arquivos modificados há mais de um ano(360 dias), que não esteja oculto(Não inicie com um ponto: ! -name “.*”). Usaremos a ação “-exec” para executarmos o comando stat.
    [elder@centos65 ~]$ find -mtime +360  ! -name ".*" -exec stat {} \; 
      File: "./imagens_e_documentos/004.pdf"
      Size: 40132     	Blocks: 80         IO Block: 4096   arquivo comum
    Device: fd00h/64768d	Inode: 135390      Links: 1
    Access: (0600/-rw-------)  Uid: (  500/   elder)   Gid: (  500/   elder)
    Access: 2020-05-14 11:38:24.189493897 -0300
    Modify: 2016-05-27 09:48:10.000000000 -0300
    Change: 2020-05-06 15:36:05.023659631 -0300

    Obs.: O comando stat não faz parte de find.

  9. Arquivos modificados há menos de 1 home(60 minutos 🙂 )
    [elder@centos65 ~]$ sudo find -cmin -60 
    ./arquivoSegredo.txt
  10. Arquivos maiores que 1 Giga Byte em todo o sistema.
    [elder@centos65 ~]$ sudo find / -size +1G
    
  11. Todos os arquivos executáveis(programas ou scripts) dentro da minha home e que foram usados há menos de 10 minutos
    [elder@centos65 ~]$ find ~/ -executable -type f -amin -10
    /home/elder/bin/meuPrograminha
    [elder@centos65 ~]$ stat ./bin/meuPrograminha 
      File: "./bin/meuPrograminha"
      Size: 28        	Blocks: 8          IO Block: 4096   arquivo comum
    Device: fd00h/64768d	Inode: 136475      Links: 1
    Access: (0775/-rwxrwxr-x)  Uid: (  500/   elder)   Gid: (  500/   elder)
    Access: 2020-06-03 10:45:08.942000096 -0300
    Modify: 2019-09-28 10:51:07.045001146 -0300
    Change: 2019-09-28 11:12:44.812000835 -0300
    
  12. Encontre o arquivo lista.txt dentro da minha pasta home
    [elder@centos65 Labs]$ find -iname "lista.txt"
  13. Encontre o arquivo “arquivo.txt”
    [elder@centos65 Labs]$ find -iname "arquivo.txt"
    ./arquivo.txt
    
  14. Liste todas as pastas dentro do meu diretório pessoal. Lembrando que “/home/elder” é a mesma coisa que “~/”
    [elder@centos65 Labs]$ find ~/  -type d  -ls
      3721    4 drwx------  18 elder    elder        4096 Mai 26 19:41 /home/elder/
    148885    4 drwxrwx---   2 elder    salaeventos     4096 Jun  2 12:09 /home/elder/docs
      3720    4 drwxrwxr-x   5 elder    elder        4096 Ago 28  2019 /home/elder/diretorio_de_arquivos
      6400    4 drwxrwxr-x   2 elder    elder        4096 Jun  2 12:09 /home/elder/diretorio_de_arquivos/livros
    148880    4 drwxrwxr-x   2 elder    elder        4096 Jun  2 12:09 /home/elder/diretorio_de_arquivos/imagens
      6411    4 drwxrwxr-x   2 elder    elder        4096 Jun  2 12:09 /home/elder/diretorio_de_arquivos/programas

    Acima, exclui algumas linhas para que não ficasse com muito texto na tela. Observe também o -ls ao final do comando, essa ação faz com que o resultado seja exibido em lista, é um tipo de “ls -l” para o comando find.

  15. Encontre  dentro da minha pasta, /home/elder, somente os arquivos(-type f) ocultos(-name “.*”). Obs.: Em linux os arquivos ocultos possuem um ponto(.) no início de seus nomes
    [elder@centos65 Labs]$ find ~/  -type f  -name ".*"  
    /home/elder/.bash_profile
    /home/elder/.viminfo
    /home/elder/.bashrc
    /home/elder/.bash_logout
    /home/elder/Labs/.arquivoOculto.txt
    /home/elder/.lesshst
    /home/elder/.bash_history
    /home/elder/.ExifTool_config
    /home/elder/.mysql_history
  16. Encontre, dentro da minha pasta /home/elder todos os arquivos; não quero que mostre arquivos ocultos( ! -name “.*”); pesquise somente arquivos que foram acessados nos últimos 10 dias
    [elder@centos65 Labs]$ find ~/  -type f  ! -name ".*"  -atime -10 
    /home/elder/xfs_lab/teste01.txt
    /home/elder/Labs/arquivo.txt
    /home/elder/Labs/listaFrutas.txt

    Poderíamos executar o comando acima com o comando “-exec  ls -l” para listarmos os arquivos . lembre-se sempre de encerrar o -exec com \;

    [elder@centos65 Labs]$ find ~/  -type f  ! -name ".*"  -atime -10 -exec ls -l {} \;
    -rwxrwxrwx 1 elder elder 0 Out 16  2019 /home/elder/xfs_lab/teste01.txt
    -rw-rw-rw-+ 1 maria marcos 2644 Mai 29 15:18 /home/elder/Labs/arquivo.txt
    -rw-rw-rw-+ 1 marcos marcos 0 Jun  1 12:02 /home/elder/Labs/listaFrutas.txt

    Acima, usando o comando ls -l vemos somente a data de alteração e não de acesso. Vamos repetir o comando substituindo “-exec ls -l” por “-exec -stat”

    [elder@centos65 Labs]$ find ~/  -type f  ! -name ".*"  -atime -10 -exec stat  {} \;
      File: "/home/elder/xfs_lab/teste01.txt"
      Size: 0         	Blocks: 0          IO Block: 4096   arquivo comum vazio
    Device: fd00h/64768d	Inode: 136572      Links: 1
    Access: (0777/-rwxrwxrwx)  Uid: (  500/   elder)   Gid: (  500/   elder)
    Access: 2020-05-28 15:21:59.045000082 -0300
    Modify: 2019-10-16 12:24:12.330001489 -0300
    Change: 2019-10-16 12:41:14.653001427 -0300
      File: "/home/elder/Labs/arquivo.txt"
      Size: 2644      	Blocks: 8          IO Block: 4096   arquivo comum
    Device: fd00h/64768d	Inode: 3691        Links: 1
    Access: (0666/-rw-rw-rw-)  Uid: (  501/   maria)   Gid: ( 1003/  marcos)
    Access: 2020-05-29 15:18:41.822000268 -0300
    Modify: 2020-05-29 15:18:36.382000403 -0300
    Change: 2020-06-01 12:03:55.020001390 -0300
      File: "/home/elder/Labs/listaFrutas.txt"
      Size: 0         	Blocks: 0          IO Block: 4096   arquivo comum vazio
    Device: fd00h/64768d	Inode: 6424        Links: 1
    Access: (0666/-rw-rw-rw-)  Uid: ( 1003/  marcos)   Gid: ( 1003/  marcos)
    Access: 2020-06-01 12:02:07.502001409 -0300
    Modify: 2020-06-01 12:02:07.502001409 -0300
    Change: 2020-06-01 12:02:24.980001460 -0300

    Agora deixei negritado a linha “access:” de cada arquivo.

  17. Encontre todos os arquivos com permissão total na minha pasta
    [elder@centos65 Labs]$ find ~/ -type f  -perm 0777
    /home/elder/xfs_lab/teste01.txt
  18. Todas as pastas com permissão total
    [elder@centos65 Labs]$ find ~/ -type d  -perm 777
    /home/elder/Labs
    /home/elder/Labs/awkTestes
    /home/elder/Labs/minhaPasta/pasta_filha_de_minhaPasta
    /home/elder/Labs/.pasta
  19. Todos os arquivos e pastas  que pertençam a usuários que não fazem mais parte da lista em /etc/passwd ou /etc/group
    [elder@centos65 Labs]$ sudo find /home    -nouser  -o  -nogroup
    /home/mariana
    /home/mariana/.bash_profile
    /home/mariana/.bashrc
    /home/mariana/.bash_logout
    
  20. Dentro de /sbin pesquise todos os arquivos com permissão  SUID
    [elder@centos65 Labs]$ sudo find /sbin    -perm -u=s
    /sbin/mount.nfs
    /sbin/pam_timestamp_check
    /sbin/unix_chkpwd
  21. Dentro de /sbin pesquise todos os arquivos com permissão  SGID
    [elder@centos65 Labs]$ sudo find /sbin    -perm -g=s
    /sbin/netreport
  22. Dentro de /sbin pesquise todos os arquivos com Stick Bit configurado
  23. Remova todos os arquivos ou pastas vazias dentro da minha pasta /home/elder/Labs, que estejam vazias e  ocultas. Usarei a ação -ok para pedir minha confirmação antes da exclusão
    Obs.: Cuidado para que não exclua arquivos ocultos do sistema dentro da sua pasta home ou fora dela. Como por exemplo, dentro da sua pasta home há arquivos como .bash_history, .bash_logout, .bashrc etc…

    [elder@centos65 ~]$ find ~/L -name ".*" -empty -ok rm {} \;  
    < rm ... /home/elder/Labs/.arquivoOculto.txt > ? yes
    < rm ... /home/elder/Labs/.pasta > ? yes
    rm: não foi possível remover "/home/elder/Labs/.pasta": É um diretório

    Em vermelho está um alerta de que não foi possível excluir a pasta. Devemos usar “rm -f” ao invés de apenas “rm”. Mas não irá solicitar confirmação antes da exclusão, mesmo usando -ok ao invés de -exec

    [elder@centos65 ~]$ find ~/ -name ".*" -empty -ok rm -fr {} \;
  24. Buscando novamente os arquivos terminados em “txt” mas apenas da primeira pasta, não em suas subpastas.
    [elder@centos65 Labs]$ find .  -maxdepth 1   -name "*txt"
    ./arquivo.txt
    ./.arquivoOculto.txt
    ./listaFrutas.txt
    ./lista_de_nomes_LINK.txt
  25. Encontre os arquivos dentro de /home/elder, maiores que 100 Kilo Bytes e os remova sem pedir minha autorização.
    [elder@centos65 Labs]$ find /home/elder/  -size +100k  -exec rm {} \;
  26. Encontre, dentro das pastas /var/log e /tmp, os arquivos maiores que 2 Mega Bytes e que foram acessados há mais de 100 dias.
    [elder@centos65 Labs]$ sudo find /var/log/  /tmp  -size -2M -atime +100 
    /var/log/httpd/error_log-20200126
    /var/log/httpd/error_log-20200305
    /var/log/httpd/access_log-20190929
    /var/log/httpd/error_log-20200123
    /var/log/httpd/access_log-20200123
    /var/log/httpd/access_log
    /var/log/httpd/error_log-20191006
    /var/log/cups/access_log
    /var/log/cups/access_log-20200126

    Podemos adicionar ao comando acima a ação  -ls. Para listarmos mais detalhes.

    [elder@centos65 Labs]$ sudo find /var/log/  /tmp  -size -2M -atime +100  -ls
    523412    4 -rw-r--r--   1 root     root          491 Jan 26 03:48 /var/log/httpd/error_log-20200126
    523417    4 -rw-r--r--   1 root     root          255 Jan 26 03:48 /var/log/httpd/error_log-20200305
    536404   60 -rw-r--r--   1 root     root        55358 Set 26  2019 /var/log/httpd/access_log-20190929
    520233    4 -rw-r--r--   1 root     root          580 Jan 23 03:14 /var/log/httpd/error_log-20200123
    520713   20 -rw-r--r--   1 root     root        18912 Jan 22 18:11 /var/log/httpd/access_log-20200123
    523411    0 -rw-r--r--   1 root     root            0 Jan 23 03:14 /var/log/httpd/access_log
    520714    4 -rw-r--r--   1 root     root          599 Set 30  2019 /var/log/httpd/error_log-20191006
    523413    0 -rw-------   1 root     lp              0 Jan 26 03:48 /var/log/cups/access_log
    523401   12 -rw-------   1 root     lp           9341 Jan 22 11:06 /var/log/cups/access_log-20200126
  27. Dentro da pasta /home, encontre arquivos(-type f), que foram modificados há mais de 20 dias ou acessado há mais de 40 dias, que não pertença ao grupo elder, e execute uma listagem(ls -l)
    [elder@centos65 Labs]$ sudo find /home -type f -iname "*txt"    \( -mtime +20 -o -atime +40  \)  ! -group elder   -exec ls -l {} \;
    -rw-r--r-- 1 elder marcos 0 Mar 12 12:44 /home/elder/docs/meuTextinho.txt
    -rw-r--r-- 1 elder marcos 0 Mar 12 12:44 /home/elder/docs/meuTextinho02.txt

    Bom relembrar aqui que, ! -group elder = A exclamação é uma negação e inverte o valor, faz com que  busque os arquivos não pertencentes ao grupo elder.

 

 

Conclusão

A ferramenta find é excelente e complexa, robusta. Aqui vimos alguns comandos usando find  com o intuito de praticarmos. Esse artigo é o nº 07, reveja os anteriores, assim como o próprio manual do comando(man find)  para mais detalhes.

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 07, Exemplos de Uso

Deixe uma resposta

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