Aqui chegamos no momento de encerramento do nosso laboratório de testes do comando find. Foram, com esse, 7 artigos.
- Linha de Comando em Linux: Find – Parte 01
- Linha de Comando em Linux: Find – Parte 02, Opções Verdadeiras -H -L -P
- Linha de Comando em Linux: Find – Parte 03, Depuração(Debug) de Erros
- Linha de Comando em Linux: Find – Parte 04, Otimizando as Buscas com a Opção -O
- Linha de Comando em Linux: Find – Parte 05, Expressões
- Linha de Comando em Linux: Find – Parte 06, Operadores
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Arquivos modificados há mais de um ano(360 dias).
[elder@centos65 ~]$ find -mtime +360 ./.bash_profile ./.bashrc ./imagens_e_documentos/004.pdf ./.bash_logout
- 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.
- Arquivos modificados há menos de 1 home(60 minutos 🙂 )
[elder@centos65 ~]$ sudo find -cmin -60 ./arquivoSegredo.txt
- Arquivos maiores que 1 Giga Byte em todo o sistema.
[elder@centos65 ~]$ sudo find / -size +1G
- 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
- Encontre o arquivo lista.txt dentro da minha pasta home
[elder@centos65 Labs]$ find -iname "lista.txt"
- Encontre o arquivo “arquivo.txt”
[elder@centos65 Labs]$ find -iname "arquivo.txt" ./arquivo.txt
- 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.
- 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
- 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.
- 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
- 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
- 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
- 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
- Dentro de /sbin pesquise todos os arquivos com permissão SGID
[elder@centos65 Labs]$ sudo find /sbin -perm -g=s /sbin/netreport
- Dentro de /sbin pesquise todos os arquivos com Stick Bit configurado
- 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 {} \;
- 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
- 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 {} \;
- 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
- 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.
2 Comments to “Linha de Comando em Linux: Find – Parte 07, Exemplos de Uso”