百寶箱中詳解Linux監(jiān)控技術(shù)
linux經(jīng)過長時間的發(fā)展,很多用戶都很了解監(jiān)控方面的知識,今天給大家講解linux監(jiān)控技術(shù)的文件系統(tǒng)監(jiān)控,看完本文你肯定有不少收獲,希望本文能教會你更多東西。
Inotify 是文件系統(tǒng)事件監(jiān)控機(jī)制,計(jì)劃包含在即將發(fā)布的 Linux 內(nèi)核中作為 dnotify 的有效替代。dnotify 是較早內(nèi)核支持的文件監(jiān)控機(jī)制。Inotify 是一種強(qiáng)大的、細(xì)粒度的、異步的機(jī)制,它滿足各種各樣的文件監(jiān)控需要,不僅限于安全和性能。下面讓我們一起學(xué)習(xí)如何安裝 inotify 和如何構(gòu)建一個示例用戶空間應(yīng)用程序來響應(yīng)文件系統(tǒng)事件。
文件系統(tǒng)事件監(jiān)控對于從文件管理器到安全工具的各種程序都是必要的,但是 dnotify(早期內(nèi)核中的標(biāo)準(zhǔn))存在一些局限性,這使我們期待出現(xiàn)一種更加完善的機(jī)制。抱著這種期待,我們發(fā)現(xiàn)了 inotify,一種更加現(xiàn)代化的文件系統(tǒng)事件監(jiān)控替代品。
為什么使用 inotify?
使用 inotify 取代 dnotify 的原因有很多。第一個原因是,dnotify 需要您為每個打算監(jiān)控是否發(fā)生改變的目錄打開一個文件描述符。當(dāng)同時監(jiān)控多個目錄時,這會消耗大量的資源,因?yàn)橛锌赡苓_(dá)到每個進(jìn)程的文件描述符限制。
除此之外,文件描述符會鎖定目錄,不允許卸載(unmount)支持的設(shè)備,這在存在可移動介質(zhì)的環(huán)境中會引發(fā)問題。在使用 inotify 時,如果正在監(jiān)控被卸載的文件系統(tǒng)上的文件,那么監(jiān)控會被自動移除并且您會接收到一個卸載事件。
dnotify 不如 inotify 的第二個原因是 dnotify 有點(diǎn)復(fù)雜。注意,使用 dnotify 基礎(chǔ)設(shè)施的簡單文件系統(tǒng)監(jiān)控粒度只停留于目錄級別。為了使用 dnotify 進(jìn)行更細(xì)粒度的監(jiān)控,應(yīng)用程序編程人員必須為每個受linux監(jiān)控技術(shù)的目錄保留一個 stat 結(jié)構(gòu)的緩存。該用戶空間的 stat 結(jié)構(gòu)緩存需要用來明確確定當(dāng)接收到通知信號時目錄發(fā)生了什么變化。當(dāng)獲得通知信號時,生成 stat 結(jié)構(gòu)列表并與最新的狀態(tài)相比較。顯而易見,這種技術(shù)是不理想的。
inotify 的另一個優(yōu)點(diǎn)是它使用文件描述符作為基本接口,使應(yīng)用程序開發(fā)者使用 select 和 poll 來監(jiān)控設(shè)備。這允許有效的多路 I/O 和與 Glib 的 mainloop 的集成。相反,dnotify 所使用的信號常常使程序員頭疼并且感覺不太優(yōu)雅。
inotify 通過提供一個更優(yōu)雅的 API 解決了這些問題,該 API 使用最少的文件描述符,并確保更細(xì)粒度的監(jiān)控。與 inotify 的通信是通過設(shè)備節(jié)點(diǎn)提供的?;谝陨显?,對于監(jiān)控 Linux 2.6 平臺上的文件,inotify 是您最明智的選擇。
安裝 inotify
安裝 inotify 的第一步是確定您使用的 Linux 內(nèi)核是否支持它。檢查發(fā)行版的最簡單方法是,尋找是否存在 /dev/inotify 設(shè)備。如果存在該設(shè)備,您可以跳到 在簡單應(yīng)用程序中使用 inotify 一節(jié)。
在撰寫本文時,inotify 包含在 Andrew Morton 的 Linux 2.6-mm 目錄樹中,而且一些 Linux 發(fā)行版正在提供支持 inotify 的內(nèi)核(包括 Gentoo 和 Ubuntu)或者具有提供支持的補(bǔ)充內(nèi)核包(例如 Fedora 和 SuSE)。因?yàn)?Andrew 可能會根據(jù)需要從目錄樹刪除對 inotify 的支持,并且 inotify 版本還處于頻繁的開發(fā)階段,所以強(qiáng)烈建議您從頭開始打補(bǔ)丁。如果缺少該設(shè)備,您可能需要對內(nèi)核打補(bǔ)丁并創(chuàng)建該設(shè)備。
以上給大家講解linux監(jiān)控技術(shù)的文件系統(tǒng)監(jiān)控。