
Journaliser les fichiers accédés par tout processus Linux
Whatfiles est un utilitaire Linux qui enregistre les fichiers qu'un autre programme lit/écrit/crée/supprime sur votre système. Il trace également tous les nouveaux processus et threads créés par le processus ciblé.
Je suis depuis longtemps frustré par l'absence d'un utilitaire simple pour voir quels fichiers un processus touche depuis main() jusqu'à la sortie. Que vous ne fassiez pas confiance à un éditeur de logiciel ou que vous vous préoccupiez des logiciels malveillants, il est important de pouvoir savoir ce qu'un programme ou un installateur fait sur votre système. lsof n'observe qu'un instant donné et strace est volumineux et un peu compliqué.
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-clone-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-heal-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-perspective-clone-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-convolve-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-smudge-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-dodge-burn-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/tool-options/gimp-desaturate-tool, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/plug-ins, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /usr/lib/gimp/2.0/plug-ins, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /home/theron/.gimp-2.8/pluginrc, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /usr/share/locale/en_US/LC_MESSAGES/gimp20-std-plug-ins.mo, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /usr/lib/gimp/2.0/plug-ins/script-fu, syscall: openat(), PID: 8566, process: gimp
mode: read, file: /etc/ld.so.cache, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /etc/ld.so.cache, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /usr/lib/libgimpui-2.0.so.0, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /usr/lib/libgimpwidgets-2.0.so.0, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /usr/lib/libgimpwidgets-2.0.so.0, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /usr/lib/libgimp-2.0.so.0, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
mode: read, file: /usr/lib/libgimpcolor-2.0.so.0, syscall: openat(), PID: 8574, process: /usr/lib/gimp/2.0/plug-ins/script-fu
utilisation de base, lance ls et écrit la sortie dans un fichier journal dans le répertoire courant :
$ whatfiles ls -lah ~/Documents
spécifier l'emplacement du fichier de sortie avec -o :
$ whatfiles -o MyLogFile cd ..
inclure la sortie de débogage, afficher sur stdout plutôt que dans un fichier journal :
$ whatfiles -d -s apt install zoom
s'attacher à un processus en cours d'exécution (nécessite les privilèges root) :
$ sudo whatfiles -p 1234
Des binaires prêts à l'emploi sont disponibles sur la page des versions ! Quelqu'un l'a également ajouté au dépôt Arch, et letompouce a mis en place un pipeline GitLab.
gcc et make) :$ cd whatfiles
$ make
$ sudo make install
Prend en charge les architectures x86, x86_64, ARM32 et ARM64.
N'est-ce pas juste une réimplémentation de strace -fe trace=creat,open,openat,unlink,unlinkat ./program ?
Oui. Bien qu'il vise à être plus simple et plus convivial.
Existe-t-il des versions pour Mac et Windows ?
Non. Tracer les appels système sur Mac nécessite task_for_pid(), qui nécessite une signature de code, que je n'arrive pas à faire fonctionner, et de toute façon je n'ai aucun intérêt à payer 100 $/an à Apple pour écrire des logiciels libres. dtruss sur Mac peut être utilisé pour suivre un seul processus et ses enfants, bien que le drapeau -t semble n'accepter qu'un seul appel système à filtrer. fs_usage fait quelque chose de similaire mais je ne suis pas sûr qu'il suive les processus/threads enfants. Process Monitor pour Windows est plutôt sympa.
whatfiles est utilisé pour lancer Firefox. (S'attacher avec -p [PID] une fois qu'il est en cours d'exécution fonctionne bien, tout comme utiliser whatfiles pour lancer une deuxième fenêtre Firefox si une est déjà ouverte.)Merci pour votre intérêt, et n'oubliez pas de jeter un œil à Cloaker, Nestur et Flying Carpet !