Woher weiß ich, welche Dateien ausgeführt werden, wenn ich eine Anwendung öffne?

12

Ich möchte wissen, was hinter dem Bildschirm passiert, wenn ich eine Anwendung öffne. Wenn ich zum Beispiel Firefox öffne, möchte ich wissen, welche Dateien gelesen und welche ausgeführt werden. Gibt es eine Möglichkeit, dies zu tun? Selbst wenn Firefox vom Terminal aus geöffnet wird, werden keine Informationen angezeigt. Betriebssystem: Ubuntu 12.04

Nitishch
quelle

Antworten:

21

Verwenden Sie strace!

Beispiel: Alle Dateien auflisten, die Firefox während einer Sitzung geöffnet hat:

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

Wenn Sie eine zweite Instanz von FireFox öffnen, führt dies zu folgendem Ergebnis: http://pastebin.com/iRqxgiWN .

Beispiel 2: Alle von FireFox ausgeführten Prozesse auflisten:

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

Beim Besuch von YouTube ergibt sich etwa Folgendes:

[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

Sie können dies auch mit vielen anderen Systemaufrufen tun ...

Indem Sie die Parameter von open()in Ihrer grepSuche abgleichen , können Sie auch herausfinden, in welchem ​​Modus die Datei geöffnet wurde:

Fügen Sie einfach | grep -P 'O_RDONLY|O_RDWR'(das führende Pipe-Zeichen ist wichtig!) Hinzu, um den Lesezugriff oder den | grep -P 'O_WRONLY|O_RDWR'Schreibzugriff auf Ihren Befehl zu filtern ...

EDIT :

Wie in den Kommentaren erwähnt, können Sie auch strace -fe open firefoxalle von FireFox geöffneten Dateien auflisten. Sie können auch verwenden strace -fe trace=file firefoxzur Liste alle von FireFox getan Dateioperationen , die einen Dateipfad als Argument haben (offen, stat, lstat, chmod, Zugang, ...).

Viele weitere sind verfügbar! Schauen Sie sich die Manpage zu strace (1) an .

alexander255
quelle
1
Ich bin ziemlich überrascht, dass Firefox eine Shell ausführen würde, um "netscape" aus der Prozessliste zu entfernen.
Michael
1
strace verfügt über umfangreiche Filterfunktionen. Versuchen Sie beispielsweise strace -e open, nur Anrufe zu zeigen open().
John Kugelman
@Michael es erzeugt eine Shell, weil es eine Pipe ("|") verwendet, die Shell-Syntax ist. Sie können dieselbe Pipe manuell aus dem Code einrichten, es ist jedoch viel einfacher, eine Shell dazu zu bewegen - vorausgesetzt, Sie wissen, dass keine Shell-Escape-Codes vom Benutzer weitergeleitet werden, was zu Sicherheitslücken führen kann.
Alistair Buxton
1

Eigentlich gibt es einen Modus, der als ausführlicher Modus bezeichnet wird, aber ich bin mir nicht sicher, ob Firefox eine solche Option hat. Aber kein Problem, jede Anwendung besteht aus ihrem Protokoll. Sie können also die Aktivität der Anwendung überprüfen, indem Sie ihre Protokolldaten überprüfen.

Wenn Sie das Protokoll für Firefox aktivieren möchten, können Sie dies überprüfen

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

Jede Anwendungsaktivität in Ubuntu können Sie mit ihren spezifischen Protokollen überprüfen. Alle Anwendungen werden im /var/logVerzeichnis protokolliert .

rɑːdʒɑ
quelle