Comment savoir quels fichiers sont exécutés lorsque j'ouvre une application?

12

Je veux savoir ce qui se passe derrière l'écran lorsque j'ouvre une application. Par exemple, lorsque j'ouvre Firefox, je veux savoir quels fichiers sont lus et lesquels sont exécutés. Est-ce qu'il y a un moyen de faire ça. Même l'ouverture de Firefox depuis le terminal n'affiche aucune information. OS: Ubuntu 12.04

nitishch
la source

Réponses:

21

Utilisez strace!

Exemple: répertoriez tous les fichiers ouverts par Firefox au cours d'une session:

strace -f firefox 2>&1 | grep 'open('

Il en résulte quelque chose comme ceci si vous ouvrez une deuxième instance de FireFox: http://pastebin.com/iRqxgiWN (L'option '-f' fait simplement suivre les fourches du processus de suivi de strace.)

Exemple 2: répertoriez tous les processus exécutés par FireFox:

strace -f firefox 2>&1 | grep -P 'exec[vlpe]*\('

Cela se traduit par quelque chose comme ça lorsque vous visitez YouTube:

[pid 25020] execve("/usr/lib/firefox/plugin-container", ["/usr/lib/firefox/plugin-containe"..., "/usr/lib/adobe-flashplugin/libfl"..., "-greomni", "/usr/lib/firefox/omni.ja", "-appomni", "/usr/lib/firefox/browser/omni.ja", "-appdir", "/usr/lib/firefox/browser", "15198", "false", "plugin"], [/* 57 vars */]) = 0
[pid 25024] execve("/bin/sh", ["sh", "-c", "ps x | grep netscape"], [/* 57 vars */]) = 0
[pid 25025] execve("/bin/ps", ["ps", "x"], [/* 57 vars */] <unfinished ...>
[pid 25026] execve("/bin/grep", ["grep", "netscape"], [/* 57 vars */]) = 0

Vous pouvez également le faire avec de nombreux autres appels système ...

En faisant correspondre les paramètres de open()dans votre greprecherche, vous pouvez également savoir dans quel mode le fichier a été ouvert:

Ajoutez simplement | grep -P 'O_RDONLY|O_RDWR'(le caractère pipe principal est important!) Pour filtrer l'accès en lecture ou | grep -P 'O_WRONLY|O_RDWR'pour l'accès en écriture à votre commande ...

MODIFIER :

Comme mentionné dans les commentaires, vous pouvez également utiliser strace -fe open firefoxpour répertorier tous les fichiers ouverts par FireFox. Vous pouvez également utiliser strace -fe trace=file firefoxpour lister toutes les opérations de fichiers effectuées par FireFox qui ont un chemin de fichier comme argument (open, stat, lstat, chmod, access, ...).

Beaucoup d'autres sont disponibles! Consultez la page de manuel de strace (1) .

alexander255
la source
1
Je suis plutôt surpris que firefox exécute un shell pour grep "netscape" à partir de la liste des processus.
Michael
1
strace possède de vastes capacités de filtrage intégrées. Essayez strace -e opend'afficher uniquement les appels à open(), par exemple.
John Kugelman
@Michael, il génère un shell car il utilise un tube ("|") qui est la syntaxe du shell. Vous pouvez configurer manuellement le même canal à partir du code, mais il est beaucoup plus facile de laisser un shell le faire - tant que vous savez qu'il n'y a aucune chance que les codes d'échappement du shell soient transmis par l'utilisateur, ce qui peut entraîner des failles de sécurité.
Alistair Buxton
1

en fait, il existe un mode nommé mode verbeux, mais je ne suis pas sûr que Firefox ait une telle option.Certains l'ont généralement. Mais pas de problème, chaque application sera constituée de son journal.Vous pouvez donc vérifier l'activité de l'application en vérifiant ses données de journal.

Si vous souhaitez activer le journal pour Firefox, vous pouvez cocher cette case

http://bertrandbenoit.blogspot.in/2011/09/activate-logging-for-mozilla.html

chaque activité d'application dans Ubuntu, vous pouvez vérifier avec leurs journaux spécifiques. Toutes les applications se connecteront dans le /var/logrépertoire.

rɑːdʒɑ
la source