Linux的修煉之道:從小工到專家

前言html

 

我依然記得在2004年我剛開始使用Ubuntu 4.04的日子,做爲學生,能夠在Ubuntu網站上申請免費的安裝盤,幾天之後,一個包含CD的包裹就到了:linux

 

 

從那時候開始,我在Linux平臺上度過了不少編程時光,從Linux和Linux社區中學到了不少,我必須得說,經過學習Linux,我變成了一個更好的程序員。 ios

 

若是你有志於在計算機編程領域長久地發展,必定要學習Linux,可是到底學習什麼?怎麼學習?程序員

 

這是一份給初學者從零開始學Linux的指南。shell

 

爲何要學習Linux?編程

 

也許你據說過Linux是***的一個很酷的工具,或者Linux對開發人員更加友好, 我認爲學習Linux有三個緣由:服務器

 

1. Linux統治了服務器市場網絡

 

大多數服務器都跑Linux, 程序員尤爲是Web程序員,你的程序也會跑在Linux上,你須要在Linux上部署代碼,維護服務器。架構

 

2. 學習系統級和底層編程編程語言

 

隨着物聯網的來臨,更多的軟件涉及到底層編程,使用C/C++編程是基本要求,這種開發一般須要精通Linux技能。 

 

3. 經過Linux學習計算機的基礎知識

 

Linux是個開源項目,全世界成千上萬的人在維護它,有不少關於Linux內部知識的資源和優秀書籍,對學習操做系統有極大幫助。 

 

Linux學習指南

 

對Linux的學習分爲幾個層次:

1. 平常使用

2. 在Linux上進行應用開發,操做和維護

3. 系統級開發

4. 內核開發

 

很明顯,須要一層層地學習,越往下越難。

 

碼農翻身注:

對於普通程序員來講,作到第二層就差很少了。

對於想成爲某個領域專家的程序員,須要達到第三層。

最後一層可能只有少數人,他們多是自由職業者,***,還有很多是大公司的員工。

 

在開始有趣的旅程以前,先來推薦一本Linus Torvalds的自傳:

 

 

平常使用

 

這包括:

  • 如何login , logout 

  • 如何聯網

  • 如何打開命令行窗口

  • 如何使用命令行安裝/卸載軟件

  • 如何編輯文本文件

  • 如何建立,移動,刪除文件

  • 如何查看壓縮文件,提取內容。

 

這個階段最難的部分就是從圖形界面轉向命令行。個人建議是就像學游泳那樣,把本身扔到水裏。不入水永遠都學不會游泳。

 

 

因此,必定要在你的PC上安裝一個Linux。你可使用多系統,可是不要嘗試虛擬機,由於你很容易就會放棄Linux。

 

到底使用哪一個版本的Linux呢?如今可能有十個常見的版本,選擇最主流的就好,好比Ubuntu, CentOS等。他們直接的主要區別就是GUI和軟件包管理方式。

 

 

Linux上的應用開發

 

Linux上有各類各樣的應用開發,例如Web應用,桌面GUI應用,命令行等等。 

 

你可能須要學習Web開發,C/C++/Python或者其餘編程語言。

 

在Linux上作開發和在Windows上的體驗不一樣,這裏一般沒有一個強大的IDE。大部分時候,你的工具鏈是一系列的小工具,你須要在shell中把他們「連」在一塊兒。

 

 

你須要學習的是:

  • 在一個編輯器中寫代碼, 常見的編輯器是Vim/Emacs/VSCode

  • 如何編譯你的程序

  • 如何從命令行啓動你的程序

  • 使用調試器來尋找bug

 

學習一些Shell腳本編程必不可少, 至少你得學到能看懂常見Shell的水平。 

 

如今不少程序員更喜歡Python/Ruby, 可是仍然有不少以前開發的shell腳本須要維護。

 

你須要創建屬於你本身的Linux開發環境。把配置文件都記錄下來(好比使用Git)。若是你的開發環境搞得很好,編程的效率會有五倍提高。

 

 

《Linux Bible》 and 《Linux命令行大全》會對命令行和開發環境有個很是好的介紹。

 

碼農翻身注:在國內,天然是《鳥哥的Linux私房菜》了。

 

在這一階段花費的學習時間比較長,要保持耐心。 

 

系統級開發

 

若是你的目標是開發那些「底層」的軟件,好比存儲程序,網絡程序,那必需要進入這一層次。 

 

系統級編程和應用層編程大不相同,主要涉及操做系統和網絡的東西。

 

你須要學習那些Linux內核對外提供的接口,因爲歷史和性能的緣由,大部分都是C語言的。 

 

使用GDB來調試程序也是必備的技能,你能夠參考《Debuging with GDB》,Valgrind 是另一個有用的內存檢查工具。

 

 

《Linux 系統編程》,《Linux系統編程手冊》都是很是好的書。

 

網絡是系統編程的一個重要編程領域,《Unix網絡編程》是你最好的選擇。

 

能走到這個階段但是不簡單,只有不多程序員有使用C/C++編程的能力,現代的程序員通常使用更加高級的編程語言例如Python, Ruby ,Java。 

 

技術潮起潮落,可是基礎老是不變,系統編程的核心知識能提高你的技能,擴展你的設計能力

 

內核開發

 

成爲內核開發人員,那要求但是至關高,能走到這一步,你將是一位受人景仰的英雄人物。 在這個時候,你應該已經學過操做系統的課程了。

 

內核包含不少子模塊:內存管理,進程調度,虛擬內存,文件系統,設備管理等。還有不少輔助開發的命令:readelf, nm, ipcs, iostat, objdump, free, chrt, pmap, uptime, top, pidstat, etc.

 

 

Robot Love寫的《Linux Kernel Development》是講述內核開發最好的入門書, 它會給你提供一個很好的內核概覽。 

 

中文版名稱是《Linux 內核設計與實現》,由陳莉君教授翻譯。

 

還有一些內核開發的好書:

《現代操做系統》

《深刻理解LINUX內核》

《深刻Linux內核架構》

 

切記,Linux內核開發的領域太多,初學者不可能同時涉及全部領域。你的學習策略應該是:

 

1. 獲取Linux內核的概覽。 

 

一個好方法就是讀《Linux 內核設計與實現》,或者去讀一下Linux早期版本的源碼,由於代碼要少不少,這裏有不少早期的版本:https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/old-versions/

大約兩週的時間就能夠完成。

 

碼農翻身注:兩週的時間過短了!

 

MIT開發的教學操做系統xv6也是一個不錯的選擇:https://pdos.csail.mit.edu/6.828/2012/xv6.html

 

2 專一在特定子模塊 

 

選一個你最感興趣的模塊,試圖理解它的設計和細節,參與內核開發的社區,閱讀相關的文檔,加入Linux的mail list;查看別人的補丁,提交你的補丁。 

 

Linux內核社區有本身的協做風格,你須要學習這些規則。

 

你的第一個被接受的補丁,將會是你的一個里程碑,當你在一個領域內有了足夠的知識和技能後,切換到別的領域會變的簡單。

 

成爲內核開發的大師須要花費不少年時間,快樂地編程吧!

相關文章
相關標籤/搜索