隨便說說Windows和Linux
首先聲明,這篇文章并非論述Windows/Linux孰好孰壞的憤青文。我是一個雙系統用戶,這篇文章只是隨便說一些我的使用體會,從各個角度說一說這兩個系統的異同。文中可能對Linux的描述較多,也可以當做一個簡單的Linux入門介紹文,不過這個介紹有點太抽象了。
首先講講操作系統(為了打字方便,后面簡稱OS)這個概念吧。在計算機學術上對OS的定義來說,OS主要負責的是各種硬件資源的分配管理,所以,它應該只是一個內核。但對于Windows用戶來說,提及OS,往往指的是所有由MS提供的東西,包括Win內核,也包括所有附帶的上層應用,如mspaint, notepad等,當然也包括整個GUI的設計。對于普通的Win用戶來說,OS則更是指的Release。經常會聽到這樣的對話:“你用的什么系統?”“我用的Win7”。對于Linux用戶,內核與上層應用的界限是非常明顯的,僅從普通用戶(相對于開發人員而言)的角度來說,Linux內核與Windows內核最大的區別也許是GUI是否做在內核中。Linux的內核是不包括GUI的,而Windows則把GUI做到內核中了,所以Windows在GUI方面消耗的資源相對要少一些,也更適合部署各種娛樂應用。(或許有人要出來跟我說Linux的GUI消耗資源更少,Vista上開不了特效的硬件在Linux上都能開3D特效。這些讀者,我建議你多用用Linux之后再來看這個結論。)
按理來說,Linux應該僅僅指Linux Kernel,不應該包括任何上層應用,然而實際情況下,Linux指代了一類東西。所以Linux沒有Release這個概念(每個軟件都有自己的Release),而發行版(Distribution)這個概念可以約等于Win的Release吧。通常,除了一些LiveCD的Distro外,不同Distro最大的區別是包管理工具的不同。用Linux的用戶都知道,每個Distro都有自己的軟件倉庫,倉庫里有幾乎所有的軟件,用戶可以直接從倉庫中下載軟件安裝,而不需要在網上搜索下載,還要擔心是否含有病毒。每個Distro的倉庫的格式不一樣,軟件包的格式也不同,他們的風格也大不相同。如Debian的APT,它的特點就是方便用戶,有很強的自動解決沖突的機制,用戶只管裝你要的軟件,一句install就行,其他的我來;如Gentoo的emerge,它的特點是所有包都是源代碼,在本地根據本地的優化設置進行編譯,設置可以取舍某些軟件中的特定功能;再如Arch的特點則是提供的軟件包都是最新的,很適合喜歡嘗鮮的用戶;LFS則沒有包管理機制,什么都要自己來,所以通常不適合桌面用戶使用。但為什么說Distro只是約等于Win的Release呢?Win的Release,從普通用戶的角度來看,最大的區別就是GUI。而Linux下的GUI并不是Distro決定的,Linux下的GUI,可以簡單的認為是由幾種不同的桌面環境(DE)來決定的(其實不是這么簡單,但你這么認為也沒人會反對你),常見的DE有Gnome,KDE,openbox,xfce,awesome等,而所謂的3D效果,并不是DE,只是一個應用軟件-Compiz Fusion。Compiz Fusion里的絕大多數功能都只能用來裝裝B,無論對于開發,還是桌面娛樂都沒有實用意義,所以用了很短的時間之后我也不用了。而每種DE,不僅僅是外觀的不同,其設計理念也有很大的區別。如awesome是一個典型的平鋪式窗口管理工具,它的特點是總是把前臺的窗口撐滿整個屏幕,并且能夠方便調整各窗口大小,很適合開發人員使用。(我因為已經習慣了GNOME,并且一直找不到時間折騰一下awesome的配置,不然肯定裝awesome了)
上面說的這么多,都是從一個桌面用戶的角度來看的,下面稍微深入一點點,從一個更接近OS的角度來看兩者的異同。
對于習慣Windows的用戶,剛開始用Linux的時候,目錄樹也許是最不習慣的部分之一。很多人難以理解我這么多分區都在哪里?掛載是怎么回事?Windows用戶總是習慣性的認為第一個分區的名字就叫C盤,第二個分區的名字就叫D盤。所以在Linux下也總會問“我的C盤在哪”。其實,如果深入了解一下,就會發現其實Win和Linux的目錄結構是很相似的,看下圖(用等寬字體瀏覽):
\(根目錄) 桌面
Linux的目錄結構 Windows的目錄結構
從這里面可以看出,Windows的目錄結構與Linux是相似的,它的根目錄是桌面,在這個目錄下有控制面板,我的電腦等目錄,而在我的電腦中則有C、D這些目錄,通常第一個分區掛載于桌面\我的電腦\C這個目錄下,其他邏輯分區也一樣。這里,控制面板是一個特殊的目錄,它是把很多在system32目錄中的管理工具“軟鏈接”到了這個目錄下,網上鄰居也是特殊的目錄,把網絡相關的狀態信息顯示在這個目錄中,我的文檔則相當于Linux下把某個目錄Bind Mount過來,回收站則是把各個分區上的Recycled目錄組合在一起,庫其實跟回收站的原理差不多。Windows中邏輯分區掛載點是寫在注冊表中的,Linux下的掛載點寫在/mnt/fstab中。
對于Linux目錄,這樣理解也許會容易一些:/boot目錄存放的是系統內核文件,以及boot loader(如grub)的文件,系統啟動之后,內核完全存在于內存中,這個目錄也就沒用了。/home目錄可以認為是我的文檔,但其組織方式與我的文檔不同,Windows下“我的文檔”是在邏輯磁盤上的某些目錄的集合,而/home,通常情況下是單獨掛載的分區(不單獨掛載也行,跟\共用邏輯分區);/usr目錄有點類似于C:\Windows目錄,字體目錄等都在這里面,而/usr/share則相當于Program Files目錄,存放各個軟件的文件;/lib目錄則類似于Program Files\Common Files,是各種軟件共享的庫存放的地方。/usr/local這個目錄的結構跟/usr的結構很相像,但在某些發行版(如Debian)中,這個目錄是普通用戶(需要加入staff組)可以訪問的,所以普通用戶安裝軟件可以裝到這里面。(當然,這種做法比較適合單機用戶,或者多用戶機器上只有較低權限的管理員使用,多用戶機器上,還是推薦將自己的軟件裝到自己的home目錄中);/mnt或者/media目錄可以認為跟我的電腦很類似了,只是,通常移動硬盤分區會掛載在這下面,當然,如果你愿意,你也可以把所有分區按分區順序掛載到/media/{C,D,E...}下;/proc目錄是一個特殊的目錄,它可以認為是內存的一個映射,從里面可以直接讀取到很多內存中的內容,各個進程的狀態信息等,當然,有些信息需要一定的權限才可以讀取;/dev目錄是一個特殊的目錄,是所有物理硬件(如sda)、邏輯硬件(如tty)的映射,這里每個文件代表一個硬件設備;/etc可以認為是Windows的注冊表,但這里都是全局的配置,相當于HKLM這個根鍵;/bin嘛,其實就是把所有的應用程序的可執行文件放在這里,/sbin中的s表示system的意思,作用也就好理解了,可以認為是系統的一些必要工具。
其實,僅從操作系統原理的角度來看這兩個系統,它們并沒有太本質的區別,內存管理、硬件資源管理、進程管理等,都是相同或相似的概念,不同的實現而已。它們的不同點至于使用的理念不一樣,*nix無論是內核還是上層軟件,大多遵循所謂的Unix哲學,Unix哲學即指導了代碼的編寫風格,也影響了軟件的使用習慣。Windows,我不知道是否也有Windows哲學一說,但是Windows應用程序的代碼風格跟*nix是很不一樣的,而且使用習慣更是不同,它們的理念不同,可以認為這算是IT界的兩大宗教吧。這里不深入討論Unix哲學或者Windows哲學的細節。我只想籠統的說一下我對這兩種理念的感覺。Windows因為都是由微軟提供,并且第三方的軟件一般也都使用微軟提供的開發工具開發,所以聚合是最大的特點,UI風格比較統一。也因為聚合的特點,Windows的設計重心是ease of use,相對來說,Windows的東西對開發者是不友好的,但對最終用戶卻很友好,這也是為什么Windows會有這么多的桌面用戶。*nix想法,它對開發者是友好的,但對用戶不友好。*nix中幾乎任何一款工具的學習曲線都要比Windows長,但是功能卻也很強大。從開發者看,我覺得最大的特點就是最大化了代碼重用,因為所幾乎所有軟件都開源,所以免去了很多重復發明輪子的工作。曾經看到過很多軟件開發商的怨言,自己的軟件用了.NET庫,但用戶電腦中可能沒有裝,所以雖然自己的軟件只有幾百K,但發布的安裝包卻不得不幾十兆。軟件的大小很多時候直接影響了用戶的接受程度。但微軟的各個Release都可謂是Life Changing,娛樂模式、辦公模式,影響了大多數人的生活。Linux這方面,android也可謂是一個比較典型的例子吧,我個人覺得吸引那么多開發者參與到android應用的開發,主要原因還并不是andoid有多好用,而是上面開發軟件太簡單了。
這里順便說說命令行。很多Windows小菜總是會覺得DOS是多么了不起的東西,看到別人在CMD中敲幾條命令就會覺得非常了不起。為什么,我想了想,也許是因為它們覺得會敲命令的人能夠記住很多命令,那么長長的東西,誰記得住啊!能記住的肯定都是牛人。然而其實大多數命令是不需要記太多東西的,這一方面,以命令行見長的*nix最有發言權。在*nix下,以bash為例,它提供的各種補全方式,還有各種對命令行操作的能力,甚至還有vi模式、emacs模式,使得敲命令根本不需要記住很多東西,并且輸入的過程也很輕松,再配合管道的使用(*nix中把文件當作通用標準接口),*nix的命令行在UI體驗上,以絕對的優勢領先了dos或者cmd。Win2k8中提供了PowerShell,從同學的介紹來看,它確實也非常強大,至少在配置能力方面,絕不是cmd那樣的小輩。但是,我覺得它有一個方面與*nix的shell比是沒有任何優勢的,第三方程序,*nix的shell功能強大,并不在與bash本身提供了多少功能,而在于各種第三方工具,使得命令行在*nix下幾乎無所不能(當然也不可能絕對的無所不能)。
似乎也寫了不少了,但其實還是只講了一點點。碼字有點累,就歇歇吧,以后有空再寫。最后做個簡單的總結,這個總結有些籠統,而我也不善長總結,所以言詞可能不是很準確,各位輕拍。
從操作系統的角度看,兩者是大同小異的。從開發者的角度看,Linux是開發友好的。從最終用戶的角度看,Windows讓你忘了硬件,忘了系統內核,Win讓你感覺你在用軟件,而Linux讓你感覺你在用Linux。
轉載請注明出處:http://www.cnblogs.com/stephenjy/archive/2010/02/17/1668913.html