Quando se trabalha com o sistema Linux, é muito importante compreender a utilização dos seus comandos. Embora o Linux possibilite trabalhar com a interface gráfica — assim como no Windows — e isso possa parecer mais prático, a utilização das linhas de comandos promove mais agilidade e eficácia para realizar tarefas.
Neste post, falaremos sobre um dos comandos mais usados do sistema Linux: o comando find. Esse comando permite ao usuário fazer buscas e localizar listas de arquivos/diretórios correspondentes às condições especificadas no momento da pesquisa.
Uma das funcionalidades mais interessantes do comando find são os critérios de busca, dos quais podemos ressaltar: tamanho; data/horário de modificação; formato; permissões; usuários etc.
Ou seja, são diversos os critérios, que facilitam bastante a tarefa de localizar um arquivo que seria difícil de acessar navegando pelas pastas. Além disso, vale ressaltar que o comando find está incluso, por padrão, na maioria das versões do Linux, não carecendo da instalação de packages.
Lembrando que você também pode utilizar o comando locate para localizar arquivos no Linux.
Portanto, sem mais delongas, apresentaremos 10 exemplos práticos de como você pode utilizar o comando find em sua rotina. Confira!
1. Listar todos os arquivos contidos em um diretório e subdiretórios
Para exibir uma lista com todos os arquivos localizados em um determinado diretório, incluindo os arquivos armazenados nos subdiretórios, basta aplicar o comando find da seguinte forma:
$ find . ./exemplo.txt ./subpasta ./subpasta/comandofind.php ./audio.mp4 ./exemplo2.php
2. Especificar um limite de subdiretórios a serem exibidos
Imaginemos uma situação em que o primeiro exemplo tenha sido aplicado e haja dezenas de subdiretórios que sendo exibidos na lista. No caso, você não precisa receber tantas informações, e então deseja que somente os primeiros subdiretórios sejam exibidos.
Para isso, estabeleça uma condição que defina o nível de “profundidade” na navegação dos subdiretórios por meio do maxdepth:
$ find ./test -maxdepth 1 -name *.php ./test/comandofind.php
Caso a intenção seja a de localizar arquivos com um maior nível de profundidade, este nível deverá ser especificado logo após digitar “-maxdepth”. Exemplo:
$ find ./test -maxdepth 2 -name "*.php" ./test/subpasta/comandofind.php ./test/exemplo2.php
3. Combinar múltiplos critérios de busca
Estabelecer mais de um critério em uma mesma busca é mais simples do que se pode imaginar. Vamos supor que o usuário necessite localizar um arquivo chamado “comandofind.txt”, de forma que o “comandfind.php” não apareça — para isso, utiliza-se o inversion (!).
$ find ./test -name 'comandofind*' ! -name '*.php' ./test/comandofind.txt
É possível, também, aplicar a condição OR para estabelecer ainda mais critérios. Se o usuário quiser localizar arquivos levando em conta os formatos “txt” e “php”, basta incluir o caractere “o” na linha de comando.
$ find -name '*.php' -o -name '*.txt' ./exemplo.txt ./subdir/comandofind.php ./exemplo2.php ./exemplo3.txt
4. Localizar somente arquivos ou somente diretórios
Nos exemplos anteriores, percebe-se que arquivos e diretórios são listados juntos em cada busca. Porém, é possível buscar somente por uma das duas coisas:
$ find ./test -name exemplo* ./test/exemplo.txt ./test/exemplo
Somente arquivos
$ find ./test -type f -name "exemplo*" ./test/exemplo.txt
Somente diretórios
$ find ./test -type d -name "exemplo*" ./test/exemplo
Perceba que, na busca por arquivos, basta incluir “-type f” antes de digitar o nome, enquanto na busca por diretório inclui-se o “-type d”. Não por acaso, as letras representam as iniciais para files (arquivos) e directories (diretórios).
5. Localizar arquivos ocultos
Até agora, nós explicamos como usar o comando find para encontrar arquivos comuns, tendo plena ciência de seus nomes ou formatos. Mas como localizar os arquivos ocultos nos diretórios?
Muitas vezes, nem sabemos que existe um arquivo oculto — o que nos leva a desconhecer o nome do mesmo. Porém, apesar desse “pequeno” detalhe, encontrar esses arquivos é muito fácil.
Basta especificar que está buscando apenas arquivos (-type f) e usar um ponto final (.) no lugar do nome. Veja:
$ find ~ -type f -name ".*"
6. Encontrar arquivos com determinadas permissões
Se o termo “permissões” ainda não ficou muito claro para você, não se preocupe! No sistema Linux, as permissões são muito comuns, e são utilizadas justamente para definir os usuários que podem acessar determinados arquivos e diretórios.
E, como mencionamos no início do texto, o comando find pode ser utilizado para localizar arquivos e diretórios a partir de uma determinada permissão. Supondo que a permissão em questão seja a “permissão 0740”, o comando para localizar arquivos deve ser feito da seguinte forma:
$ find . -type f -perm 0740 ./exemplo.txt ./subpasta/comandofind.php ./audio.mp4 ./exemplo2.php
Lembra-se do inversion, a condição representada pelo ponto de exclamação? Ela pode ser aplicada para detectar possíveis erros de segurança ligados às permissões.
$ find . -type f -perm 0655 ./exemplo.txt ./subpasta/comandofind.php ./audio.mp4 ./exemplo2.php
7. Encontrar arquivos com base em proprietários
Assim como é possível utilizar o comando find para localizar arquivos a partir de uma permissão, o mesmo pode ser feito a partir de um determinado grupo ou owner.
Exemplo: para localizar arquivos pertencentes ao diretório de um determinado usuário chamado Maria, basta utilizar a condição “–user” e digitar o nome do usuário.
$ find . –user maria ./exemplo.txt ./subpasta/comandofind.php ./audio.mp4 ./exemplo2.php
Para estabelecer um critério de busca, basta inseri-lo logo após o nome do usuário. Exemplo:
$ find . –user maria –name ‘*.txt’
8. Localizar arquivos pertencentes a um grupo
Se a ideia for usar o comando find com base em um determinado grupo (chamado “adm”, por exemplo), basta escrever a seguinte linha:
# find /var/www –group adm
9. Pesquisar por arquivos e diretórios com base em períodos de modificação
Uma das funcionalidades mais úteis do comando find é a pesquisa baseada em data e hora de modificação. Nos aspectos de segurança, podemos considerar esse critério fundamental. A seguir, apresentaremos alguns exemplos.
Localizar arquivos modificados há ‘N’ dias
Vamos supor que o usuário em questão deseje acessar arquivos modificados há 5 dias.
# find / -ntime 5
Localizar arquivos acessados há ‘N’ dias
Para isso, basta trocar o “–ntime” por “-atime”.
# find / -atime 5
Localizar arquivos modificados entre X e Y dias atrás
Se, por exemplo, o usuário precisar localizar arquivos modificados entre 30 e 90 dias atrás, basta digitar:
# find / -mtime +30 –mtime -90
10. Localizar arquivos com base no tamanho
Para utilizar o tamanho do arquivo como critério, utiliza-se o “-size” no comando find. Utilizemos como exemplo a busca por arquivos de 40MB:
# find / -size 40M
E então, o que achou desses comandos do LINUX utilizando o find ? Aproveite também para participar do meu mini-treinamento de LINUX, pra você dominar por completo esse poderoso sistema!