Das Dienstprogramm "opensnoop" funktioniert nicht mit Leerzeichen zwischen Dateinamen. Wie kann das Problem behoben werden?

7

Ich benutze "opensnoop"

/usr/bin/opensnoop

um alle Dateien anzuzeigen, die aus verschiedenen Prozessen geöffnet wurden.

Aber wenn ich eine Datei mit spezifizieren möchte

sudo opensnoop -n "directory/filename"

Ich erhalte diesen Fehler:

token too large, exceeds YYLMAX

Ich bin auf der Suche nach einer Lösung und habe nur diese Website gefunden . Der Autor hat das opensnoop-Skript geändert:

Dies liegt an Zeile 154 in / usr / bin / opensnoop, die die Inline-Zeichenfolge NAME = "'$ pname'" enthält. das erzeugt ein dtrace-Skript mit dieser zitierenden Inline-Zeichenfolge NAME = "foo '' bar"; und das erste einfache Anführungszeichen beendet den dtrace-Aufruf und lässt sein Eingabeskript unvollständig. Der schnelle Patch besteht darin, Zeile 154 durch die Inline-Zeichenfolge NAME = "'" $ pname "'" zu ersetzen.

aber ich bekomme immer noch diese Fehlermeldung.

Kann mir jemand helfen? Oder sagen Sie mir ein anderes Dienstprogramm, mit dem ich die App anzeigen kann, die gerade mit einer bestimmten Datei arbeitet?

Bastian Gruber
quelle
1
-nwird verwendet, um den zu beschnüffelnden Prozessnamen zu identifizieren. Warum benötigen Sie dafür einen Pfad?
Nohillside
@patrix Gibt beispielsweise sudo opensnoop -n System\ Preferencesdenselben Fehler aus, und -f funktioniert auch nicht mit Pfaden mit Leerzeichen.
Lri

Antworten:

8

-nist nur zur Verwendung mit Prozessnamen wie gedacht sudo opensnoop -n System\ Preferences. Verwenden Sie, um zu sehen, welche Prozesse auf eine Datei zugreifen sudo opensnoop -f /tmp/a\ b.txt.

Die im Blog-Beitrag erwähnte Änderung behebt -n, aber nicht -f. Um beide zu beheben, bearbeiten /usr/bin/opensnoopund ersetzen Sie diese Zeilen:

inline string PATHNAME = "'$pathname'";
inline string NAME = "'$pname'";

Mit diesem:

inline string PATHNAME = "'"$pathname"'";
inline string NAME = "'"$pname"'";
Lri
quelle
Vielen Dank! Wenn ich zum Beispiel einen Screenshot über die Vorschau öffne und opensoop -n "Screenshot" öffne, werden keine Prozesse angezeigt. Sollte es nicht den "Preview-Prozess" geben?
Bastian Gruber
Du sollst so etwas benutzen sudo opensnoop -f ~/Pictures/Screenshot.png.
Lri
Ahhh ... wie dumm könnte ich sein ... sicher! Vielen Dank! RTFM ... :)
Bastian Gruber