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)?
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.
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.
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
lsof |grep (filename)
Cela vous montrera le processus qui utilise actuellement le fichier.