Ich habe ein Programm, das mehrere untergeordnete Prozesse erzeugt.
Ich möchte wissen, welche Dateien dieses Programm und seine untergeordneten Programme erstellen, löschen und ändern.
inotifywait
kann mir sagen, auf welche Dateien zugegriffen wird, aber nicht, welcher Prozess dies tut. Und ich muss wissen, wo die Dateien erstellt werden, um den Monitor einzurichten.auditctl
ermöglicht mir, zu protokollieren, welche Prozesse eine Datei ändern, aber um die Protokollierung einzurichten, muss ich wiederum wissen, wo sich die Dateien befinden.lsof
teilt mir alle Dateien mit, scheint aber keine gute Lösung für die Echtzeitverfolgung zu sein.
Gibt es etwas, mit dem ich die Dateimanipulation eines Programms überwachen kann, ohne im Voraus zu wissen, welche Dateien manipuliert werden?
Antwort1
Unter Linux können Sie strace
folgende Ereignisse überwachen:
strace -f -p <PID> -e trace=file
Unter Solaris können Sie verwenden dtrace
. Sehen Sie sich das Tool DTraceToolkit an opensnoop
, das unter Solaris 11 standardmäßig unter installiert ist /usr/dtrace/DTT/Bin/opensnoop
.
/usr/dtrace/DTT/Bin/opensnoop -p <pid>
Antwort2
Für Linux: opensnoop von Brendengregs Perf-Tools sollte den Job erledigen https://github.com/brendangregg/perf-tools
Für Solaris gibt es Dtrace sowieso