De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 2 de dezembro de 2022
Suponhamos que você precise encontrar arquivos que possuem uma determinada nomenclatura, e uma vez encontrados, pesquisar seu conteúdo para buscar por um determinado texto.
Podemos combinar os comandos find
para localizar os arquivos desejados,
e o comando grep
ou zgrep
(arquivos compactados) para investigar
seu conteúdo em busca do texto desejado.
find [ponto inicial da busca] -name [nome do arquivo ou regex] -exec zgrep -H "[texto]" {} \;
Por exemplo, para investigar todos os arquivos de log do servidor
da Dicas-L para saber quantos acessos foram feitos à dica de nome
esta_pessoa_nao_existe.php
, que é um texto sobre a construção de faces com
inteligência artificial, emitimos o seguinte comando:
$ sudo find /var/log -name '*.log' -exec grep -H 'esta_pessoa_nao_existe.php' {}\;
Como o apache compacta os arquivos de log para reduzir o uso de espaço em disco, e atribui a eles uma numeração, podemos extender a pesquisa a estes arquivos com o seguinte comando:
$ sudo find . -name '*.log' -o -name '*.log.*.gz' -exec zgrep -H 'esta_pessoa_nao_existe.php' {} \;
Neste último comando usei o comando zgrep
pois alguns dos arquivos estão
compactados e comando grep
normal não consegue ler o conteúdo dos arquivos. O
comando zgrep
, por sua vez, também consegue ler o conteúdo de arquivos
não compactados.
A opção -H
dos comandos grep
e zgrep
faz com que o nome do arquivo onde foi
encontrado o texto pesquisado seja inserido no começo da linha.
O que acontece nesse comando? O comando find
localiza os arquivos que atendem
ao critério especificado (*.log
e *.log.*.gz
). Por meio da diretiva
-exec
o comando zgrep|grep
recebe como entrada, por meio das chaves
({}
) o nome desses arquivos.
$ sudo find . -name '*.log' -o -name '*.log.*.gz' -exec zgrep -H 'esta_pessoa_nao_existe.php' {} \;
dicas-l.access.log:52.213.28.186 - - [02/Dec/2022:21:18:05 -0300] "GET /arquivo/esta_pessoa_nao_existe.php HTTP/1.1" 200 9976 "-" "ias-ir/3.1 (+https://www.admantx.com/service-fetcher.html)"
Se eu quiser apenas contar quantas vezes esse arquivo foi acessado, basta
acrescentar o comando wc -l
ao final:
$ sudo find . -name '*.log' -o -name '*.log.*.gz' -exec zgrep -H 'esta_pessoa_nao_existe.php' {} \; | wc -l
852
Esta página do meu site já foi acessada até agora 852 vezes. 😉
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários