Linux江湖:Just for 折騰

來源:互聯網
上載者:User

標籤:c   style   blog   java   a   http   

  我在部落格園開博已經有七年又十個月了。不幸的是,我的部落格裡一篇東西都沒有。我七年又十個月前選擇部落格園的時候,部落格園還不是像現在這樣的大雜燴。那時,部落格園的內容主要是.net方向的,同時,部落格園還有兩個分站,一個是www.cppblog.com,一個是www.blogjava.net,分別讓使用者發布C++和Java方面的文章和隨筆。現在,www.cnblogs.com這個主站儼然有一統江湖之勢,我在另外兩個分站上的部落格訪客寥寥。So,我又把這個閑置了快八年的部落格啟用了。

  我是非常喜歡部落格園的,這麼多年一直都沒有在別的部落格網站上寫任何東西。當初選擇部落格園,是因為它的編輯器。在部落格園裡寫文章,貼代碼時非常漂亮,是一個真真正正面向程式員的部落格。現在,我對部落格園的喜愛又增加了一個理由,那就是它對數學公式的支援。

  剛開博時,我也寫了幾篇.net方面的隨筆,但是後來覺得不過癮就都刪了,然後這個部落格就一直閑置至今。倒是在C++和Java的分站上發表了一點東西,有興趣的朋友不妨移步一觀。現在重啟部落格,當然是因為找到了讓自己覺得過癮的東西。從這篇博文的標題應該可以看出來,我是要寫一系列關於Linux的東西了。只是不知道我覺得過癮的東西,別人是否會和我有同感。那就看我目前77304的排名以什麼樣的速度上升吧。

  

  Linus說“Just for fun”,而我要說“Just for 折騰”。想知道我是怎樣折騰Linux的,請看下面這個:

 

  從這個可以看出,我為了“折騰”Linux系統,在我的電腦上安裝的5個不同的發行版。它們分別是Ubuntu 14.04案頭版、CentOS 5.10、CentOS 6.5、Fedora 20和一個Ubuntu 14.04 Server版。在以上所有系統中,只有Ubuntu 14.04案頭版和Fedora 20開啟了GUI,其它的幾個系統都使用字元介面。上面的就是我在Ubuntu 14.04案頭版中,使用ssh遠端連線到另外四個系統時的情形。

 

關於字元介面和圖形介面

  多年前,我使用Linux系統是偏愛字元介面的。裝B神器啊,不管是別人看起來還是自己看起來,都顯得特別的高大上。當然,字元介面用起來那也是相當舒服的,不過只是曾經。為什麼這麼說呢,那是因為在14寸或17寸,解析度限於1024*768的時代,使用字元介面,字型不大不小,也沒有刺眼的強光,眼睛看著非常舒服。可是,自從液晶屏、高分屏時代來臨之後,這種舒服感就一去不複返了。原因何在?字太小。比如在我這個21.5寸1920*1080的液晶顯示器上,使用純字元介面根本沒法看,即使開啟FrameBuffer也沒辦法把字型變漂亮。在我的顯示器上,必須使用15pt到16pt的Dejavu Sans Mono字型,眼睛看著才舒服。現在在網路上,仍然有很多人問怎麼把Linux設定成啟動後自動進入字元介面這樣的問題,我很想告訴他們:拉倒吧,還是使用圖形介面靠譜。對於確實沒有圖形介面的伺服器系統,還是老老實實使用ssh遠端連線吧。

 

為什麼要裝這麼多不同的發行版

  都是Linux,為什麼要裝這麼多的發行版呢?那是因為系統和系統之間是不一樣的。不同流派的發行版不一樣,同樣流派的發行版,老系統和新系統也不一樣。還是以上面提到的那個經典問題“怎麼把Linux設定成啟動後自動進入字元介面”為例。對於這個問題,教科書式的回答是:將/etc/inittab檔案中的啟動層級修改為3。但是,我可以很負責任地說:教科書過時了。

  我最早是從Red Hat Linux 9開始接觸Linux的,那時,天天抱著一個Red Hat Linux寶典啃。很顯然,這本書現在肯定是嚴重過時了,因為Red Hat後來就開始做Enterprise Linux,每兩年一個版本,現在已經是Enterprise Linux 6,馬上就要出7了。在我安裝的這些系統中,CentOS等同於Red Hat,Fedora是Red Hat新技術的實驗場,所以他們是一個流派的,Fedora 20比CentOS 5、CentOS 6新,Ubuntu則是另外一個流派,每半年出一個新版本,我用的是目前的最新版。

  我想,我們中的很多人學習Linux都是從Red Hat開始的吧。就像我家裡總有那麼幾本經典教材,如(我書櫃一角的照片):

  對於前面提到的那個經典問題,教科書式的回答僅適用於CentOS 5,其它的系統則各有各的方法。我將在後面講述方法論的時候詳細說明。

 

折騰Linux系統的方法論

  要想將Linux折騰透徹,光靠基本教材是遠遠不夠的,還得掌握適當的方法。我的方法論如下:

  1.在使用一個命令的時候,最好要知道它屬於哪個軟體包;

  2.會尋找和安裝軟體包,安裝軟體包後,要能夠找出檔案都安裝到哪裡了;

  3.要會閱讀軟體的文檔;

  4.實在不行了,那就看原始碼吧。

 

  使用我的方法論還是要有一定的Linux基礎(比如如何進行使用者管理、檔案管理等,以及瞭解Linux究竟是個什麼樣的系統這樣的基本哲學問題),所以教科書還是很有必要讀那麼幾本。過了基礎階段,折騰Linux其實就是折騰Linux系統下的各種軟體,這時候,我的方法論的重要性就顯現出來了。

 

舉例說明

  還是以前面提到的經典問題為例,究竟怎麼樣才能讓Linux系統啟動後自動進入字元介面呢?按我的方法論,我們還是得從軟體分析起。Linux系統的核心載入完畢後,第一個執行的進程是init,是進入字元介面還是進入圖形介面,當然是init說了算。不同的系統,啟動的第1個進程都叫init,可此init等於彼init嗎?所以,1.我們要找到這個init屬於哪個軟體包;2.找到這個軟體包的檔案都安裝在檔案系統的哪些位置,這個軟體包還包含哪些程式,包含哪些文檔;3.閱讀這個軟體包的文檔(當然,首先利用搜尋引擎對該軟體包做一些功課是必須的);4.實在不行就閱讀原始碼吧。

  在Red Hat流派的系統(CentOS、Fedora)中,軟體的包管理器是RPM。先看CentOS 5.10,首先,使用which init命令,可以查出init的完整路徑為/sbin/init;然後使用rpm -qf /sbin/init命令,可以查出init程式所在的軟體包為SysVinit;最後,使用rpm -ql SysVinit命令,就可以看到這個軟體包裡面還有哪些程式、哪些文檔已經它們分別位於檔案系統的什麼地方了,如:

 

  而Ubuntu屬於另外一個流派。它的包管理器為dpkg。在Ubuntu中,首先,使用which init命令,可以查出init的完整路徑為/sbin/init;然後使用sudo dpkg -S /sbin/init命令,可以查出init程式所在的軟體包為upstart;最後,使用sudo dpkg -L upstart命令,就可以看到這個軟體包裡面還有哪些程式、哪些文檔已經它們分別位於檔案系統的什麼地方了,如:

 

   用同樣的方法研究一下CentOS 6.5,發現其init程式也是屬於upstart軟體包,如:

 

  究竟是什麼樣的優勢使得upstart軟體包取代了傳統的SysVinit軟體包呢?很顯然,有了以上資訊,我們Google一下又有何難。還會有更先進的軟體包取代upstart嗎?讓我們看看Fedora 20用的什麼,如:

 

  原來Fedora 20用的是systemd。使用cat /etc/inittab命令可以顯示inittab檔案裡面的內容,從其提示可以看出Runlevel的概念早已無影無蹤。由此可見,inittab、RunLevel都不是Linux本身的哲學,只是使用了不同的軟體而已。

 

  使用Ubuntu、CentOS、Fedora等Linux發行版有一個很省心的地方,那就是它們都具有官方的軟體包倉庫,只需要一個命令,就可以從倉庫中尋找、安裝相應的軟體包。Ubuntu系統使用的是apt-get或aptitude,Red Hat流派的系統使用的是yum。如,在Ubuntu中使用aptitude尋找軟體包:

  

  在CentOS 5中使用yum尋找軟體包:

 

怎麼查看軟體的文檔

  Linux就是一座寶藏,其中有汗牛充棟的精心編寫的文檔,一輩子都學不完。要發掘這座寶藏,有兩把鑰匙必不可少,它們就是man和info。比如,想學習bash編程,可以嘗試輸入man bash來查看bash的文檔,如:

 

  而對於GNU出品的軟體,往往都提供info格式的文檔,可以通過info命令閱讀。例如,想瞭解Grub怎麼安裝和配置,可以輸入info grub查看其文檔,如:

 

  需要提一下,在Ubuntu中,很多軟體的文檔是單獨打包的,可以通過aptitude search命令搜尋,通過aptitude install命令安裝相應的文檔包。有些軟體的文檔可能不是man格式或info格式,而是html格式或pdf格式,這時,可以通過前面提到的方法找到這些檔案都安裝在檔案系統的什麼地方,然後使用相應的閱讀器開啟閱讀。

 

 閱讀原始碼

  通過尋找軟體包、無所不能的搜尋引擎和精心編寫的文檔,我們基本上可以解決Linux系統下絕大部分的問題。只有絕少數情況下,可能需要閱讀原始碼。

  在Ubuntu系統下,可以通過sudo apt-get source命令擷取某一個包的原始碼。比如要想學習getty是怎麼寫的,想看它的代碼,使用如命令:

 

  在Ubuntu中,Linux核心的原始碼是特例,它單獨打包。可以使用如下命令搜尋核心的原始碼:

 

  而在CentOS 5.10中,所有的原始碼包都是在其二進位包的名稱後面加上-devel尾碼,Linux核心也不例外,如,搜尋Linux核心的原始碼:

 

  原始碼下載和安裝後,如果僅僅只是閱讀,使用VIM足以。在“Linux江湖”的後續系列中,我肯定會有一篇如何折騰VIM的博文。這裡就不繼續囉嗦了。

 

總結:

  經常使用的命令:

  Ubuntu系統:

    which

    dpkg -S

    dpkg -L

    aptitude search

    aptitude install

    apt-get source

    man

    info

  CentOS、Fedora系統:

    which

    rpm -qf

    rpm -ql

    yum list

    yum install

    man

    info

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.