題:
如何監視OS X應用程序的文件訪問?
sorin
2011-05-18 18:57:33 UTC
view on stackexchange narkive permalink

我正在尋找FileMon的OS X通訊對象,該文件後來包含在 Process on中。

BTW,必須能夠按進程進行過濾。

我將添加三個選項-由於Mac OS X的unix傳統與NT體系結構不同-這些工具不能完全重疊。您是在尋找要編程的API還是只是用來窺視當前正在發生的事情的工具(或在某些文件更改後觸發操作)
八 答案:
Aeyoun
2011-05-19 04:06:22 UTC
view on stackexchange narkive permalink

儀器(Apple Xcode開發套件的一部分)可以監視所有文件訪問和寫入。從/Applications/Xcode.app/Contents/Applications/Instruments.app打開它,選擇您的應用程序或進程,然後按Start。菜單中提供了廣泛的過濾器選項。

較早版本的Xcode將應用存儲在/Developer/Applications/Instruments.app

從Xcode 5開始,它現在位於/Applications/Xcode.app/Contents/Applications/Instruments.app中-也可以從XCode應用程序-Xcode-> Open Developer Tool-> Instruments中進行訪問。
如果由於您的應用程序未發生正在訪問的文件,則此方法不起作用
實際上,它不適用於OS X:“ I / O活動不支持macOS平台”。 另請閱讀:https://stackoverflow.com/questions/35621938/xcode-instruments-this-instrument-does-not-support-osx
您能否提供更多詳細信息?哪個工具-活動監視器?我在這裡看到所有進程的輸出很長,不確定如何針對一個進程將其過濾到磁盤I / O中
Harald Hanche-Olsen
2011-05-19 00:15:44 UTC
view on stackexchange narkive permalink

有命令 opensnoop 。在不使用參數的情況下運行,它可能會使您不知所措,但可以使用參數 -n name 運行,以將輸出限制為名為 name 的進程。

類似的`sudo opensnoop | grep .classpath`可讓您訪問例如類路徑文件。
注意opensnoop和Instruments都是同一個DTrace引擎的前端。其他前端:http://dtrace.org/blogs/brendan/2011/10/10/top-10-dtrace-scripts-for-mac-os-x/
如果要擺脫dtrace錯誤,請參閱https://apple.stackexchange.com/questions/343423/opensnoop-dtrace-error-on-enabled-probe-id-5-id-163-syscallopenreturn-i
bmike
2011-05-18 19:07:53 UTC
view on stackexchange narkive permalink

Launchd是用於監視文件(並且文件夾是特殊文件)的主要係統級工具,因為它始終處於運行狀態。 Hazel是一個程序,可幫助在已啟動的WatchPath周圍放置漂亮的GUI。在這裡查看有關發布的許多技巧以及數百本教程,一篇出色的維基百科文章和Apple開發文檔。

fseventsd將記錄一些更改-因此您可以使用 FSeventer或訪問那些文件(如果啟動不是您的需要的話)。

fs_usage lsof是可識別命令行的工具,可利用IO子系統正在運行。 fs_usage緩衝區可能會超載,因此,如果您希望得到更多保證,而又不希望“快速了解”,那麼與其他命令一樣,它對於獲得完全正確的結果的依賴性就較小。

我已經使用FSEventer多次,以了解應用程序正在訪問什麼。在尋找許可證文件進行實驗室部署的系統映像時,這非常有用。
fseventer非常適合實時顯示大圖,您真的可以看到正在發生的事情!
由於FSeventer已死,因此也可以嘗試[FSMonitor。](https://fsmonitor.com/)
ghoppe
2011-05-19 00:55:01 UTC
view on stackexchange narkive permalink

沒有人提到在 / Applications / Utilities 文件夾中找到的活動監視器。

單擊列表中的“進程名稱”,然後單擊“檢查”按鈕。

出現的窗口中有三個選項卡:內存統計信息打開文件和端口打開文件和端口標籤將顯示該進程正在使用的所有打開文件。

如果文件被未知應用程序訪問,則此方法不起作用
kOoLiNuS
2011-05-18 19:09:59 UTC
view on stackexchange narkive permalink
Terminal.app上的

lsof

命令可以為您做到這一點?使用 man lsof 進行捕獲發揮作用。歡呼

bontoJR
2013-11-01 13:41:50 UTC
view on stackexchange narkive permalink

更快的方法是:

  $ lsof [path_to_file]  

此解決方案不需要root密碼,並且可以返回以下內容,清除,結果:

 命令PID用戶FD類型設備大小/關閉節點名稱查找器497 JR7 21r REG 1,2 246223 33241712 image.jpgQuickLook 1007 JR7 txt REG 1,2 246223 33241712 image.jpg  
beporter
2015-07-05 20:59:43 UTC
view on stackexchange narkive permalink

iosnoop iotop 也可用,具體取決於您的特定需求。這些終端命令可以通過 grep 進行管道傳輸,以監視來自特定進程或針對特定文件的文件系統事件。

Ian C.
2011-05-18 23:33:28 UTC
view on stackexchange narkive permalink

有一個用於顯示 lsof 類型信息的圖形界面。它是HAMSoft的捐贈軟件,被稱為 Whats Keeping Me。旨在回答“為什麼不能將其從垃圾箱中刪除?”這個問題經常出現在OS X上,如果您只是好奇正在發生的事情,那麼它也是一種方便的方法來監視正在運行的進程上的開放I / O句柄。它使您可以進行一些簡單的搜索和過濾。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...