Como monitorar quais arquivos são abertos

9

Existe uma ferramenta para monitorar quais processos abrem quais arquivos no sistema para que você possa rastrear qual processo continua tocando em um arquivo específico?

O Lsof pode descobrir se você o executa enquanto o processo tem o arquivo aberto, mas se for um processo de curta duração que é executado de vez em quando, não é possível captá-lo com lsof. Precisa de algo que use rastreamento de kernel.

    
por psusi 08.04.2011 / 20:44

2 respostas

7

Você poderia usar o sistema de auditoria para isso. É um pouco pesado, mas algo assim deve funcionar (em /etc/audit/audit.rules):

# delete all other rules
-D

# watch the file in question
-w /path/to/file -p rwxa

e, em seguida, acho que você precisa reiniciar o auditd:

sudo service audit restart

(Caso você não o tenha instalado, ele está no pacote auditd.) O culpado pode ser encontrado em /var/log/audit/audit.log.

    
por taneli 01.07.2011 / 21:23
0
Infelizmente, o mecanismo que o Linux usa para permitir o monitoramento de arquivos é o inotify, que não fornece informações suficientes para extrair dados úteis: você só obtém o nome do arquivo e a ação que foi executada.

Eu tentei usar algo assim:

sudo inotifywait -mr somedir --format "%w%f" | while read file; do echo -n "$file => ";lsof -b $file; echo ""; done

Isto escuta inotify eventos no diretório especificado e para cada evento ele executa lsof para tentar capturar o processo que toca o arquivo. Infelizmente, para a maioria dos acessos que testei (como usar um editor para gravar em um arquivo), o comando LSOF é apenas para desacelerar e não consegue capturar o processo ofensivo.

Se seus processos fizerem uma IO mais intensa nos arquivos problemáticos, sua milhagem poderá variar. Boa sorte.

    
por Guss 14.04.2011 / 17:32