Come monitorare l'accesso ai file per un'applicazione OS X?


61

Sto cercando il corrispondente OS X di FileMon, che è stato successivamente incluso in ProcessMon .

A proposito, è essenziale essere in grado di filtrare per processo.


Aggiungerò tre opzioni - poiché l'eredità unix di Mac OS X è diversa dall'architettura NT - gli strumenti non si sovrappongono perfettamente. Stai cercando un'API da programmare o solo strumenti per sbirciare ciò che sta accadendo (o attivare azioni dopo la modifica di un determinato file)
bmike

Risposte:


62

Instruments - una parte della suite di sviluppo Xcode di Apple - può monitorare tutti gli accessi e le scritture di file. Aprilo da /Applications/Xcode.app/Contents/Applications/Instruments.app, seleziona l'applicazione o il processo e premi Start. Sono disponibili ampie opzioni di filtro nei menu.

Le versioni precedenti di Xcode memorizzano l'app in /Developer/Applications/Instruments.app


7
A partire da Xcode 5, questo si trova ora in /Applications/Xcode.app/Contents/Applications/Instruments.app - e può essere raggiunto anche dall'app XCode - Xcode-> Open Developer Tool-> Instruments.
Mixologic

Questo non funziona se il file a cui si accede non sta accadendo a causa della tua applicazione
liquidblueocean,

In realtà non funziona per OS X: "L'attività I / O non supporta la piattaforma macOS". Leggere anche: stackoverflow.com/questions/35621938/...

Potete fornire maggiori dettagli al riguardo? Quale strumento - Activity Monitor? Sto vedendo un output lungo per tutti i processi qui, non sono sicuro di come filtrarlo su I / O su disco per un processo
Elliott

43

C'è il comando opensnoop. Esegui senza argomenti, potrebbe sopraffarti con l'output, ma può essere eseguito con argomenti -n nameper limitare l'output ai processi denominati name.


1
Allo stesso sudo opensnoop | grep .classpathmodo ti dà accesso ad un file classpath per esempio.
Dávid Natingga,

1
Nota opensnoop e Instruments sono entrambi front-end per lo stesso motore DTrace. Altri front-end: dtrace.org/blogs/brendan/2011/10/10/…
MarcH,

13

Launchd è il principale strumento a livello di sistema per il monitoraggio dei file (e una cartella è un file speciale) poiché è sempre in esecuzione. Hazel è un programma che aiuta a mettere una bella GUI attorno a WatchPath lanciati. Cerca qui molti suggerimenti su launchd, nonché centinaia di tutorial, un buon articolo di Wikipedia e i documenti di sviluppo di Apple.

fseventsd registrerà alcune modifiche, quindi potresti usare FSeventer o accedere a quei file se launchd non è la tua tazza di tè.

fs_usage e lsof sono strumenti a riga di comando sensibili al processo per attingere al sottosistema IO mentre è in esecuzione. Il buffer fs_usage può essere sovraccaricato, quindi se vuoi qualcosa di più garantito e meno di "dare una sbirciatina" è meno affidabile per i risultati corretti totali come gli altri comandi.


Ho usato FSEventer parecchie volte per scoprire a cosa accede un'applicazione. Questo è ottimo quando si cercano file di licenza per imaging di sistema per la distribuzione in laboratorio.
Digitalchild,

fseventer è eccellente per avere il quadro generale in tempo reale, vedi davvero cosa sta succedendo !.
ling

1
Poiché FSeventer è morto, si potrebbe anche provare FSMonitor.
PIL2

10

Nessuno ha menzionato Activity Monitor, trovato nella /Applications/Utilitiescartella.

Fare clic sul nome del processo nell'elenco, quindi premere il pulsante "Ispeziona" sulla barra degli strumenti.

Ci sono tre schede nella finestra risultante: Memory, Statistics, Open Files and Ports. La Open Files and Portsscheda mostrerà tutti i file aperti utilizzati dal processo.


1
Questo non funziona se si accede al file da un'applicazione sconosciuta
liquidblueocean,

3

lsof

comando su Terminal.app può farlo per te? usa il man lsofper raggiungere il suo uso. Saluti


3

Il modo più veloce è:

$ lsof [path_to_file]

Questa soluzione non richiede la password di root e ti restituisce il seguente, chiaro, risultato:

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

1

Sono disponibili anche iosnoope in iotopbase alle vostre esigenze specifiche. Questi comandi del terminale possono essere inviati tramite pipe grepper controllare gli eventi del filesystem da un processo specifico o da un file specifico.


0

C'è un'interfaccia grafica per lsofdigitare informazioni. È donationware di HAMSoft e si chiama What's Keeping Me . Progettato per rispondere a "Perché non posso eliminare questo dal mio cestino?" domanda che si presenta ogni tanto su OS X, è anche un modo pratico per controllare gli handle I / O aperti sui processi in esecuzione se sei solo curioso di sapere cosa sta succedendo. Ti consente alcune semplici ricerche e filtri.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.