2012-07-21 96 views
5

我知道有一個fuser命令列出了進程的pid,但是如何持續監視哪個進程訪問了該文件? (認爲​​類似於tail -f文件名的行爲)如何監視訪問特定文件的進程?

說有一個寫入文件並在某個時間間隔釋放句柄的進程,所以很難使用fuser來捕獲該進程。

+0

請檢查http://linux.die.net/man/7/inotify – Jayan 2012-07-21 06:23:00

+0

如何(非)侵入性(非)交互式你需要/能負擔得起這個嗎?如果你提到的時間間隔足夠長,@ cravoori的投票可能會奏效;用命名管道替換文件並使其緩衝區飽和將阻止所有作者,因此您可以在閒暇時識別它們,但可能不是您要尋找的解決方案;最後,你可以定義你自己的Linux [內核跟蹤點](http://netsplit.com/2011/03/07/tracing-on-linux/)來跟蹤哪個進程打開了一個特定的文件供寫入。 – vladr 2012-07-21 06:24:03

回答

1

你可以看着定期執行命令。爲了突出連續運行的差異,手錶還支持差異標記

watch -n 5 'fuser file_name' 
+0

對我來說真的沒什麼作用了...對文件的寫入非常簡短,並且使用手錶沒有捕獲它(嘗試注意-n 1) – the1plummie 2012-07-25 19:00:56

0

假設您在Linux上,您可以使用inotifywatch。

該命令將打印所有訪問並修改文件60秒,然後打印出統計數據。

inotifywatch -v -e access -e modify -t 60 filename 

你可以得到inotifywatch的源作爲https://github.com/rvoicilas/inotify-tools/wiki

+2

這將顯示訪問/修改的數量,但有沒有辦法找出*哪個進程*訪問/修改了文件? – aioobe 2015-08-28 14:24:55