Ich habe es versucht tracefile
. Für mich gab es viel weniger Übereinstimmungen als meine eigenen strace ... | sed ... | sort -u
. Ich habe sogar -s256
die strace(1)
Befehlszeile hinzugefügt , aber es hat nicht viel geholfen ...
Dann habe ich das versucht loggedfs
. Zuerst schlug es fehl, da ich keinen Lese- / Schreibzugriff auf das Verzeichnis hatte, mit dem ich mich anmelden wollte. Nachdem ich vorübergehend chmod 755 gemacht habe, habe ich ein paar Hits bekommen ...
Für mich scheint es jedoch am besten zu sein, Folgendes zu tun:
inotifywait -m -r -e OPEN /path/to/traced/directory
Anschließend wird die Ausgabe nach dem Ausführen des gewünschten Prozesses nachbearbeitet.
Dies erfasst weder den Dateizugriffsprozess außerhalb des
verfolgten Verzeichnisses, noch weiß dies, ob ein anderer Prozess auf denselben Verzeichnisbaum zugegriffen hat, aber in vielen Fällen ist dies ein ausreichend gutes Tool, um die Aufgabe zu erledigen.
BEARBEITEN: inotifywait fängt keinen Symlink-Zugriff ab (nur die Ziele, nachdem die Symlinks aufgelöst wurden). Das traf mich, als ich Bibliotheken archivierte, auf die ein Programm für die zukünftige Verwendung zugreift. Verwenden Sie eine zusätzliche Perl-Glob-Hackerei, um die Symlinks in den gemeldeten Bibliotheken auszuwählen, um die Arbeit in diesem speziellen Fall zu erledigen.
EDIT2: Zumindest wenn sich Dateien und Symlinks über die Befehlszeilenausgabe inotifywait (z. B. inotifywait -m file symlink
oder inotifywait symlink file
) inotifizieren, wird der Zugriff darauf angezeigt , welche zuerst in der Befehlszeile angezeigt wird (unabhängig davon, auf welche file
von symlink
zugegriffen wird). inotifywait unterstützt IN_DONT_FOLLOW nicht - was, als ich es programmatisch versuchte, einem den Zugriff auf file
(was möglicherweise erwartet wird, oder auch nicht ...) unabhängig von der Reihenfolge in der Befehlszeile anzeigt
strace
gehe ich davon aus, dass Sie speziell an Linux interessiert sind. Richtig?