unix中用文件比較命令提高系統管理效率
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程序開發時這個值非常的重要。因為這個值可以在腳本程序里作為條件語句用于控制程序的流程。另外就是這個命令只顯示字符不 同的位置,但是并不會顯示到底有哪里不同。通常情況下,筆者都是先利用這個命令來判斷先后兩個文件是否不同。如果發現不同的話,再通過后面兩個命令來查找 到底有哪里不同。
二、找出具體的差異。
通常情況下,判斷文件(環境變量)是否存在不同只是系統工程師的第一步。如果發現有不同的話,則還需要查詢到底有哪里不同。為了達到這個目的,就需要采用comm命令或者diff命令。
如現在有兩個文件,分別記錄著不同時期的環境變量情況。現在系統工程師想找出一個表中沒有的記錄而在另一個文件中存在的記錄名字;或者想找出前 后兩個時期環境變量沒有更改過的記錄。為了實現這個目的,則comm命令就能夠解決這個問題。只需要輸入comm env1 env2命令,則系統就會輸出結果。在輸出列表中,會把兩個文件的不同之處和相同之處說得非常清楚。其中第1列的內容表示前面一個文件獨有的;第2列中的 內容表示后面一個文件獨有的;第三列中的內容則表示兩個文件共有的。為此系統工程師可以根據自己的需要查看不同列的內容。如想了解前后兩次環境變量沒有更 改過的內容(即前后兩個文件都相同的記錄),則可以看第三列的內容。如想查看后來環境變量更改過的信息,則可以查看第一、二列中的內容。
另外還可以通過diff文件來找到連個文件的差異點。不過與前面兩個命令不同,這個第diff命令顯示的結果更加具體。這個命令除了會顯示兩個 文件不同的地方之外,還會給系統管理員一些提示,表明修改一個文件中的哪些內容可以使得兩個文件內容相同。如果比較的兩個文件內容相同,則會顯示詳細信 息。
在輸出的結果中,diff會用一些特殊符號或者指令來表示執行哪些更改能夠使得兩個文件相同。這有利于系統工程師找出前后兩個文件的具體差異點。當系統工 程師可以確定后面一個記錄有問題,就可以直接根據提示來進行更改。故當系統工程師確定要更改(如想實現前后環境變量一致),則可以直接使用這個命令。
另外Unix操作系統中有一個sed使用工具,也需要用到這個diff命令的結果。sed 實用工具是就好像一個編輯器,但它與其它大多數編輯器不同。它有連個很重要的特性,即不面向屏幕之外和非交互式的特性。這也就意味著系統工程師必須將要對 數據執行的命令插入到命令行或要處理的腳本文件中。sed 在一個文件或文件集中非交互式、并且不加詢問地接收一系列的命令并執行它們。所以它流經文本就如同水流經溪流一樣。如通過這個命令可以實現Word等編輯 器中的替換功能。如它可以用來將所有出現的“A”修改為“B”。當然其作用遠遠不止替換這么簡單。這個se 流編輯器非常適合于執行重復的編輯,這種重復編輯如果由人工完成將花費大量的時間。其參數可能和一次性使用一個簡單的操作所需的參數一樣有限,或者和一個 具有成千上萬行要進行編輯修改的腳本文件一樣復雜。系統工程師在使用Sed編輯器時也需要用到diff顯示結果中的符號信息。故雖然diff顯示的結果有 點復雜,但是系統工程師還是需要花一番時間去吃透它。
關鍵字:unix、效率、系統
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解