web-dev-qa-db-fra.com

Comment surveiller quels fichiers sont ouverts

Existe-t-il un outil pour contrôler quels processus ouvrent quels fichiers sur le système afin que vous puissiez suivre quel processus continue de toucher un fichier spécifique?

Lsof peut savoir si vous l'exécutez tant que le processus a le fichier ouvert, mais s'il s'agit d'un processus de courte durée qui s'exécute de temps en temps, vous ne pouvez pas l'attraper avec lsof. Besoin de quelque chose qui utilise le traçage du noyau.

9
psusi

Vous pourriez peut-être utiliser un système d'audit pour cela. C'est un peu lourd, mais quelque chose comme ça devrait marcher (dans /etc/audit/audit.rules):

# delete all other rules
-D

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

et puis je pense que vous devez redémarrer auditd:

Sudo service audit restart

(Si vous ne l'avez pas installé, c'est dans le paquet auditd.) Le coupable se trouve alors dans /var/log/audit/audit.log.

7
taneli

Malheureusement, le mécanisme utilisé par Linux pour autoriser la surveillance de fichiers est inotify, ce qui ne fournit pas assez d'informations pour extraire des données utiles: vous obtenez uniquement le nom du fichier et l'action effectuée.

J'ai essayé d'utiliser quelque chose comme ça:

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

Cela écoute inotify les événements sur le répertoire spécifié et pour chaque événement, il lance lsof pour tenter d’attraper le processus qui touche le fichier. Malheureusement pour la plupart des accès que j'ai testés (comme utiliser un éditeur pour écrire dans un fichier), la commande LSOF est juste pour ralentir et n'arrive pas à intercepter le processus incriminé.

Si vos processus utilisent des IO plus intensifs sur les fichiers problématiques, votre kilométrage peut varier. Bonne chance.

0
Guss