百寶箱中詳解Linux監控技術
linux經過長時間的發展,很多用戶都很了解監控方面的知識,今天給大家講解linux監控技術的文件系統監控,看完本文你肯定有不少收獲,希望本文能教會你更多東西。
Inotify 是文件系統事件監控機制,計劃包含在即將發布的 Linux 內核中作為 dnotify 的有效替代。dnotify 是較早內核支持的文件監控機制。Inotify 是一種強大的、細粒度的、異步的機制,它滿足各種各樣的文件監控需要,不僅限于安全和性能。下面讓我們一起學習如何安裝 inotify 和如何構建一個示例用戶空間應用程序來響應文件系統事件。
文件系統事件監控對于從文件管理器到安全工具的各種程序都是必要的,但是 dnotify(早期內核中的標準)存在一些局限性,這使我們期待出現一種更加完善的機制。抱著這種期待,我們發現了 inotify,一種更加現代化的文件系統事件監控替代品。
為什么使用 inotify?
使用 inotify 取代 dnotify 的原因有很多。第一個原因是,dnotify 需要您為每個打算監控是否發生改變的目錄打開一個文件描述符。當同時監控多個目錄時,這會消耗大量的資源,因為有可能達到每個進程的文件描述符限制。
除此之外,文件描述符會鎖定目錄,不允許卸載(unmount)支持的設備,這在存在可移動介質的環境中會引發問題。在使用 inotify 時,如果正在監控被卸載的文件系統上的文件,那么監控會被自動移除并且您會接收到一個卸載事件。
dnotify 不如 inotify 的第二個原因是 dnotify 有點復雜。注意,使用 dnotify 基礎設施的簡單文件系統監控粒度只停留于目錄級別。為了使用 dnotify 進行更細粒度的監控,應用程序編程人員必須為每個受linux監控技術的目錄保留一個 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 版本還處于頻繁的開發階段,所以強烈建議您從頭開始打補丁。如果缺少該設備,您可能需要對內核打補丁并創建該設備。
以上給大家講解linux監控技術的文件系統監控。