web-dev-qa-db-fra.com

Comment déterminer quel processus crée un fichier?

Compte tenu du chemin d'accès au fichier, comment puis-je déterminer quel processus le crée (et/ou lit/écrit dans celui-ci)?

67
Anton Barkovsky

La commande lsof (déjà mentionnée dans plusieurs réponses) vous indiquera quel processus a un fichier ouvert au moment où vous l'exécutez . lsof est disponible pour à peu près toutes les variantes Unix.

lsof /path/to/file

lsof ne vous dira pas quel fichier a été ouvert il y a deux microsecondes et fermé il y a une microseconde. Si vous avez besoin de regarder un fichier particulier et de réagir lors de son accès, vous avez besoin de différents outils.

Si vous pouvez planifier un peu à l'avance, vous pouvez placer le fichier sur un système de fichiers LoggedFS. LoggedFS est un système de fichiers empilé Fuse qui enregistre tous les accès aux fichiers dans une hiérarchie. Les paramètres de journalisation sont hautement configurables. Le fusible est disponible sur tous les principaux unités . Vous souhaiterez consigner les accès au répertoire dans lequel le fichier est créé. Commencez avec l'exemple de fichier de configuration fourni et ajustez-le selon ce guide .

loggedfs -l /path/to/log_file -c /path/to/config.xml /path/to/directory
tail -f /path/to/log_file

Beaucoup d'unités offrent d'autres fonctions de surveillance. Sous Linux, vous pouvez utiliser le relativement nouveau sous-système d'audit . Il n'y a pas beaucoup de littérature à ce sujet (mais plus que sur logsfs); vous pouvez commencer avec ce tutoriel ou apeexemples ou simplement avec le auditctl page de manuel . Ici, il devrait suffire de s'assurer que le démon est démarré, puis exécutez auditctl:

auditctl -w /path/to/file

(Je pense que les anciens systèmes ont besoin de auditctl -a exit,always -w /path/to/file) et regardez les journaux dans /var/log/audit/audit.log.

Eh bien, vous pouvez exécuter lsof à plusieurs reprises, et si vous êtes chanceux, le coupable maintiendra le fichier ouvert assez longtemps pour qu'il s'affiche. C'est à dire.:

$ lsof -r1 /path/to/file

ou pour de nombreux fichiers

$ lsof -r1 /path/to/folder/*

Cela répertoriera tous les accès au chemin donné à un certain moment, une fois par seconde. Cela inclut la liste des PID du processus accédant au fichier.

Si cela ne fonctionne pas, c'est-à-dire que le dossier est ouvert et fermé très rapidement, ce qui est souvent le cas, je pense que vous devez rechercher des outils plus élaborés. Peut-être que logsfs pourrait être quelque chose?

Hackland
Si le _ une fois par seconde lsof ne fonctionne pas, vous pouvez bien sûr pirater une boucle while qui exécute lsof à plusieurs reprises aussi rapidement que possible. Comme:

$ while true; do lsof /paht/to/file; done;

Pas joli, mais qui sait, pourrait bien le faire.

11
0scar

Vous pouvez utiliser lsof pour cela:

$ lsof /tmp/file
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
less      4737 wena    4r   REG    8,6    90700 1643536 /tmp/file

Il dit que le processus nommé less est de garder le fichier "/ tmp/file" ouvert.

NOTE : Étrangement, cela ne fonctionne pas si j'utilise geany ou nano. J'attends avec impatience de meilleures suggestions.

1
tshepang

Vous pouvez utiliser ls et grep pour connaître les fichiers utilisés par Chrome

$ ls -l /proc/*/fd | grep "chrome"
lrwx------ 1 ba abc 64 Jul 16 22:19 104 -> /home/abc/.config/google-chrome/Default/Cookies
lr-x------ 1 abc abc 64 Jul 16 22:19 113 -> /opt/google/chrome/nacl_irt_x86_64.nexe
lrwx------ 1 abc abc 64 Jul 16 22:19 121 -> /home/abc/.cache/google-chrome/Default/Cache/data_0
lrwx------ 1 abc abc 64 Jul 16 22:19 122 -> /home/abc/.cache/google-chrome/Default/Cache/data_1
lrwx------ 1 abc abc 64 Jul 16 22:19 123 -> /home/abc/.cache/google-chrome/Default/Cache/data_2
lr-x------ 1 abc abc 64 Jul 16 22:19 125 -> /home/abc/.config/google-chrome/Dictionaries/en-US-3-0.bdic

Une autre façon consiste à utiliser lsof et grep

$ lsof | grep "chrome"
chrome     2204       abc  cwd       DIR                8,5     4096 1441794 /home/abc
chrome     2204       abc  rtd       DIR                8,5     4096       2 /
chrome     2204       abc  txt       REG                8,5 87345336 5111885 /opt/google/chrome/chrome
chrome     2204       abc  mem       REG                8,5  4202496 1443927 /home/abc/.cache/google-chrome/Default/Media Cache/data_3
chrome     2204       abc  mem       REG                8,5  1056768 1443926 /home/abc/.cache/google-chrome/Default/Media Cache/data_2
chrome     2204       abc  mem       REG                8,5   270336 1443925 /home/abc/.cache/google-chrome/Default/Media Cache/data_1
chrome     2204       abc  mem       REG                8,5    45056 1443924 /home/abc/.cache/google-chrome/Default/Media Cache/data_0
0
SRINIVAS KATLA
lsof |grep (filename)

Cela vous montrera le processus qui utilise actuellement le fichier.

0
Matthew