Come monitorare quali file sono aperti

9

C'è uno strumento per monitorare quali processi aprono quali file sul sistema in modo da poter rintracciare quale processo continua a toccare un file specifico?

Lsof può scoprire se lo si esegue mentre il processo ha il file aperto, ma se si tratta di un processo di breve durata che viene eseguito ogni tanto, non è possibile accedervi con lsof. Hai bisogno di qualcosa che usi la traccia del kernel.

    
posta psusi 08.04.2011 - 20:44

2 risposte

7

Potresti forse usare un sistema di controllo per questo. È un po 'pesante, ma qualcosa del genere dovrebbe funzionare (in /etc/audit/audit.rules):

# delete all other rules
-D

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

e quindi penso che sia necessario riavviare auditd:

sudo service audit restart

(Nel caso in cui non lo si abbia installato, è nel pacchetto auditd.) Il colpevole può quindi essere trovato in /var/log/audit/audit.log.

    
risposta data taneli 01.07.2011 - 21:23
0

Sfortunatamente il meccanismo utilizzato da Linux per consentire a uno di monitorare i file è inotify, che non fornisce informazioni sufficienti per estrarre dati utili: si ottiene solo il nome del file e l'azione che è stata fatta.

Ho provato a utilizzare qualcosa di simile:

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

Questo in ascolto di inotify eventi sulla directory specificata e per ogni evento che esegue lsof per cercare di catturare il processo che tocca il file. Sfortunatamente per la maggior parte degli accessi che ho provato (come usare un editor per scrivere su un file) il comando LSOF è solo lento e non riesce a catturare il processo incriminato.

Se i tuoi processi eseguono un IO più intensivo sui file problematici, il tuo chilometraggio può variare. Buona fortuna.

    
risposta data Guss 14.04.2011 - 17:32

Leggi altre domande sui tag