使用Inotify 監控Linux 檔案系統事件(轉)
使用Inotify 監控Linux 檔案系統事件(轉)[@more@] Inotify 是檔案系統事件監控機制,計劃包含在即將釋出的 Linux 核心中作為 dnotify 的有效替代。dnotify 是較早核心支援的檔案監控機制。Inotify 是一種強大的、細粒度的、非同步的機制,它滿足各種各樣的檔案監控需要,不僅限於安全和效能。下面讓我們一起學習如何安裝 inotify 和如何構建一個示例使用者空間應用程式來響應檔案系統事件。
檔案系統事件監控對於從檔案管理器到安全工具的各種程式都是必要的,但是 dnotify(早期核心中的標準)存在一些侷限性,這使我們期待出現一種更加完善的機制。抱著這種期待,我們發現了 inotify,一種更加現代化的檔案系統事件監控替代品。
為什麼使用 inotify?
使用 inotify 取代 dnotify 的原因有很多。第一個原因是,dnotify 需要您為每個打算監控是否發生改變的目錄開啟一個檔案描述符。當同時監控多個目錄時,這會消耗大量的資源,因為有可能達到每個程式的檔案描述符限制。
除此之外,檔案描述符會鎖定目錄,不允許解除安裝(unmount)支援的裝置,這在存在可移動介質的環境中會引發問題。在使用 inotify 時,如果正在監控被解除安裝的檔案系統上的檔案,那麼監控會被自動移除並且您會接收到一個解除安裝事件。
dnotify 不如 inotify 的第二個原因是 dnotify 有點複雜。注意,使用 dnotify 基礎設施的簡單檔案系統監控粒度只停留於目錄級別。為了使用 dnotify 進行更細粒度的監控,應用程式程式設計人員必須為每個受監控的目錄保留一個 stat 結構的快取。該使用者空間的 stat 結構快取需要用來明確確定當接收到通知訊號時目錄發生了什麼變化。當獲得通知訊號時,生成 stat 結構列表並與最新的狀態相比較。顯而易見,這種技術是不理想的。
inotify 的另一個優點是它使用檔案描述符作為基本介面,使應用程式開發者使用 select 和 poll 來監控裝置。這允許有效的多路 I/O 和與 Glib 的 mainloop 的整合。相反,dnotify 所使用的訊號常常使程式設計師頭疼並且感覺不太優雅。
inotify 透過提供一個更優雅的 API 解決了這些問題,該 API 使用最少的檔案描述符,並確保更細粒度的監控。與 inotify 的通訊是透過裝置節點提供的。基於以上原因,對於監控 Linux 2.6 平臺上的檔案,inotify 是您最明智的選擇。
安裝 inotify
安裝 inotify 的第一步是確定您使用的 Linux 核心是否支援它。檢查發行版的最簡單方法是,尋找是否存在 /dev/inotify 裝置。如果存在該裝置,您可以跳到 在簡單應用程式中使用 inotify 一節。
在撰寫本文時,inotify 包含在 Andrew Morton 的 Linux 2.6-mm 目錄樹中,而且一些 Linux 發行版正在提供支援 inotify 的核心(包括 Gentoo 和 Ubuntu)或者具有提供支援的補充核心包(例如 Fedora 和 SuSE)。因為 Andrew 可能會根據需要從目錄樹刪除對 inotify 的支援,並且 inotify 版本還處於頻繁的開發階段,所以強烈建議您從頭開始打補丁。
如果缺少該裝置,您可能需要對核心打補丁並建立該裝置。
檔案系統事件監控對於從檔案管理器到安全工具的各種程式都是必要的,但是 dnotify(早期核心中的標準)存在一些侷限性,這使我們期待出現一種更加完善的機制。抱著這種期待,我們發現了 inotify,一種更加現代化的檔案系統事件監控替代品。
為什麼使用 inotify?
使用 inotify 取代 dnotify 的原因有很多。第一個原因是,dnotify 需要您為每個打算監控是否發生改變的目錄開啟一個檔案描述符。當同時監控多個目錄時,這會消耗大量的資源,因為有可能達到每個程式的檔案描述符限制。
除此之外,檔案描述符會鎖定目錄,不允許解除安裝(unmount)支援的裝置,這在存在可移動介質的環境中會引發問題。在使用 inotify 時,如果正在監控被解除安裝的檔案系統上的檔案,那麼監控會被自動移除並且您會接收到一個解除安裝事件。
dnotify 不如 inotify 的第二個原因是 dnotify 有點複雜。注意,使用 dnotify 基礎設施的簡單檔案系統監控粒度只停留於目錄級別。為了使用 dnotify 進行更細粒度的監控,應用程式程式設計人員必須為每個受監控的目錄保留一個 stat 結構的快取。該使用者空間的 stat 結構快取需要用來明確確定當接收到通知訊號時目錄發生了什麼變化。當獲得通知訊號時,生成 stat 結構列表並與最新的狀態相比較。顯而易見,這種技術是不理想的。
inotify 的另一個優點是它使用檔案描述符作為基本介面,使應用程式開發者使用 select 和 poll 來監控裝置。這允許有效的多路 I/O 和與 Glib 的 mainloop 的整合。相反,dnotify 所使用的訊號常常使程式設計師頭疼並且感覺不太優雅。
inotify 透過提供一個更優雅的 API 解決了這些問題,該 API 使用最少的檔案描述符,並確保更細粒度的監控。與 inotify 的通訊是透過裝置節點提供的。基於以上原因,對於監控 Linux 2.6 平臺上的檔案,inotify 是您最明智的選擇。
安裝 inotify
安裝 inotify 的第一步是確定您使用的 Linux 核心是否支援它。檢查發行版的最簡單方法是,尋找是否存在 /dev/inotify 裝置。如果存在該裝置,您可以跳到 在簡單應用程式中使用 inotify 一節。
在撰寫本文時,inotify 包含在 Andrew Morton 的 Linux 2.6-mm 目錄樹中,而且一些 Linux 發行版正在提供支援 inotify 的核心(包括 Gentoo 和 Ubuntu)或者具有提供支援的補充核心包(例如 Fedora 和 SuSE)。因為 Andrew 可能會根據需要從目錄樹刪除對 inotify 的支援,並且 inotify 版本還處於頻繁的開發階段,所以強烈建議您從頭開始打補丁。
如果缺少該裝置,您可能需要對核心打補丁並建立該裝置。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-960030/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用 inotify 監控 Linux 檔案系統事件Linux事件
- Linux使用inotify-tools監聽檔案或目錄Linux
- fanotify 監控檔案系統
- Linux 系統中使用 logwatch 監控日誌檔案Linux
- Linux用inotify監聽檔案和目錄Linux
- (轉)使用 Nmon 監控 Linux 的系統效能Linux
- inotify -- Linux 2.6 核心中的檔案系統變化通知機制Linux
- pythonwatchdog監控檔案系統變動Python
- Unix檔案系統頁面監控實現
- Linux檔案系統 (轉)Linux
- linux 系統監控工具Linux
- 告警系統主指令碼、告警系統配置檔案、告警系統監控專案指令碼
- Linux下使用NMON監控、分析系統效能Linux
- [rsync+inotify]——監控客戶端檔案變化,rsync同步到伺服器客戶端伺服器
- linux系統 物理硬碟監控Linux硬碟
- 監控linux系統資源Linux
- Linux系統監控神器--CollectlLinux
- Nrpe 監控Linux系統Linux
- 監控linux系統的shellLinux
- Linux系統監控命令薦Linux
- linux環境下使用XFS檔案系統(轉)Linux
- 使用Prometheus監控Linux系統各項指標PrometheusLinux指標
- 20個Linux系統管理員必知系統監控工具(轉)Linux
- 【拖雷】Taobao監控系統之改進——檔案傳輸
- Linux 檔案系統-ext3 檔案系統介紹(轉)Linux
- 細說GNU/Linux系統的檔案及檔案系統(轉)Linux
- 使用 Shell 指令碼監控 Linux 系統程式資源指令碼Linux
- 轉轉支付通道監控系統的搭建
- linux檔案系統基礎(轉)Linux
- Linux掛載檔案系統(轉)Linux
- Linux 常用系統效能監控命令Linux
- nmon 監控AIX,linux系統工具AILinux
- Linux系統監控命令之iotopLinux
- Solaris linux 系統監控指令碼Linux指令碼
- 使用 Fstransform 轉換檔案系統ORM
- 使用Sar實現系統監控
- 使用 /proc 檔案系統來控制系統(轉)
- Unix檔案系統頁面監控實現-效果頁面