使用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux 使用 inotify 監控檔案或目錄變化Linux
- Linux使用inotify-tools監聽檔案或目錄Linux
- Linux用inotify監聽檔案和目錄Linux
- Linux 系統監控指南Linux
- linux系統 物理硬碟監控Linux硬碟
- 使用Prometheus監控Linux系統各項指標PrometheusLinux指標
- linux 監控檔案內容變化Linux
- 使用 Fstransform 轉換檔案系統ORM
- 轉轉支付通道監控系統的搭建
- 在Linux中,如何監控系統資源使用情況?Linux
- Linux檔案系統Linux
- [Linux]檔案系統Linux
- Linux系統效能監控採集項Linux
- Linux系統篇-檔案系統&虛擬檔案系統Linux
- 如何在Linux上使用Osquery設定檔案完整性監控(FIM)Linux
- Linux系統檔案系統及檔案基礎篇Linux
- 在Linux中,如何監控系統的效能?Linux
- 基於 Zabbix 系統監控 Windows、Linux、VMwareWindowsLinux
- Linux中監控系統效能常用的命令!Linux
- linux監控資料夾內的檔案數量Linux
- 論Linux檔案系統Linux
- Linux AUFS 檔案系統Linux
- linux的檔案系統Linux
- 監控索引的使用(轉)索引
- 使用cAdvisor+Influxdb+Grafana監控系統UXGrafana
- 分散式檔案系統(HDFS)與 linux系統檔案系統 對比分散式Linux
- 超實用!!rsync分散式 + inotify監控實時同步分散式
- 『學了就忘』Linux檔案系統管理 — 57、Linux檔案系統介紹Linux
- shell實戰之Linux主機系統監控Linux
- 在Linux中,如何進行系統效能監控?Linux
- Linux系統安裝zabbix 4.4監控軟體Linux
- 檔案系統(十一):Linux Squashfs只讀檔案系統介紹Linux
- linux之路(五)檔案系統Linux
- Linux檔案系統、目錄Linux
- Linux 檔案系統詳解Linux
- linux 檔案系統擴容Linux
- Linux檔案系統詳解Linux
- 使用Python建立一個系統監控程式Python
- 實時監控系統,統一監控企業APIAPI