Linux > Refinando buscas com Find

1500 Views
Tempo de leitura: 2 Minutos 
Atualizado em:

Muito ú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
Particularmente prefiro usar -iname ao -name, pois o -iname não é case sensitive, ao passo que -name o é.

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.

5 - 0

Thank You For Your Vote!

Sorry You have Already Voted!