學習linux,首先得看你想用linux作那方面的工做。你能夠作一個系統管理員,也能夠作一個linux服務器環境開發人員,也能夠作網絡通訊方面的,甚至底層的能夠向驅動程序發展。
先大概講一下這些方面都作些什麼吧。
系統管理沒必要多說,你得精通linux的命令和腳本,擅長處理各類數據文件,linux的腳本語言不少,shell是一種。系統管理員最主要的工做所管理維護Linux系統的配置環境,因此這項工做必須熟悉「命令行和腳本」。
環境開發:主要是利用linux現有的系統調用接口SCI,開發基於linux環境的應用程序。什麼是SCI,簡單來講,就是Linux內核提供的函數庫。例如linux的函數read提供讀文件的功能。那麼環境開發是個什麼樣的工做呢?就是利用linux已經提供好的SCI這樣一個庫函數調用接口,去寫一些支持linux系統環境的程序,舉個例子,C語言程序員熟知的stdio.h就是依靠SCI編寫出來的,環境開發就是在linux提供的SCI上面開發一些函數庫,提供比較基本的功能例如數據文件管理,數據庫管理等。數據文件管理也能夠經過命令行來作,可是命令行作的功能不如環境開發編程能實現的功能強大和靈活。
網絡編程:這是linux最爲核心的功能之一。linux網絡編程提供了在TCP和IP層編程接口,在上面進行的編程涉及到網絡層次中的傳輸層,網絡層,鏈路層。鏈路層更接近網卡等硬件,網絡層和傳輸層提供了在不一樣主機之間傳送數據的接口。若是能把Linux網絡編程學好,那麼看懂nginx這類http服務器源碼不會有太大障礙,由於這類開源項目都使用了linux提供的TCP/IP等編程函數庫。
驅動開發:若是說,你想進一步往底層硬件發展,使用linux爲各類硬件設備寫驅動程序,那麼驅動開發就是linux一個不錯的方向。驅動開發位於內核水平,因此當你作驅動開發的時候,每每須要必定程度的瞭解linux內核結構。
這裏,咱們梳理一下:
任何人學習linux都從最上面的用戶層,即便用linux系統功能開始學起,最後才一點點的往底層發展。因此基本的學習順序是:
linux命令行腳本-->Linux環境開發/網絡編程-->linux驅動開發-->linux內核 linux
所以給LZ建議的讀書方案是這樣的:
(1)學會「使用linux」
不管你往上面哪一個方向發展,一開始要作的應當是學會使用linux的命令行和shell腳本,這一步幫助你瞭解「怎麼使用Linux」。 推薦書籍《鳥哥linux私房菜(上卷)》(鳥哥的下卷是關於linux服務器架站方面的內容,若是你想利用linux搭建一個本身的網絡服務器,那麼能夠看完上卷後繼續看下卷),《linux命令行與shell腳本》(這本書主要教你使用shell腳本處理各類linux系統任務)
(2)學會「開發linux用戶程序」
這裏所說的是在linux提供的SCI庫基礎上進行編程,寫一些應用程序。下面介紹的是本人學過的幾本,都是出自同一個做者
unix高級環境編程:主要是關於如何使用linux函數庫編寫本地用戶程序
unix網絡編程(steven):主要所關於使用linux函數庫編寫跨主機網絡通訊程序
學習上面書籍過程當中可能涉及到linux的I/O操做,多進程,進程通訊等詳細內容。通常咱們在《操做系統原理》上面學的只是抽象的一些I/O操做和多進程的原理,可是上面兩本書會告訴你當使用Linux平臺的狀況下,如何使用操做系統提供的這些功能。
注:UNIX系統和linux系統的SCI在很大程度上是相同的,我推薦你學習《unix網絡編程》這本書,你不必定非得用unix系統去寫上面的程序,在linux上面也能運行這些程序,unix和linux提供了類似的SCI。
(3)底層硬件開發
我不是作這方面工做的,我以爲若是開發硬件,最起碼得學過《數字電路》《單片機》《嵌入式系統》。若是說linux涉及到底層硬件開發的書籍,我只能介紹《linux設備驅動程序》這本書,不過本人不作這方面,因此僅供參考。
(4)研究linux內核代碼
這估計是不少大牛所從事過的事情:linux是一款開源系統,你能夠下linux源代碼下來研究linux這樣一款系統是如何寫出來的。不過直接看源代碼估計對大部分人來講很挑戰他們的記憶力和閱讀能力。因此我提議LZ若是想研究LINUX內核代碼,能夠先從linux的架構開始瞭解,推薦書籍有:
《深刻Linux內核架構》《深刻理解linux內核》
nginx
最後請記住:學習一個操做系統的第一步,就是先學會怎麼使用這個系統,因此趕忙安裝一個linux發行版,不管是ubuntu仍是centOS,安裝好linux系統後,就開始在上面搗鼓命令和腳本吧,而後你就能體會到linux是一款多麼強大的系統。若是你還想對linux作更爲深刻的瞭解,在熟悉了linux的命令行使用後,能夠向內核或者編程開發進發。這是一段很長的路,祝LZ能夠堅持下去,成爲一個LINUX技術大牛。程序員