Überwachen des Dateizugriffs für eine OS X-Anwendung

61

Ich suche den OS X-Korrespondenten von FileMon, der später in ProcessMon enthalten war .

Übrigens ist es wichtig, nach Prozessen filtern zu können.

Sorin
quelle
Ich füge drei Optionen hinzu: Da sich das Unix-Erbe von Mac OS X von der NT-Architektur unterscheidet, überlappen sich die Tools nicht perfekt. Suchen Sie nach einer API zum Programmieren oder nach Tools, mit denen Sie einen Blick auf die aktuellen Ereignisse
werfen können

Antworten:

62

Instrumente - ein Teil der Apple Xcode Development Suite - können alle Dateizugriffe und Schreibvorgänge überwachen. Öffnen Sie es über /Applications/Xcode.app/Contents/Applications/Instruments.app, wählen Sie Ihre Anwendung oder Ihren Prozess aus und drücken Sie Start. In den Menüs stehen Ihnen umfangreiche Filtermöglichkeiten zur Verfügung.

Ältere Versionen von Xcode speichern die App unter /Developer/Applications/Instruments.app

Aeyoun
quelle
7
Ab Xcode 5 befindet sich dies nun in /Applications/Xcode.app/Contents/Applications/Instruments.app - und kann auch über die XCode-App - Xcode-> Open Developer Tool-> Instruments - erreicht werden.
Mixologic
Dies funktioniert nicht, wenn die Datei, auf die zugegriffen wird, aufgrund Ihrer Anwendung nicht ausgeführt wird
liquidblueocean
Tatsächlich funktioniert es unter OS X nicht: "Die E / A-Aktivität unterstützt die macOS-Plattform nicht". Lesen Sie auch: stackoverflow.com/questions/35621938/…
Können Sie diesbezüglich nähere Angaben machen? Welches Instrument - Aktivitätsmonitor? Ich sehe hier eine lange Ausgabe für alle Prozesse und bin nicht sicher, wie ich sie für einen Prozess auf die Festplatten-E / A filtern soll
Elliott,
43

Da ist der Befehl opensnoop. Wird ohne Argumente ausgeführt, überfordert es Sie möglicherweise mit der Ausgabe, kann jedoch mit Argumenten ausgeführt werden -n name, um die Ausgabe auf die angegebenen Prozesse zu beschränken name.

Harald Hanche-Olsen
quelle
1
In ähnlicher Weise erhalten sudo opensnoop | grep .classpathSie beispielsweise Zugriff auf eine Klassenpfaddatei.
Dávid Natingga
1
Beachten Sie, dass opensnoop und Instruments beide Frontends derselben DTrace-Engine sind. Weitere Frontends: dtrace.org/blogs/brendan/2011/10/10/…
MarcH
13

Launchd ist das wichtigste Tool auf Systemebene zur Überwachung von Dateien (und ein Ordner ist eine spezielle Datei), da es immer ausgeführt wird. Hazel ist ein Programm, das dabei hilft, WatchPaths mit einer hübschen Benutzeroberfläche zu versehen. Hier finden Sie viele Tipps zu launchd sowie Hunderte von Tutorials, einen guten Wikipedia-Artikel und die Apple-Entwicklerdokumente.

fseventsd protokolliert einige Änderungen - Sie können also FSeventer verwenden oder auf diese Dateien zugreifen, wenn launchd nicht Ihr Ding ist.

fs_usage und lsof sind prozessfähige Befehlszeilenprogramme, mit denen Sie das ausgeführte E / A- Subsystem abrufen können . Der fs_usage-Puffer kann überlastet werden. Wenn Sie also mehr Sicherheit wünschen und weniger "einen kurzen Blick darauf werfen" möchten, sind die Ergebnisse weniger zuverlässig als bei den anderen Befehlen.

bmike
quelle
Ich habe FSEventer einige Male verwendet, um herauszufinden, auf was eine Anwendung zugreift. Dies ist ideal, wenn Sie nach Lizenzdateien für die Systemabbildung für die Bereitstellung im Labor suchen.
Digitalchild
fseventer ist exzellent, um das große Ganze in Echtzeit zu sehen. Sie sehen wirklich, was los ist !.
ling
1
Da FSeventer tot ist, könnte man auch FSMonitor
GDP2
10

Niemand hat Activity Monitor erwähnt, der im /Applications/UtilitiesOrdner gefunden wurde.

Klicken Sie auf den Prozessnamen in der Liste und klicken Sie dann auf die Schaltfläche "Inspizieren" in der Symbolleiste.

Es gibt drei Registerkarten im Ergebnisfenster: Memory, Statistics, Open Files and Ports. Auf der Open Files and PortsRegisterkarte werden alle geöffneten Dateien angezeigt, die vom Prozess verwendet werden.

Ghoppe
quelle
1
Dies funktioniert nicht, wenn auf die Datei von einer unbekannten Anwendung zugegriffen wird
liquidblueocean
3

lsof

Befehl auf der Terminal.app kann das für Sie tun? Verwenden Sie die man lsof, um die Verwendung nachzuholen. Prost

kOoLiNuS
quelle
3

Der schnellere Weg ist:

$ lsof [path_to_file]

Diese Lösung erfordert kein root-Passwort und gibt Ihnen das folgende eindeutige Ergebnis zurück:

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
Finder     497  JR7   21r   REG    1,2   246223 33241712 image.jpg
QuickLook 1007  JR7  txt    REG    1,2   246223 33241712 image.jpg
bontoJR
quelle
1

Ebenfalls erhältlich sind iosnoopund iotopje nach Ihren spezifischen Bedürfnissen. Diese Terminalbefehle können durchgeleitet werden grep, um nach Dateisystemereignissen von einem bestimmten Prozess oder gegen eine bestimmte Datei zu suchen.

beporter
quelle
0

Es gibt eine grafische Oberfläche zum lsofEingeben von Informationen. Es ist Donationware von HAMSoft und heißt What's Keeping Me . Entwickelt, um zu antworten: "Warum kann ich das nicht aus meinem Papierkorb löschen?" Eine Frage, die unter OS X immer wieder auftaucht, ist auch eine praktische Möglichkeit, nach offenen E / A-Handles für laufende Prozesse zu suchen, wenn Sie nur neugierig sind, was los ist. Es ermöglicht Ihnen eine einfache Suche und Filterung.

Ian C.
quelle