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