Unix系統與Windows系統最大的區別就在於Unix系統是在一個個配置文件的基礎上建立起來的。故從這一點上來說,Unix系統工程師其工作的對象就是一個個Unix文件。如網絡IP地址配置、環境變量管理等等都可以通過相關的配置文件來實現。為此如何快速方便的來管理這些配置文件就是考驗一個Unix系統工程師能力的問題。其實在Unix系統中提供了很多文件管理工具。若系統工程師能夠靈活應用這些工具,那麼就可以起到出奇制勝的效果。這不是筆者說大話,現在就以文件比較命令為例,談談如何利用這些工具來提高系統管理效率。
在日常工作中,與Unix操作系統進行交互將占用系統工程師大部分的時間。系統工程師需要經常切換目錄、顯示文件、編輯和編譯程序,並不斷的重復這些動作。如果不合適的環境變量,會使得系統工程師苦不堪言。因為為了切換到合適的目錄就需要花費他們很多的時間。為此像筆者這樣的有經驗的系統工程師,安裝完Unix操作系統之後,往往會根據自己的操作愛好來配置相關的環境變量,以提高後續系統維護的效率。這個環境變量不僅僅跟系統管理員的操作習慣有關,而且還跟應用程序的正常運行相關。環境變量是包含關於系統及當前登錄用戶的環境信息的字符串,一些軟件程序使用此信息確定在何處放置文件。如path環境變量就是告訴操作系統,當要求系統運行一個程序而沒有告訴它程序所在的完整路徑時,系統除了在當前目錄下面尋找此程序外,還應到那些目錄下去找。如安裝完JDK軟件包之後,系統管理員還必須為其設置環境變量。否則的話,這個程序將無法正常運行。可見環境變量對系統工程師與應用程序的重要性。
但是如果一不小心對環境變量做了不合適的調整,則就會出現問題。如不小心更改了JDK軟件包的環境變量,那就會造成JAVA程序無法正常運行,系統會提示找不到路徑。為此系統要能夠提供一種手段,能夠比較前後環境變量的異同。只有如此才能夠迅速的在數以百計的環境變量記錄中找到修改過的地方,並進行調整。為了達到這個目的,就可以使用文件比較命令。如下圖:
筆者會在安裝完Unix操作系統之後,就利用env命令顯示當前操作系統的環境變量情況。然後利用重定向符號把顯示的結果保存在一個文件中( j假如是env1),以備以後比較使用。若一個月後筆者發現環境變量出現了點問題(如可能在這個時間段內應用程序修改過環境變量或者自己手工改過但是忘記了),筆者就會再次利用env命令把系統最新的環境變量重定向到一個文件中,假如是env2。然後筆者就可以利用cmp 命令來比較這兩個文件,找出其不同的地方。要實現這個目的,Unix系統中提供了比較多的文件比較命令。具體來說,有cmp、diff、comm三個命令可以完成這個任務。這三個命令各有各的特點,系統工程師要學會根據自身的需求選擇合適的命令,以減少自己的工作量。
一、判斷文件是否修改過。
在Unix系統日常維護中,系統工程師經常需要判斷兩個文件是否相同。如上面這個案例中,就需要判斷前後兩個環境變量文件是否相同。如果相同的話,則表明環境變量沒有更改過。如果有的話,則表明後來環境變量被人修改了。此時就可以采用cmp命令來進行比較。這個命令會逐個字符的比較系統工程師指定的兩個文件。當發現第一個不相同的字符時,就會輸出其發現的位置。默認情況下,cmp命令發現第一個不相同的字符後就會停止工作。除非系統工程師在使用這個命令的時候加入了-l參數,系統才會列出詳細的列表,說明各個不相同的位置。不過對於系統工程師來說,往往只需要知道文件是被修改過即可。如果想知道到底哪裡被修改了,則需要使用其它的命令來完成。
在使用這個命令的時候,筆者認為系統工程師需要注意二個問題。如上圖中,如果文件env1與文件env2完全相同的話,則系統不會反映任何信息,直接返回到提示符。這就是Unix操作系統的“無響應方式”。這看起來好像是沒有返回結果信息,其實不是這樣。如果兩個文件相同的話,則系統會返回一個true的值。當在shell程序開發時這個值非常的重要。因為這個值可以在腳本程序裡作為條件語句用於控制程序的流程。另外就是這個命令只顯示字符不同的位置,但是並不會顯示到底有哪裡不同。通常情況下,筆者都是先利用這個命令來判斷先後兩個文件是否不同。如果發現不同的話,再通過後面兩個命令來查找到底有哪裡不同。