
Angenommen, ich habe ein Programm und möchte dessen Dateisystemaktivität überwachen (welche Dateien/Verzeichnisse erstellt/geändert/gelöscht werden usw.). Dieses Programm kann möglicherweise weitere Prozesse erzeugen, und daher möchte ich auch die Aktivität dieser erzeugten Prozesse abrufen.
Wie gehe ich dabei vor?
Antwort1
Sie könnenstrace
dafür:
strace -f -e trace=file command args...
strace
verfolgt Systemaufrufe und druckt eine Beschreibung davon in die Standardfehlerausgabe, sobald sie auftreten. Die -f
Option weist das Programm an, auch untergeordnete Prozesse und Threads zu verfolgen. Mit dieser Option -e
können Sie die zu verfolgenden Aufrufe ändern: -e trace=file
jede Verwendung von open
, unlink
, usw. wird protokolliert, aber keine Aktionen, die keine Dateien betreffen.
Wenn Sie sehen möchten, was aus Dateien gelesen und in sie geschrieben wurde, ändern Sie es -e trace=file,read,write
stattdessen in ; dort können Sie auch alle weiteren Aufrufe auflisten, die Sie untersuchen möchten. Wenn Sie dieses Argument ganz weglassen, erhalten Sie jeden Systemaufruf.
Die Ausgabe sieht folgendermaßen aus (ich habe sie mkdir /tmp/test
in einer verfolgten Shell ausgeführt):
[pid 1444] execve("/usr/bin/mkdir", ["mkdir", "/tmp/test4"], [/* 33 vars */]) = 0
[pid 1444] access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
[pid 1444] open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
[pid 1444] open("/usr/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
[pid 1444] open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
[pid 1444] mkdir("/tmp/test", 0777) = 0
[pid 1444] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=1444, si_status=0, si_utime=0, si_stime=0} ---
Mit können Sie sich in eine Datei statt ins Terminal einloggen -o filename
und die Ausgabe mit -v (noch) ausführlicher machen. -p PID
Falls das nützlicher ist, können Sie sich auch mit an einen bereits vorhandenen Prozess anhängen.
Wenn Sie dies programmgesteuert tun möchten, anstatt es selbst zu überprüfen, schauen Sie sich dieptrace
Anruf, worauf strace
aufgebaut wird.