如果存在一個Unix管理公理,那就是:兩次過後,沒有系統管理任務是有趣的。如果您發現正在重復做單調而枯燥的事,那麼自動化它。當然,有時很難自動化,但應該至少考慮這個問題,並且權衡其優勢及自動化所花費的時間。
由於經常學習Unix操作系統的一些知識,而且很喜歡Unix操作系統,我們今天就來和大家一起討論下Unix cfengine的知識。如果您對自動化系統管理是認真的,那麼應該了解 cfengine 工具。僅當您寧願把時間都花在 vi 編輯器時,可以不去了解 Unix cfengine。
Unix管理配置文件是艱苦的。可以通過考慮 cfengine 是否勝任該任務開始。遺憾的是,cfengine 的編輯是面向行的,所以它可能不太適合復雜的配置文件。但對於如 TCP 包裝器配置文件 /etc/hosts.allow 那樣的簡單文件 cfengine 是最適合的。
通常,Unix管理希望保留配置文件的多個版本。譬如,可能需要在 /etc/resolv.conf 中有兩組 DNS 配置設置,一組是用於外部機器,另一組是用於內部機器。很自然,外部 DNS resolv.conf 可以進入稱為 "external" 的目錄,而內部 resolv.conf 可以進入相應的 "internal" 目錄。讓我們假定這兩個目錄都在一個全局 "spec" 目錄下,該目錄是配置文件的一種根目錄。
下列代碼會遍歷 spec 目錄,搜索適合於給定機器的文件名。它將從 /usr/local/spec 開始,然後往下,尋找與請求相匹配的文件。
而且,Unix管理它將檢查每個目錄的名稱是否與屬於某些機器的類相同。因此,如果我們請求 locate_global('resolv.conf', 'wonka'),該函數將在 /usr/local/spec 目錄下查找 resolv.conf 文件,該文件要麼在根目錄下,要麼在該根目錄的子目錄下,它的名稱應與 "wonka" 機器所屬的類相匹配。
所以,如果 "wonka" 屬於 "chocolate" 類,並且如果有 /usr/local/spec/chocolate/resolv.conf 文件,那麼 locate_global() 將返回"/usr/local/spec/chocolate/resolv.conf"。
如果 locate_global() 找到與文件相匹配的多個版本(譬如,/usr/local/spec/chocolate/resolv.conf 和 /usr/local/spec/resolv.conf),則它會放棄。這裡假設沒有配置比有兩個錯誤之一要好。還有,請注意,機器可以屬於不止一個類。
Unix管理的講解,我們先到這裡。