Windows轉(zhuǎn)向UNIX的一些困惑
相信很多朋友Windows已經(jīng)用得相當(dāng)熟悉了,由于種種原因,想試試Unix。無奈Windows的思想根深蒂固,這給學(xué)習(xí)UNIX造成很多困惑,經(jīng)常四處碰壁。于是抱怨UNIX太難學(xué),拋在一邊眼不見為凈,繼續(xù)用著Windows。當(dāng)然如果你只是普通用戶,聽聽歌玩玩游戲灌灌水,那大可不必裝什么UNIX,因?yàn)槟愀緵]必要去跟UNIX瞎折騰。Windows那么方便,用著多舒服,何必自找麻煩,去弄那難配置又“莫名其妙的UNIX?說到這里,很多人可以不用看這篇文章了。這篇文章是為想學(xué)UNIX的跟我一樣菜的新手寫的,目的是為了在學(xué)習(xí)過程中少走一些彎路。就從我個(gè)人的經(jīng)歷來說吧!
最初聽說UNIX,大概是在大一的時(shí)候。當(dāng)時(shí)對(duì)這個(gè)系統(tǒng)超級(jí)崇拜,認(rèn)為能駕馭這個(gè)系統(tǒng)的一定是絕頂大牛。某天偶然聽說一個(gè)叫做Linux的系統(tǒng),據(jù)說跟UNIX很像,而且還有一個(gè)叫做RedHat的東西。因?yàn)槲矣锌啼洐C(jī),于是在校網(wǎng)的某處下了三個(gè)ISO,刻成了盤,但一直不敢試,因?yàn)楦静恢涝趺窗阉?ldquo;放到硬盤上去。也就是說,它有沒有分區(qū)?有分區(qū)的話怎么弄?因?yàn)橐恢睋?dān)心把Windows損壞,所以這幾張盤就被我擱到了一邊,這一擱就是一年。
大二了,Windows已經(jīng)玩得相當(dāng)熟了,這時(shí)對(duì)分區(qū)之類的也算挺了解了吧,于是又從抽屜的角落里找到那幾張盤,打算試試。具體怎么樣我也記不清了,反正是安裝成功了,不過刷新率非常低,眼睛根本受不了,所以沒多久又被我刪了,還是繼續(xù)我的Windows……說出來不怕笑話,到這時(shí)我還不知道Linux有好多發(fā)行版本,以為RedHat“就是Linux。
大二的暑假,Windows我已經(jīng)玩得不想再玩了,而且隨著對(duì)UNIX的漸漸了解,我開始對(duì)這東西有了點(diǎn)好感。于是在網(wǎng)上搜了一通,由于當(dāng)初對(duì)Linux的感覺相當(dāng)糟糕,所以我沒把目光放在Linux上,而是放到了BSD上。BSD有三個(gè)分支——FreeBSD、NetBSD和OpenBSD。當(dāng)時(shí)看著NetBSD和OpenBSD感覺不大舒服(呵呵,其實(shí)看著Linux這幾個(gè)字也不怎么舒服,這也是我當(dāng)時(shí)不選Linux的原因之一,不過現(xiàn)在不會(huì)了),于是自然而然地選擇了FreeBSD。
然而,對(duì)于我這個(gè)有著很深的Windows思維的人來說,想一下子適應(yīng)FreeBSD真的很不容易。還是回到分區(qū)。FreeBSD的“分區(qū)是怎么樣的?這讓我怵了好久,直到從圖書館借到《FreeBSD使用大全》的時(shí)候才有點(diǎn)眉目。不過,當(dāng)時(shí)并不知道這本書其實(shí)不大適合初學(xué)者。但那時(shí)在家里只能看這本書了,花了十幾天吧,把這本書看了個(gè)大概。
回到學(xué)校后就開始了學(xué)FreeBSD,但也是斷斷續(xù)續(xù),沒有當(dāng)初學(xué)Windows那么大的好奇心。不過,雖然進(jìn)展緩慢,收獲多多少少還是有一些的。在這當(dāng)中逛了好多論壇(ChinaUnix,F(xiàn)reeBSDChina等),看了好多文章,說實(shí)話感覺還真的挺不錯(cuò)。現(xiàn)在就稍微總結(jié)一下吧,以下僅以FreeBSD為例,因?yàn)槲业浆F(xiàn)在為止,經(jīng)過一些比較,還是認(rèn)為FreeBSD最適合我的性格:) 嗯,不再瞎扯了,切入正題,呵呵。
首先,我必須讓你擺脫一些誤解?;蛟S你會(huì)有這樣的不屑:UNIX那黑頭土臉的能算得上系統(tǒng)?能正常工作?能提供FTP和Web等服務(wù)?能受得了大負(fù)荷?ft,我才不相信,我才不用那破東西!如果你這么想,我可以很認(rèn)真地告訴你,你錯(cuò)了!知道么,世界使用量第一的Web服務(wù)器Apache最初是為UNIX開發(fā)的,超級(jí)數(shù)據(jù)庫Oracle最初也是為UNIX開發(fā)的,高端的服務(wù)器用的是什么操作系統(tǒng)?是UNIX!而不是你想象的Windows2003!當(dāng)然,我用過2003,也用它架過相當(dāng)多的服務(wù),我知道2003的性能不錯(cuò)。但請(qǐng)相信,世界上這么多大型站點(diǎn)使用的都是UNIX,你說他們的管理員難道就都那么笨?如果Windows2003性能真的比UNIX好,他們會(huì)不用這么好的東西?事實(shí)是,他們選擇了UNIX。不相信?好,你可以去這里看看:http://www.netcraft.com,隨便輸入幾個(gè)大型站點(diǎn),如www.google.com,www.yahoo.com,www.baidu.com,看看OS部分寫的是什么?或者,你再看看這個(gè)網(wǎng)址:http://uptime.netcraft.com/up/today/top.avg.HTML,看看世界上運(yùn)行時(shí)間最長(zhǎng)的機(jī)器用的是什么系統(tǒng)?如果你還是執(zhí)意認(rèn)為Windows2003牛,那么OK,你可以把這篇“無聊的文章拋在一邊了:)
如果你繼續(xù)看下來了,那我繼續(xù)說,呵呵。我們知道,Windows上的服務(wù)器很多都是以GUI頁面和服務(wù)的方式存在的,但在Unix中,它們基本上是在命令行下以daemon的形式存在。你可能很困惑,命令行下也能運(yùn)行服務(wù)?嗯,沒錯(cuò),正是。daemon在UNIX中的地位,有點(diǎn)像服務(wù)在Windows中的地位,但又不盡然?,F(xiàn)在你可以把daemon就當(dāng)成服務(wù)看待。
那么,UNIX下的文件是怎么樣的?UNIX跟Windows不同,它把所有的文件都當(dāng)成一回事,不像Windows那樣以后綴名來區(qū)分不同類型的文件??赡苣銜?huì)很困惑,如果這樣的話,我怎么打開不同的文件?事實(shí)上,在UNIX系統(tǒng)中,文件只是存儲(chǔ)上硬盤上的單純的字節(jié)。UNIX下區(qū)分不同文件的方法是看這些字節(jié)的前幾個(gè)字符。當(dāng)然,UNIX本身可不管你是什么文件,它只當(dāng)你是一些字節(jié)。區(qū)分這些文件的工作由應(yīng)用程序來負(fù)責(zé),比如你有一個(gè)文件名為“diogin的文件,你想“打開它。怎么打開?我不知道它的文件格式!麻煩大了吧?不大。用file命令一看,這個(gè)文件是什么類型馬上出來了,雖然不一定準(zhǔn),但絕大多數(shù)情況下是沒錯(cuò)的。好了,現(xiàn)在你知道它是個(gè)可執(zhí)行文件,在shell下敲入./diogin后,程序執(zhí)行了,打印出了“Hello, World!,呵呵……就這么簡(jiǎn)單。
可是問題又來了,什么是shell?還有,UNIX沒有像Windows那樣的桌面嗎?shell,簡(jiǎn)單地說,就是讓用戶與操作系統(tǒng)內(nèi)核溝通的一個(gè)媒介,你在Windows下用過命令行吧,你可以把shell想象成命令行,但shell可比命令行強(qiáng)大多了,功能上根本不是一個(gè)數(shù)量級(jí),這一點(diǎn)在你深入理解shell后肯定會(huì)感覺到。那桌面呢?這個(gè)可能是最讓人困惑的問題了,當(dāng)時(shí)我就一直不理解這個(gè)X跟桌面到底是怎么回事,甚至一度抱怨Windows怎么這么霸道,把我的思想全禁錮住了。首先必須明確,X是圖形界面的基礎(chǔ),X不是桌面的簡(jiǎn)稱!X提供了一些圖形調(diào)用接口,至于怎么用這些接口,怎么顯示你想要的圖形,是你的事情,它可不管。那么,你應(yīng)該用什么東西來控制自己想要顯示的圖形?答案是窗口管理器,典型的如fvwm。有了這兩個(gè)東西,應(yīng)用程序就可以以特定的圖形窗口方式顯示了?,F(xiàn)在你可能又會(huì)有問題了,不是說X是CS方式的架構(gòu)嗎?這個(gè)架構(gòu)是怎么回事?在我們通常的理解中,Server一般是有著高性能的機(jī)器,而ClIEnt是普通的客戶機(jī)。但這個(gè)理解卻不適合X,X中的Server,指的是有鍵盤鼠標(biāo)有顯示器的機(jī)器,而Client則是指一些在X上運(yùn)行的程序!這些程序,完全可以在另一臺(tái)機(jī)器上運(yùn)行,通過網(wǎng)絡(luò),向X服務(wù)器發(fā)送命令,X服務(wù)器收到這些命令后為這些程序顯示圖形。只要雙方遵循X協(xié)議,不管你的客戶程序在什么系統(tǒng)上運(yùn)行,在哪運(yùn)行,都無所謂。呃,說了半天,什么是桌面?桌面是在X和窗口管理器上集成了相當(dāng)多的X應(yīng)用軟件的一整套系統(tǒng)的合稱,它包括了底層的X,中間層的窗口管理器和上層的X應(yīng)用程序。很簡(jiǎn)單明了吧?事實(shí)上UNIX系統(tǒng)的運(yùn)行根本不需要X,只當(dāng)你想要圖形頁面的時(shí)候才需要安裝,它只是UNIX系統(tǒng)上運(yùn)行的一個(gè)軟件而已。那Windows的桌面呢?Windows的桌面是跟Windows內(nèi)核緊密結(jié)合在一起的,區(qū)分不開,你就把它跟系統(tǒng)當(dāng)成一整套的東西吧,因?yàn)榻Y(jié)合得太緊密了,我也分不開,呵呵。
當(dāng)你開始使用Unix系統(tǒng)的時(shí)候,你會(huì)遇到很多驚訝的事情,最讓你驚訝的,可能就是重新編譯內(nèi)核。天哪,這是什么東西?剛從Windows轉(zhuǎn)過來的用戶可能會(huì)嚇出一身冷汗。其實(shí)不用怕,編譯內(nèi)核是學(xué)習(xí)UNIX系統(tǒng)必須經(jīng)過的一關(guān),而且也不像想象中那么神秘。簡(jiǎn)單地說,就是改變系統(tǒng)最本質(zhì)的部分,讓它適合你的機(jī)器和你的需要,換句話說,你可以用重新編譯內(nèi)核來完全定制你的系統(tǒng)。最高級(jí)的系統(tǒng)都是能讓自己定制的,我不需要我用不著的東西。很好,那開始編譯吧!怎么入手?以FreeBSD操作系統(tǒng)為例,安裝的時(shí)候你選擇安裝系統(tǒng)內(nèi)核源碼(呵呵,沒錯(cuò),是系統(tǒng)內(nèi)核源碼,這個(gè)東西是最有價(jià)值含量的,但現(xiàn)在你可以完全免費(fèi)得到它,而不是花幾千元去買一個(gè)完全保密的東西:)),這通常會(huì)安裝在/usr/src/sys目錄下,然后根據(jù)你的CPU架構(gòu)(普通PC都是i386架構(gòu)),選擇不同的目錄進(jìn)入,里面會(huì)有內(nèi)核配置文件。FreeBSD的內(nèi)核配置文件為/usr/src/sys/i386/conf/GENERIC,即通用內(nèi)核配置文件,適合大多數(shù)機(jī)器使用的內(nèi)核配置文件。說到這里你可能明白了吧,默認(rèn)安裝的時(shí)候使用的就是按這個(gè)配置文件編譯出來的內(nèi)核,很明顯,為了讓大多數(shù)不同的電腦能用,里面肯定包含了很多你機(jī)器上沒有的東西?,F(xiàn)在你的任務(wù)就是把這些東西全都去掉,同時(shí)加進(jìn)去你想要的東西。用任何一個(gè)文本編輯器打開它,怎么編輯我就不說了,你可以查看手冊(cè),里面有詳細(xì)的說明的。編譯的過程,會(huì)在某個(gè)目錄下產(chǎn)生新的內(nèi)核源碼,你進(jìn)入那個(gè)目錄后就可以開始編譯并安裝新系統(tǒng)了。我的機(jī)器,刪除沒用的東西后的內(nèi)核非常精簡(jiǎn),256M的內(nèi)存啟動(dòng)后完全Free的內(nèi)存有231M,也就是說在啟動(dòng)過程中被“經(jīng)歷過的內(nèi)存區(qū)域只有25M,而且這不是活動(dòng)內(nèi)存,活動(dòng)內(nèi)存只有2650K!呵呵。跟Windows的上百兆內(nèi)存占用相比……
要想正常搞定新內(nèi)核是有點(diǎn)挑戰(zhàn)的,你需要對(duì)硬件相當(dāng)熟悉。好了,接下來我講講文件安裝吧,這也是在使用Unix的過程中我感到挺困惑的一個(gè)問題。我們都知道,在Windows系統(tǒng)中,安裝一個(gè)軟件很簡(jiǎn)單,下載文件壓縮包,解壓,雙擊setup.exe開始安裝,選擇一下路徑就OK了,很簡(jiǎn)單吧!安裝好后,文件通常會(huì)寫注冊(cè)表,說實(shí)話這是很惡心的一件事情,當(dāng)你重裝過系統(tǒng)后就知道了,你需要重新安裝一次這些軟件,很麻煩吧?于是在Windows下產(chǎn)生一些新名詞,典型的如“綠色軟件,意思是說不會(huì)寫注冊(cè)表,直接解壓后就能用的軟件。當(dāng)這些思想深深地圈住你的時(shí)候,你接觸了UNIX,你也用這套思想給搬過來了,于是你去下了個(gè)軟件包,解壓,咦,安裝文件呢?找不到安裝文件怎么安裝?呵呵……我還是來簡(jiǎn)要說明一下UNIX下的文件安裝吧,拿FreeBSD舉個(gè)例子,在這里我就先不說FreeBSD的ports軟件安裝機(jī)制和package軟件安裝機(jī)制了,這些是在你想學(xué)FreeBSD后才需要掌握的東西。首先,你下載了一個(gè)軟件包,這個(gè)軟件包里面可能是源碼,也可能是二進(jìn)制軟件。如果是源碼,你解壓后,它會(huì)自動(dòng)生成一個(gè)目錄。比如我假設(shè)這個(gè)軟件包是httpd-2.0.55.tar.gz,你用tar zxvf httpd-2.0.55.tar.gz命令將它解壓,在當(dāng)前目錄下得到httpd-2.0.55目錄。cd httpd-2.0.55,進(jìn)入這個(gè)目錄,里面就是源碼了,一般情況下會(huì)有一個(gè)Makefile的文件,這個(gè)是用來編譯軟件用的。現(xiàn)在只要做的,只是先做一下配置,./configure --help,會(huì)顯示出配置幫助,你可以根據(jù)自己的需要來定制,配置好后敲入make命令,make程序會(huì)自動(dòng)從這些源碼編譯出二進(jìn)制軟件,這個(gè)二進(jìn)制軟件跟上面我說的二進(jìn)制軟件基本一樣,區(qū)別只在于一些不同機(jī)器上編譯的一些細(xì)節(jié),還有就是后者打過包而已。好了,現(xiàn)在你敲入make install來安裝這個(gè)軟件。那么,這個(gè)命令做了些什么東西呢?很簡(jiǎn)單,它只是把編譯出來的軟件復(fù)制到它應(yīng)該去的地方,其它什么都沒做!就這樣么?它不寫“注冊(cè)表么?對(duì)呀,寫什么啊,UNIX的軟件是靠它自己的配置文件來控制的!如果你想知道它詳細(xì)的動(dòng)作,你可以去看看Makefile文件里的install部分,看它是怎么寫的,你就知道當(dāng)你敲入這個(gè)命令后系統(tǒng)都做了些什么東西了。一個(gè)典型的UNIX軟件,可以看作組件、二進(jìn)制程序和配置文件組成,而這些文件都是獨(dú)立的(當(dāng)然除了某些必要的依賴軟件在這之前必須安裝外),當(dāng)你知道這個(gè)軟件在另一個(gè)系統(tǒng)上是二進(jìn)制兼容的時(shí)候,你把這個(gè)軟件所在的目錄完全拷貝到那個(gè)系統(tǒng)上,這個(gè)軟件可以立即正常工作!多自然的事情,還寫什么注冊(cè)表,塞什么“開始菜單啊,UNIX就是這么井然有序!那么卸載呢?就是把這個(gè)文件夾刪除!不會(huì)留下垃圾么?留什么垃圾啊,在Windows下的“綠色軟件不就是直接刪除么?呵呵,可以這樣說,UNIX下的軟件,都是“綠色軟件。
羅嗦了這么多,還是有兩個(gè)方面得講講的,就是Unix的目錄結(jié)構(gòu)和進(jìn)程。拿FreeBSD為例,安裝的時(shí)候會(huì)讓你創(chuàng)建“掛載點(diǎn)??赡苣阌钟欣Щ罅税?可以這樣理解:Windows下不是有C:,D:等盤符么,UNIX下的“掛載點(diǎn)就相當(dāng)于這個(gè)“盤符,下面掛著文件系統(tǒng),不同的文件系統(tǒng)可以有不同的格式。好了,你現(xiàn)在創(chuàng)建了/、swap、/var、/tmp、/home和/usr這幾個(gè)“掛載點(diǎn),你用Windows下的思考方式,將它們相像成C盤、頁面文件、D盤等等。其實(shí)沒什么大礙,這樣類比會(huì)讓你比較好接受。好了,你進(jìn)入了系統(tǒng),ls /一下,發(fā)現(xiàn)了好多東西,你可能又驚訝了:怎么這么亂啊?當(dāng)你熟悉了之后,你就不會(huì)這么說了——如果你一開始學(xué)的就是UNIX,你會(huì)說亂么?事實(shí)上,一點(diǎn)也不亂,而且非常有秩序——這些可是經(jīng)過了幾十年定格下來的目錄結(jié)構(gòu)!除了/var,/tmp,/home和/usr,其它都是在/目錄下的文件或目錄,而且對(duì)一個(gè)系統(tǒng)來說,這些東西基本上不會(huì)變化。swap目錄是交換分區(qū),相當(dāng)于Windows下的頁面文件,/tmp目錄是臨時(shí)“垃圾場(chǎng),當(dāng)然里面的東西可不是“垃圾,都是軟件運(yùn)行產(chǎn)生的臨時(shí)文件。/home是用戶的家目錄所在地,每個(gè)用戶(除了root)在登錄后都被定位在家目錄。/usr是使用頻率最高的一個(gè)目錄,因?yàn)榻^大部分本地軟件都安裝在這里(/usr/local)。當(dāng)然,你可以再自己建立新的“掛載點(diǎn),如/ftp,來提供ftp服務(wù),呵呵。
嗯,再談?wù)勥M(jìn)程,這東西也曾讓我困惑了一段時(shí)間。Windows2003下,我們可以把進(jìn)程減小到開機(jī)12個(gè)左右,普通的應(yīng)用基本上不超出30個(gè)進(jìn)程。但當(dāng)你進(jìn)入U(xiǎn)NIX后,看著幾十個(gè)上百個(gè)進(jìn)程,是不是嚇了一跳?其實(shí)這跟UNIX當(dāng)初的設(shè)計(jì)有關(guān)。舉個(gè)例子,apache在Windows下正常工作只顯示兩個(gè)進(jìn)程,一個(gè)是主進(jìn)程,另一個(gè)是服務(wù)進(jìn)程。而在UNIX下,則視連接情況有不同的進(jìn)程數(shù)。如果當(dāng)前有50個(gè)連接,則會(huì)有51個(gè)進(jìn)程,其中一個(gè)是主進(jìn)程。也就是說,apache為每個(gè)連接啟動(dòng)一個(gè)進(jìn)程(假設(shè)使用的是prefork方式的多道處理機(jī)制)。這樣一來,進(jìn)程數(shù)一下子就上去了,我們可以把它看成Windows下的線程(只是簡(jiǎn)單的類比而已,事實(shí)上不是兩回事)。具體情況我就不多說了,打這么多字累死我了,_-_
最后順便講講FreeBSD的安裝吧!安裝的大致過程,在FreeBSD的手冊(cè)里已經(jīng)有詳細(xì)的講解。需要注意的是,必須弄明白什么是主分區(qū)、什么是擴(kuò)展分區(qū)和邏輯分區(qū)。對(duì)于玩熟了Windows的人來說,這一步?jīng)]什么問題。好,接下來我假設(shè)你已經(jīng)有Windows系統(tǒng)在硬盤上了,而且你是把整個(gè)硬盤都給了Windows?,F(xiàn)在你要?jiǎng)澇鲆徊糠挚臻g出來裝FreeBSD。如果你的分區(qū)情況是:C盤為系統(tǒng)盤,占一個(gè)主分區(qū);D、E、F盤為邏輯分區(qū),在一個(gè)擴(kuò)展分區(qū)上。注意,這個(gè)擴(kuò)展分區(qū)也是主分區(qū)!接下來怎么辦呢?這里必須明確:FreeBSD必須安裝在主分區(qū)!所以你要從D,E,F這三個(gè)盤里分出空閑的空間,從哪里分?當(dāng)然是F盤了,用什么分?請(qǐng)先準(zhǔn)備一個(gè)軟件:partition manager。這是一個(gè)分區(qū)軟件,可以很容易地分區(qū)。怎么用這個(gè)軟件我就不說了,你不會(huì)的話先研究一下它的說明,相信你能搞定(我給點(diǎn)思路,不是用刪除,而是用壓縮第二個(gè)主分區(qū)的方法來擠掉F盤,這樣才會(huì)縮小第二個(gè)主分區(qū),否則那部分空間還是第二個(gè)主分區(qū)的,等于白干)。于是,你把F盤騰了出來,得到了一個(gè)空閑空間。好了,現(xiàn)在準(zhǔn)備工作做好了,插入盤開始安裝。選分區(qū)的時(shí)候你就可以把FreeBSD放到那塊空閑的硬盤區(qū)域上了。系統(tǒng)裝好后,去借幾本書開始認(rèn)真學(xué)吧!只是FreeBSD方面的書實(shí)在太少,能在學(xué)校圖書館借到的就三本:《FreeBSD使用大全》、《FreeBSD技術(shù)內(nèi)幕》和《FreeBSD手冊(cè)》。當(dāng)然如果你能把這三本書都看透,水平肯定不低了,呵呵。我就不說了,因?yàn)槲姨?hellip;…
嗯,一時(shí)也想不到還要什么要說了,就這樣吧,有問題google,上UNIX方面的論壇是王道,呵呵。
