Équivalent de SysInternals FileMon pour Linux?

13

J'essaie de déboguer une application sur Ubuntu - j'ai besoin d'écouter les tentatives d'ouverture de fichiers (même pour les fichiers qui n'existent pas).

Process Monitor (anciennement FileMon ) est disponible sur Windows - qu'y a-t-il dans la ceinture utilitaire d'Ubuntu?

Merci!

Ashley

pouletinabiscuit
la source

Réponses:

7

Vous cherchez une strace. Jetez un œil ici: https://wiki.ubuntu.com/Strace

Evan Anderson
la source
2
Si je comprends bien, l'exécution de filemon permet à l'utilisateur de voir tous les accès aux fichiers. strace d'autre part, vous oblige à spécifier quelle application ouvrir en premier. Cela nécessite que vous connaissiez au préalable l'application qui accède à ces fichiers. Que faire si vous ne savez pas quelle application accède aux fichiers que vous souhaitez consulter?
chuacw
8

Cela dépend de ce que vous voulez:

  • Dans le grand, vous voulez regarder inotify pour voir tous les accès aux fichiers que n'importe quel processus fait.

  • Dans le petit, strace vous permettra de regarder les appels système d'un processus particulier. Strace est assez génial. Vous pouvez tracer les appels d'un processus à «ouvrir» en faisant strace -f -eopen $cmd, par exemple. La page de manuel contient bien sûr tous les détails sur la syntaxe.

pjz
la source
Merci pjz. Pour être très précis, j'ai du mal à démarrer avec Ogre3d sur Ubuntu. Mon application de test semble rechercher des fichiers .cfg au démarrage. Je souhaite écouter toutes les tentatives d'ouverture de fichiers afin de garantir que les fichiers corrects sont disponibles et disposent des autorisations appropriées.
chickeninabiscuit
strace -e open ./app
Justin
2

stracedevant une application de départ est bon de regarder ce que fait l'application.
lsofest agréable de voir quels fichiers une application déjà en cours d'utilisation utilise.

BTW:
lsof -ni:22 montre quel processus utilise le port 22.

ThorstenS
la source
2

SGI dispose d'un outil que vous voudrez peut-être essayer: http://oss.sgi.com/projects/fam/

user10103
la source
2
sous linux fam est l'histoire. Utilisez vraiment inotify de nos jours
ThorstenS
1

Voici un exemple d'utilisation de strace pour suivre les modifications de fichiers:

strace -f -e trace=file -p7546 -o /tmp/outputfile

-fgarantit que les événements des processus enfants sont capturés.
-e trace=filedit que nous devrions saisir syscalls liées aux fichiers (par exemple stat, open, futexetc.)
-pest l'identifiant du processus (récupéré à partir ps -auxou tout autre moyen) a -oprécisé le outputfile (il peut y avoir beaucoup de données et vous pourriez plutôt utiliser grep comme un filtre.

waitinforatrain
la source
1

Essayez sysdig . Par exemple:

sysdig -A -c echo_fds

Maillot
la source
0

C'est vieux, mais je pense que c'est une bonne idée de le mettre à jour pour la réalité d'aujourd'hui.

Pour déboguer un seul processus et leurs enfants, strace est toujours le meilleur moyen. Il peut afficher facilement tous les accès aux fichiers, même sur les fichiers manquants.

Pour le débogage système générique, la fonction d'audit dans le noyau peut le faire et est la méthode recommandée. Il n'a pas besoin de correctif sur les noyaux récents, juste l'audit packagé installé

voici un simple gui pour l'utiliser:

audit-gui

Cela réplique le filemon windows, surveillant l'accès au fichier pour tous les endroits, processus, etc.

vérifiez aussi ce post

higuita
la source
0

C'est ce qui a bien fonctionné pour moi (Linux Mint 19.1):

sudo lsof 2>&1 | grep programnamehere

Je ne sais pas pourquoi 2>&1était nécessaire, mais il n'a pas filtré sauf si je l'ai utilisé.

Andrew
la source