1500 Views
Tempo de leitura: 2 MinutosMuito útil para a realização de diagnósticos, o comando `find` é, sem sombras de dúvidas, um grande aliado do Sysadmin Linux. É um verdadeiro canivete suíço, pois além de ser muito rápido, é extremamente flexível e possui diversas formas de uso.
Hoje vou falar sobre como localizar arquivos por data de leitura e/ou modificação.
O que é timestamp?
Todo arquivo presente no sistema operacional possui um registro timestamp. O timestamp nada mais é que a data/hora de acesso ou modificação de um arquivo.
Comando stat
Antes de falarmos sobre o `find`, precisamos entender um conceito, e para isso usaremos o comando `stat`. Ao rodarmos `stat file`, onde ‘file’ é um arquivo existente no disco, teremos uma saída de tela como esta:
[wil@valhalla] [~] $ stat file File: ‘file’ Size: 3 Blocks: 8 IO Block: 4096 regular file Device: fd03h/64771d Inode: 9462846 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-05-12 20:07:33.315881837 -0300 Modify: 2018-05-12 20:07:30.938963042 -0300 Change: 2018-05-12 20:08:28.702226203 -0300
Observemos as 3 últimas linhas: Access, Modify e Change.
Conceitualmente falando, para o idioma português, Modify e Change possuem um mesmo significado, pois remetem a uma mudança de estado, mas em inglês há diferença.
- Access: Data do último acesso/leitura.
- Modify: Mudança no conteúdo do arquivo. Não considera mudança de atributos.
- Change: Mudança gerais, de qualquer natureza.
Syntax básica do find
A syntax mais básica do find
é esta:
find diretório name arquivo
Convertendo para o comando, ficará assim:
find /etc/ -name passwd
Com isso o `find` procurará exatamente o arquivo passwd dentro do diretório /etc/.
Podemos usar um alias no lugar do nome do arquivo, abrangendo um pouco mais essa nossa busca:
find /etc/ -iname *passwd*
Desta forma, o `find` procurará todos os arquivos que contenham “passwd” no meio do nome. Havendo um arquivo chamado passwd.txt ou meupasswd, ambos serão listados.
Procurando arquivos com find por data de modificação
Chegamos ao ponto deste artigo. O `find` possui parâmetros para busca de arquivos por data de modificação. São eles:
- atime: Mudanças do tipo Access.
- mtime: Mudanças do tipo Modify.
- ctime: Mudanças do tipo Change.
Agora vejamos como fica o `find` com esses parâmetros. Primeiro, vamos localizar arquivos no /etc/ acessados há menos de 1 dia:
find /etc/ -iname * -atime -1
Localizando arquivos acessados há menos de 2 dias:
find /etc/ -iname * -atime -3
Agora ficou fácil, não? Vamos localizar arquivos modificados (Modify) há menos de 1 dia:
find /etc/ -iname * -mtime -1
Localizando arquivos modificados (Change) há menos de 5 dias:
find /etc/ -iname * -ctime -5
Onde usar?
Digamos que você tem um serviço fora do ar e quer consultar logs para identificar os motivos, mas não sabe qual é o log desse serviço. Nesse caso, pode-se usar o parâmetro -ctime e listar todos os logs modificados há menos de 1 dia. Descartando os arquivos de log que se sabe não pertencer ao serviço em questão, pode-se identificar o arquivo correto. A aplicabilidade é enorme.
Resumo
Cola com o `find` que você passa de ano. O `find` é vida.