離上一次用Linux已經有一段時間了。這主要是因為兩方面的原因:一方面是臨近大學畢業了,忙著寫論文找工作,無暇顧及我的愛好了;另一方面,也是最重要的方面,大學期間買的一台二手電腦(CTR顯示器的那種)壞了,害得我畢業論文只能在大學機房的電腦上完成。現在大學畢業了,找了個不算好也不算很差的工作,又開始玩起了Linux。主要是想給自己未來的電腦(我現在還沒有買電腦,現在用的是公司的)選一套合適的Linux作業系統,當然也是出於學習的目的。所以這一段時間,我又開始了學習Linux的路程。
前一階段的學習是在大學期間,用的是redhat9.0的系統。那時主要是用了一下裡面的軟體,比如用一下gcc,編譯個小程式。用apach架設一個web伺服器;或者用samba架設一個檔案伺服器;再就是做路由實驗。總之這些就是一個用Linux的過程。在這個過程中,我體會到了什麼事真正的多任務多使用者的作業系統,特別是多使用者這一特性。也體會了為什麼bash指令碼和命令使Linux被稱為靈動的作業系統,如果說用圖形介面(所有作業系統的)是在利用作業系統的提供工具的話,那麼用bash或者其他命令直譯器(sh、tcsh、ssh等)則是使用語言,一門電腦能夠理解的語言。語言和工具是兩個概念。語言是由零散的語句組成,工具是利用語句組合成的一個具有一定功能的集合體。用Linux的文字模式,命令列模式就是使用語句與電腦交流的過程,用這些語言寫成的指令碼也叫做bash指令碼。這本身就有語言的特性,擁有變數,可以定址,可以從鍵盤讀取,有控制台輸出,還有邏輯判斷、數學運算、迴圈。雖然,這些特性比起C和C++的一些特性相差還很遠,但是作為一個指令碼來說這已經不錯了,這是因為他的這些特性已經能夠完全適應伺服器的日常管理需要。與此同時,我還體會到了什麼叫做用記事本打天下。Linux的文字模式下,要想讓程式具有可定製性,可互動性。只需使用設定檔,也只能使用設定檔。而且這些設定檔都是用人類可以讀懂的字元組成的。用電腦界的還說,這叫human-readable
simbles,其實也就是text文本,採用utf—8或者ansc編碼的那種字元。總之,這是一段不錯的體驗。
這一段學習的過程的確給了我不一樣的感覺。現在我開始學著怎樣往這個系統中添加自己需要的程式。在windows中,這很容易:在網上下載一個安裝包,點擊“下一步“就可以完成。可是在Linux中,這並不容易。我想這其中的糾結過程只有真正安裝過的同學才有體會。也許,你可以說用安裝工具yum或者apt-get等自動化安裝工具,可是你絕的這可靠嗎?他能滿足你百分之百需要嗎?你得考慮怎樣定製yum原始伺服器。rpm安裝包更不容易,這意味著,你必須解決好檔案依賴性問題。你必須在提示下不斷下載各種支援包。沒有辦法,在開源世界中,安裝程式只能這樣靠自己解決。如果你恰好碰上了循環相依性那可就夠受了(反正我還沒有碰到過,如果碰到了,我的措施就是換一個rpm包,因為其實不是每一套安裝包都一樣的)。還有一種解決方案就是編譯源碼,然後安裝,這不需要解決源碼問題,但是不是每一套源碼都能順利安裝,所以很糾結。這次安裝mplayer就是這樣,我換了四五套源碼才編譯成功。這需要耐心和毅力,當然在好奇心的驅使下,這些困難都算不上什麼。只能讓人更好奇,同時這些也刺激了我解決問題的慾望。這意味著,當問題解決了以後,會很有成就感。是的,我編譯完mplayer並且安裝好了以後,開始試著播放音樂,音箱裡傳出了悅耳聲中。我停止了思考,開始享受這來之不易的歌聲,太美了。再看看時間已經1:30了,該回去休息了。但是我還是興奮了許久。
後面還有就是在字元模式下,瀏覽圖片。其實這說簡單也簡單,說複雜也挺複雜。說起來也就是利用Linux提供的framebuffer來顯示圖片。在Linux下,這相當於DOS下的圖片緩衝區,但是在Linux下不能這樣操作。因為作為一個完整的現代作業系統,不應該把硬體直接暴露給使用者,讓使用者不受管理的使用。就像dos下面提供了dos中斷以後,IBM又公布了BIOS中斷一樣。其實這很危險,不利於發揮作業系統的管理作用,因為產生了容易產生越權行為,意味著任何一個應用程式都可以越過DOS操作介面,而可以不讓作業系統知道,這對於使用者和資料都是不安全的。所以,在Linux下顯示緩衝區變成了一個只有root使用者才可以讀寫的檔案/dev/fb0,這是一個裝置檔案。用過的人都知道,Linux的/dev目錄下有許多這樣的檔案。是不是想起了一句話:everthing
is file。是的,Linux是一種類Unix系統,但他不是Unix。所以,在Linux中也適用了這句話:everthing is file。既然是檔案,那麼就可以用讀、寫和可執行來規定許可權。比如root就可以寫/dev/fb0這個檔案,一般使用者只能讀。這就是為什麼我剛開始用普通使用者登入後在Linux下用fbv顯示圖片時出現permission denied!提示,但是可以讀出並顯示出來一堆亂碼。當用root使用者登入時就可以正確顯示圖片。是的,知道這個並沒有什麼了不起。但是知道一件是和做到一件事的體會是完全不一樣的。因為其實這裡面還有很多細節需要注意。
不過話說回來,我的這些學習離不開一個好夥伴,那就是google。我無意在這裡專門為google做廣告,google也不需要我給他們做廣告。但是在學過程中,常常是google告訴我別人是怎樣解決這些問題的。這給我提供了一個不錯的例子,這些對我的協助真的很大。百度雖然也有協助,但是沒那麼多,因為這些結果很雜。只有在google找不到的時候,我才去用百度。真的就像一個面試官說的那樣,你不知道這個東西,沒有關係,但是如果你不會在google上尋找就不行了。總之,感謝互連網,感謝google!