linux 學習之路

小 樓 一 夜 聽 春 雨發表於2016-01-20

很多同學接觸Linux不多,對Linux平臺的開發更是一無所知。 而現在的趨勢越來越表明,作為一個優秀的軟體開發人員,或計算機IT行業從業人員, 掌握Linux是一種很重要的謀生資源與手段。

下來我將會結合自己的幾年的個人開發經驗,及對 Linux,更是類UNIX系統,及開源軟體文化, 談談Linux的學習方法與學習中應該注意的一些事。

就如同剛才說的,很多同學以前可能連Linux是什麼都不知道,對UNIX更是一無所知。 所以我們從最基礎的講起,對於Linux及UNIX的歷史我們不做多談,直接進入入門的學習。

Linux入門是很簡單的,問題是你是否有耐心,是否愛折騰,是否不排斥重灌一類的大修。 沒折騰可以說是學不好Linux的,鳥哥說過,要真正瞭解Linux的分割槽機制,對LVM使用相當熟練, 沒有20次以上的Linux裝機經驗是積累不起來的,所以一定不要怕折騰。

由於大家之前都使用Windows,所以我也儘可能照顧這些“菜鳥”。 我的推薦,如果你第一次接觸Linux,那麼首先在虛擬機器中嘗試它。 虛擬機器我推薦Virtual Box,我並不主張使用VM,原因是VM是閉源的,並且是收費的,我不希望推動盜版。 當然如果你的Money足夠多,可以嘗試VM,但我要說的是即使是VM,不一定就一定好。

付費的軟體不一定好。

首先,Virtual Box很小巧,Windows平臺下安裝包在80MB左右,而VM動輒600MB,雖然功能強大,但資源消耗也多,何況你的需求Virtual Box完全能夠滿足。 所以,還是自己選。

如何使用虛擬機器,是你的事,這個我不教你,因為很簡單,不會的話Google或Baidu都可以, 英文好的可以直接看官方文件。 現在介紹Linux發行版的知識。

正如你所見,Linux發行版並非Linux,Linux僅是指作業系統的核心,作為科班出生的你不要讓我解釋, 我也沒時間。

我推薦的發行版如下:

  • UBUNTU 適合純菜鳥,追求穩定的官方支援,對系統穩定性要求較弱,喜歡最新應用,相對來說不太喜歡折騰的開發者。
  • Debian,相對UBUNTU難很多的發行版,突出特點是穩定與容易使用的包管理系統,缺點是企業支援不足,為社群開發驅動。
  • Arch,追逐時尚的開發者的首選,優點是包更新相當快,無縫升級,一次安裝基本可以一直運作下去,沒有如UBUNTU那樣的版本概念,說的專業點叫滾動升級,保持你的系統一定是最新的。缺點顯然易見,不穩定。同時安裝配置相對Debian再麻煩點。
  • Gentoo,相對Arch再難點,考驗使用者的綜合水平,從系統安裝到微調,核心編譯都親歷親為,是高手及黑客顯示自己技術手段,按需配置符合自己要求的系統的首選。
  • Slackware與Gentoo類似。
  • CentOS,社群維護的RedHat的復刻版本,完全使用RedHat的原始碼重新編譯生成,與RedHat的相容性在理論上來說是最好的。如果你專注於Linux伺服器,如網路管理,架站,那麼CentOS是你的選擇。
  • LFS,終極黑客顯擺工具,完全從原始碼安裝,編譯系統。安裝前你得到的只有一份文件,你要做的就是照文件你的說明,一步步,一條條命令,一個個軟體包的 去構建你的Linux,完全由你自己控制,想要什麼就是什麼。如果你做出了LFS,證明你的Linux功底已經相當不錯,如果你能拿LFS文件活學活用, 再將Linux從原始碼開始移植到嵌入式系統,我敢說中國的企業你可以混的很好。

1、Linux基礎

你得挑一個適合你的系統,然後在虛擬機器安裝它,開始使用它。 如果你想快速學會Linux,我有一個建議就是忘記圖形介面,不要想圖形介面能不能提供你問題的答案, 而是滿世界的去找,去問,如何用命令列解決你的問題。

在這個過程中,你最好能將Linux的命令掌握的不錯,起碼常用的命令得知道,同時建立了自己的知識庫, 裡面是你積累的各項知識。

2、Linux平臺的C/C++開發,同時還有Bash指令碼程式設計[JAVA]

再下個階段,你需要學習的是Linux平臺的C/C++開發,同時還有Bash指令碼程式設計,如果你對Java興趣很深還有Java。 同樣,建議你拋棄掉圖形介面的IDE,從VIM開始,為什麼是VIM,而不是Emacs, 我無意挑起編輯器大戰,但我覺得VIM適合初學者,適合手比較笨,腦袋比較慢的開發者。 Emacs的鍵位太多,太複雜,我很畏懼。然後是GCC,Make,Eclipse(Java,C++或者)。

雖然將C++列在了Eclipse中,但我並不推薦用IDE開發C++,因為這不是Linux的文化, 容易讓你忽略一些你應該注意的問題。 IDE讓你變懶,懶得跟豬一樣。如果你對程式除錯,測試工作很感興趣,GDB也得學的很好, 如果不是GDB也是必修課。這是開發的第一步,注意我並沒有提過一句Linux系統API的內容, 這個階段也不要關心這個。你要做的就是積累經驗,在Linux平臺的開發經驗。

我推薦的書如下:C語言程式設計。 C語言,白皮書當然更好。 C++推薦 C++ Primer Plus, Java我不喜歡,就不推薦了,附一個別人的書單:java 入門書籍。 工具方面推薦VIM的官方手冊,GCC中文文件,GDB中文文件,GNU開源軟體開發指導(電子書), 組合語言程式設計(讓你對庫,連結,內嵌彙編,編譯器優化選項有初步瞭解,不必深度)。

如果你這個階段過不了就不必往下做了,這是底線,最基礎的基礎,否則離開,不要霍霍Linux開發。 不專業的Linux開發者作出的程式是與Linux文化或UNIX文化相背的,程式是走不遠的, 不可能像Bash,VIM這些神品一樣。 所以做不好乾脆離開。

3、UNIX環境高階程式設計(作者英年早逝,第3版即將出版,稍等)

UNIX環境高階程式設計堪稱神作,經典中的經典。

接下來進入Linux系統程式設計,不二選擇,APUE,UNIX環境高階程式設計,一遍一遍的看, 看10遍都嫌少,如果你可以在大學將這本書翻爛,裡面的內容都實踐過,有作品,你口頭表達能力夠強, 你可以在面試時說服所有的考官。

(可能有點誇張,但APUE絕對是聖經一般的讀物,即使是Windows程式設計師也從其中汲取養分, Google創始人的案頭書籍,扎爾伯克的床頭讀物。)

這本書看完後你會對Linux系統程式設計有相當的瞭解,知道Linux與Windows平臺間開發的差異在哪? 它們的優缺點在哪?我的總結如下:做Windows平臺開發,很苦,微軟的系統API總在擴容, 想使用最新潮,最高效的功能,最適合當前流行系統的功能你必須時刻學習。 Linux不是,Linux系統的核心API就100來個,記憶力好完全可以背下來。 而且經久不變,為什麼不變,因為要同UNIX相容,符合POSIX標準。 所以Linux平臺的開發大多是專注於底層的或伺服器程式設計。

這是其優點,當然圖形是Linux的軟肋,但我站在一個開發者的角度,我無所謂,因為命令列我也可以適應, 如果有更好的圖形介面我就當作恩賜吧。另外,Windows閉源,系統做了什麼你更本不知道, 永遠被微軟牽著鼻子跑,想想如果微軟說Win8不支援QQ,那騰訊不得哭死。 而Linux完全開源,你不喜歡,可以自己改,只要你技術夠。

另外,Windows雖然使用的人多,但使用場合單一,專注與桌面。 而Linux在各個方面都有發展,尤其在雲端計算,伺服器軟體,嵌入式領域, 企業級應用上有廣大前景,而且相容性一流,由於支援POSIX可以無縫的執行在UNIX系統之上, 不管是蘋果的Mac還是IBM的AS400系列,都是完全支援的。 另外,Linux的開發環境支援也絕對是一流的,不管是C/C++,Java,Bash,Python,PHP,Javascript,。。。。。。就連 C#也支援。而微軟除Visual Stdio套件以外,都不怎麼友好,不是嗎?

如果你看完APUE的感觸有很多,希望驗證你的某些想法或經驗,推薦UNIX程式設計藝術, 世界頂級黑客將同你分享他的看法。

4、選擇方向:網路,圖形,嵌入式,裝置驅動

網路方向:伺服器軟體編寫及高效能的併發程式編寫

現在是時候做分流了。 大體上我分為四個方向:網路,圖形,嵌入式,裝置驅動。

如果選擇網路,再細分,我對其他的不是他熟悉,只說伺服器軟體編寫及高效能的併發程式編寫吧。 相對來說這是網路程式設計中技術含量最高的,也是底層的。 需要很多的經驗,看很多的書,做很多的專案。

我的看法是以下面的順序來看書:

  1. APUE再深讀 – 尤其是程式,執行緒,IPC,套接字
  2. 多核程式設計 - Pthread一定得吃透了,你很NB
  3. UNIX網路程式設計 – 卷一,卷二
  4. TCP/IP網路詳解 – 卷一 再看上面兩本書時就該看了
  5. 5.TCP/IP 網路詳解 – 卷二 我覺得看到卷二就差不多了,當然卷三看了更好,努力,爭取看了
  6. 6.Lighttpd原始碼 - 這個伺服器也很有名了
  7. 7.Nginx原始碼 – 相較於Apache,Nginx的原始碼較少,如果能看個大致,很NB。看原始碼主要是要學習裡面的套接字程式設計及併發控制,想想都激動。如果你有這些本事, 可以試著往暴雪投簡歷,為他們寫伺服器後臺,想一想全球的魔獸都執行在你的伺服器軟體上。
  8. Linux核心 TCP/IP協議棧 – 深入瞭解TCP/IP的實現

如果你還喜歡驅動程式設計,可以看看更底層的協議,如鏈路層的,寫什麼路由器,網路卡, 網路裝置的驅動及嵌入式系統軟體應該也不成問題了。

當然一般的網路公司,就算百度級別的也該毫不猶豫的僱用你。 只是看後面這些書需要時間與經驗,所以35歲以前辦到吧!跳槽到給你未來的地方!

圖形方向,我覺得圖形方向也是很有前途的,以下幾個方面。

  1. Opengl的工業及遊戲開發,國外較成熟。
  2. 影視動畫特效,如皮克斯,也是國外較成熟。
  3. GPU計算技術,可以應用在瀏覽器網頁渲染上,GPU計算資源利用上,由於開源的原因,有很多的文件程式可以參考。如果能進火狐開發,或google做瀏覽器開發,應該會很好 。

嵌入式方向:嵌入式方向沒說的,Linux很重要。

掌握多個架構,不僅X86的,ARM的,微控制器什麼的也必須得懂。 硬體不懂我預見你會死在半路上,我也想走嵌入式方向,但我覺得就學校教授嵌入式的方法, 我連學電子的那幫學生都競爭不過。 奉勸大家,一定得懂硬體再去做,如果走到嵌入式應用開發,只能祝你好運, 不要碰上像Nokia,Hp這樣的公司,否則你會很慘的。

驅動程式設計:軟體開發週期是很長的,硬體不同,很快。 每個月誕生那麼多的新硬體,如何讓他們在Linux上工作起來,這是你的工作。 由於Linux的相容性很好,如果不是太低層的驅動,基本C語言就可以搞定,系統架構的影響不大, 因為有系統支援,你可能做些許更改就可以在ARM上使用PC的硬體了, 所以做硬體驅動開發不像嵌入式,對硬體知識的要求很高。

可以從事的方向也很多,如家電啊,特別是如索尼,日立,希捷,富士康這樣的廠子,很稀缺的。

 

 

 

 

 

 

 

 

1.《Linux程式設計》- 靠它來入門,然後裝一個linux體系,練習shell(party)和linuxC,把基礎打牢;
2. 《深入理解Linux核心》和《Linux核心設計與告竣》:後者我已經粗粗看過一遍,值得細看,前者必需儘快看完;
3. 《Linux裝置驅動設計》:必買必看,適用性強;
4.《Advsome kind ofced Progri aming in Unix Envirement》:這本書貌似翻譯不給力,我有高清英文電子版,慢慢看,不焦躁;
剩下的根據須要的確其實練習吧,呵呵!
下面是他人的提倡:
先學學編輯器!vim! emhvacs 什麼的都行.
然後學 make file 檔案!只須知道一點就行!這樣就可能準備程式設計序了.
然後看看《C 程式設計發言》K&R!這樣呢!基本上就可能舉辦日常的程式設計了!趁便找本資料結構的書來看.
若是想練習UNIX/LINUX的程式設計!《APUE》萬萬典範的教材!加深一下功底!練習《UNP》的第二卷.這樣基本上體系方面的就可能掌握了.
然後再看 Douglus E. Comer 的《用 TCP/IP 舉辦網際互連》第一卷!練習一下網路的常識!再看《UNP》的第一卷!不但練習網路程式設計!對體系程式設計的一些常用的技巧就很熟識熟練了!若是繼續網路程式設計!提倡《TCP/IP舉辦網際互連》的第三卷!內裡有很多關於應用協議 telnet、ftp 等協議的程式設計.
若是想寫裝置驅動程式!您的體系程式設計的介面比如檔案、IPC 等要熟知了!再練習《LDD》
對付幾本典範教材的評價:
《The C Progri aming Lsome kind ofguage》K&R 典範的 C 發言程式設計教材!作者是 C 發言的出現者!教材形式深入淺出.固然有點老!但是必備的一本手冊!而今有光陰我還常翻翻.篇幅比力小!但是每看一遍!就有一遍的成效.另外也可用譚浩強的《C 發言程式設計》取代.
《Advsome kind ofced Progri aming in Unix Envirement》 W.Richard Stevens:也是卓殊典範的書(廢話!Stevens 的書哪有不典範的!)!固然初學者就可能看!但是事實上它是《Unix Network Progri aming》的一本輔助資料.國際的翻譯的《UNIX 環境初級程式設計》的水平不如何樣!而今有影印版!間接讀英文比讀中文來得方便.
《Unix Network Progri aming》W.Richard Stevens:第一卷講 BSD Socket 網路程式設計介面和另外一種網路程式設計介面的!不過而今日常都用 BSD Socket!這本書只須看大約一半多就可能了.第二卷沒有設計到網路的東西!主要講程式間通訊和 Posix 執行緒.看了《APUE》從此!就可能看它了!基本上體系的東西就由《APUE》和《UNP》vol2 概括了.看過《UNP》從此!您就會知道體系程式設計的絕大部門程式設計技巧!即使卷一是講網路程式設計的.國際是清華翻譯得《Unix 網路程式設計》!翻譯者得功底也比力高!翻譯地比力好.提倡還是看中文版.
《TCP/IP 詳解》一共三卷!卷一講協議!卷二講告竣!卷三講程式設計應用.我沒有如何看過.!但是聽說也很典範的!我沒有時間看卷二!未便評價.
《用 TCP/IP 舉辦網際互連》Douglus.E.Comer 一共三卷!卷一講原理!卷二講告竣!卷三講初級協議.感受
上這一套要比 Stevens 的那一套要好!就連 Stevens 也不得不招供它的第一卷卓殊典範.事實上!第一卷即使你沒有一點網路的常識!看完從此也會對網路的來龍去脈洞若觀火.第一卷中還有很多習題也設計得典範和 適用!作者自己就是一位老師!並且卷一是國外研究生的教材.習題並沒有答案!留給讀者思考!題目得答案可能讓你成為一箇中級的 Hhvacker!這些題目的答案可能象 Douglus 討取!不過唯有他只給老師卷二我沒有如何看!卷三可能作為參考手冊!其中地例子也很典範.若是您看過 Qterm 的原始碼!就會知道 Qterm 的 telnet 告竣部門大多半就是從這本書的原始碼過去的.對付網路原理的書!我推選它!而不是 Stevens 的《TCP/IP 祥解》.
《Operbying System – Design whereas well whereas Implement》這個是講操作體系的書!用 Minix做的例子.作者母語不是英文!英文看起來比力艱澀.國際翻譯的是《操作體系設計與告竣》!我沒看過中文版!翻譯者是尤晉元!他翻譯的《APUE》已經讓我消極頭頂了.讀了這本書!對操作體系的底層如何就業的就會
有一個清晰的認識.
《LinuxDevice Driver》2e!為數不多的關於Linux裝置驅動程式的好書.不過形式有些雜亂!若是您沒有一些寫驅動的閱歷!初次看會有些摸不著南北.國際翻譯的 是《Linux裝置驅動程式》第二版!第一版!第二版的譯者我都有很深的接觸!不過總體下去說!固然第二版翻譯的有些不盡人意!但是相比第一版來說已經超 出了一大截.要讀這一本書!至多應該先找一些《計算機原理》《計算機體系結構》的書來敷衍了事讀讀!至多應該對硬體和計算機的就業歷程有一些瞭解.
Linux練習的道路圖:瞭解Linux的基礎常識;掌握50個以上的常用命令;掌握.tgz、.rpm等軟體包的安設方法;練習增加外設,安設裝置驅動 程式;熟識熟練Linux檔案體系和目錄結構;掌握vi!gcc!gdb等常用工具;理解shell別名、管道、I/O重定向、輸入和輸入以及shell 指令碼程式設計。
隨著Linux應用的擴充套件許多朋儕開始接觸Linux,根據練習Windwos的閱歷往往有一些茫然的感受:不知從何處開始學起。作為一個Linux體系 管理員,我看了許多相關Linux的文件和書籍,併為練習Linux付出了許多辛苦的勤懇。當真正獲得了一份正式的Linux體系管理就業後,我特別深遠 地輿解了Linux的靈魂:任職與多使用者。Linux體系常識是卓殊廣博的,但是隻須掌握了重點常識,管理它並沒有遐想中的那麼可怕。在下面我會將作為體 系管理員的一些就業心得和總結進去的閱歷體系地先容給各人。
一、練習的目的
議決Linux的練習掌握UNIX的目的想必不消多說了,在這個網路人才身價倍增的年代,想靠技術吃飯又不想掌握網路和程式設計技術是不明智的。當一人第一次聽說Linux並擦拳抹掌的光陰,總會提出幾個?,它是什麼(Whby)?為什麼要用它(W hy)? 怎樣練習它(How)?做為關閉原始碼活動的主要組成部門,Linux的應用越來越廣大,從我們普通的文娛、練習,到商業、政府辦公,再到大範圍計算的應用。為了知足人們的需求,各種各樣的、基於Linux的應用軟體數見不鮮。為什麼要學習linux。只須齊備了LinuX的基本功,並具有了自學的能力之後,都可能議決恆久的練習將專項形式予以掌握。
二、 從命令開始從基礎開始
時常有些朋儕一接觸Linux就是希望構架網站,基礎沒有想到要先了解一下Linux的基礎。這是相當困難的。固然Linux桌面應用成長很快,但是命令 在Linux中已經有很強的生命力。Linux是一個命令列組成的操作體系!精華在命令列,豈論圖形介面成長到什麼水平這個原理是不會變的,Linux命 令有許多壯大的效用:從簡單的磁碟操作、檔案存取、到舉辦龐大的多媒體圖象和流媒體檔案的製造。這裡筆者把它們中比力首要的和使用頻次最多的命令,服從它 們在體系中的作用分紅幾個部門先容給各人,議決這些基礎命令的練習我們可能進一步理解Linux體系:
安設和登入命令:login、 shutdown、 hwoulsternbyive、 rekick out 、mount、umount 、chsh
檔案執掌命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cby、 ln
體系管理相關命令: df、 top、 free、 quota 、by、 lp、 compileeuser、 groupcompilee kill、 crontabdominwouls、 tar、 unzip、 gunzip 、lwhereast
網路操作命令:ifconfig、 ip 、ping 、 netstby 、telnet、 ftp、 route、 rlogin rcp 、finger 、mail 、nslookup
體系安寧相關命令: pbumwd 、su、 umrequest 、chgrp、 chmod、chown、chbytr、sudo、 pswho
三、 採取一本好的Linux書籍
豈論在論壇還是讀者反應中,我們看到最多的題目往往是某個老手,在安設或使用linux的歷程中遇到一個的確其實的題目就開始提問, 很多都是反覆性的題目, 乃至有不少人連基本的題目描摹都不是很顯露。這說明很多初學linux的人還沒有掌握基本功。怎樣本領急速進步掌握linux的基本功呢? 最有用的方法莫過於練習巨頭的linux工具書,工具書對付練習者而言是相當首要的。一本過錯觀念的工具書卻會讓老手整個迷途知返。聽說路線。目前國際關於linux的書籍有很多不過精品的不多,筆者熱烈提倡閱讀影印本的”owoulreilly原版linux圖書./ “,而且出版社還提供了一個卓殊好的道路圖:./guide/guide_linux.php 見圖-1。

關於書籍:
時常有人問:我想練習核心,須要什麼基礎嗎?Linus Torvwoulsds自己是這樣答覆的:你必需使用過Linux。 這個……還是有點太泛了吧,我想下面幾個基礎可能還是須要的,縱然不一定必需:
1! 關於操作體系實際的起先級的常識。不須要通讀並理解《操作體系概念》《今世操作體系》等鉅著,但總要知道分時(time-shcsome kind of be very foundd)和實時(rewouls-time)的區別是什麼,程式是個什麼東西,CPU和體系匯流排、記憶體的聯絡(很簡陋即可),等等。
2! 關於C發言。不須要已經很精明C發言,只須能闇練編寫C程式,能看懂連結串列、雜湊表等資料結構的C告竣,用過gcc編譯器,就可能了。當然,若是已經精明C發言顯著是大佔甜頭的。
3! 關於CPU的常識。這塊兒可能在練習核心歷程中補,但這樣的話你就須要看講明很詳細的書,歧後頭將會提到的《狀況剖釋》。你能否熟識熟練Intel CPU?嘗試著答覆這幾個題目來剖斷一下:1)說出的決絕門和羅網門的區別;2)說出庇護形式與實形式的區別;3)多執掌器機器上,普通的讀-改-寫回一 塊記憶體這樣的行動,linux作業系統售價。為什麼須要特殊的手段來庇護。等等。講明基於其它CPU的Linux核心的書,目前好象唯有一本 《IA64Linux核心:設計與告竣》──也還是Intel的,其它都是講明基於IA32的。
以上算是常識方面吧,若是還要再補充一條,我想就是:入手編譯過核心。
好了,我們接上去走。好多人裝上Linux之後,第一件事找到核心原始碼所在的途徑,翻開一個C程式檔案,開始嘩嘩譁翻頁,看看赫赫著名的Linux核心代 碼終究長啥樣子面目──然後封閉。這是可理解的,但卻不是練習的方法。剛開始,必需從讀書入手。至多要對核心有一個Overview之後,才有可能帶著題 目去試圖閱讀原始碼自己。 [/color:8c0c3b6f46]下面就講一下我讀過的幾本書:
1! 《Linux核心設計與告竣》,英文名LinuxKernel Development(所以有人叫它LKD),機械工業出版社,¥35! 美國Robe veryrt Love著,陳莉君譯者。 評說:
此書是當今名列前茅的入門最佳圖書。作者是為2.6核心加入了搶佔的人,對改變部門卓殊精明,而改變是整個體系的主題,是以本書是很巨頭的。這本書講明淺 近易懂,全書沒有陳列一條彙編語句,但是給出了整個Linux操作體系2.6核心的概觀,使你能議決閱讀迅速獲得一個overview。win2003 64 序列號。而且對核心中較為錯亂的部門(如下半部),它的講明是最透徹的。對沒如何深入核心的人來說,這是熱烈推選的一本書。
翻譯:翻譯水平、掌管任水平都不錯,但是印刷生計一些過錯。買了此書的朋儕可能參考我在Linux初級應用版的《Linux核心設計與告竣中文版校訂》:
forum/viewtopic.php?t=541 234
另外,此書2005年有了第二版,目前尚無中譯本面世。學會ubuntu 12.04 alpha。我就是對照著2nd-en校訂1st-cn的。
2! 《Linux核心原始碼狀況剖釋》上、下。毛德操、胡希明著,浙江大學出版社,上冊¥80!下冊¥70. 評說:
本書是基於2.4.0核心的,比力早,也沒聽說會出第二版。上冊講明記憶體管理、決絕、異常與體系呼叫、程式控制、檔案體系與保守Unix IPC;下冊講明socket、裝置驅動、SMP和指點。關於這套書的評價褒貶不一,我小我以為其深度是同類著作中最特出的。對於(轉)Linux學習路 線。本書基於Intel IA32體系,由於厚度大,很多體系上的常識都捎帶講明瞭,所以若是你想深入瞭解核心的就業機制而又不卓殊熟識熟練Intel CPU的體系佈局,本書是最適宜的。缺點是:版本較老,沒有TCP/IP協議棧部門(它講的socket只是Unix域協議的),圖表太少,不適合初學者 入門。還有就是對學生朋儕來說,可能書價偏高,這樣的話可能探求先買上冊,由於上冊是主題部門,下冊一大部門都在講的確其實PCI/ISA/USB裝置的 驅動。
翻譯:沒什麼翻譯,作者是國人,而且行文流利。自己書桌上諸多計算機典範圖書當中,這套是獨一又典範又無閱讀障礙的。
核心版好多朋儕已經把這書讀到六七遍了,linux。我很羞赧,上冊差不多讀熟了,下冊就SMP部門還看過──但這就消費了整整1年的時間,還有好多弄不 懂的。這裡趁便說明另外一個研究核心罕見的誤區:宗旨太龐大。要知道Linux核心(最新的2.6.13)bzip2緊縮之後37M,解緊縮之後 244M,基礎不是哪小我能夠吃透的。即使是核心的主題建築團隊中,恐怕也只Linus Torvwoulsds、Alsome kind of Cox、Dfervent Miller、Ingo Molnar寥寥數人會有比力整個的瞭解,其它人都是做自己特地的部門。 我自己來說,目前已經決意擯棄記憶體管理的全部(slabdominwouls層、LRU、rbtree等)、檔案體系部門、外設驅動部門,且則也沒綢繆弄 IA32以外的其它體系的部門。
3! 《深入理解Linux核心》第二版。中國電力出版社。也是陳莉君譯。此書是Linux核心黑客在推選圖書時的首選。 評說:
此書C版的converse兄送了我一本第一版,是以就沒買第二版,比力反悔。是以只就第一版說一說,第一版基於2.2!第二版2.4 。我見OwoulReilly官方主頁上說第三版的英文版將於2005年11月出版,也不知我們何時本領見到。此書圖表很多,形象地給出了關鍵資料結構的 定義,為什麼。與《狀況剖釋》相比,本書形式鬆散,不會一個題目講明動輒上百頁,有一語道破的功用,但是深度上要遜於《狀況剖釋》。
4! 其它的幾本書。市面上能見到的其它的Linux核心的圖書,象《Linux裝置驅動程式》、《Linux核心原始碼完全註釋》以及新出的《Linux核心剖釋及程式設計》等。
《Linux裝置驅動程式》第二版是基於2.4的,中文翻譯不錯,中國電力出版。這書強調入手執行,但它是講明”裝置驅動”的,不是最主題的東西,而且有些東西沒硬體的話無法執行,可能更適合驅動建築的程式設計師吧,不太適合那些For fun whereas well whereas profit的人。此書有第三版英文版,西北大學出版社影印,講明2.6的,行文流利,講明的面也比第二版更廣大,我讀過其中關於同步與互斥、記憶體分配的部門,感受很不錯。
《Linux核心原始碼完全註釋》(機械工業出版社)是同濟大學的博士生趙炯的著作,講明0.1Linux核心,我沒買也沒看,有看過的朋儕說一說。
《Linux核心剖釋及程式設計》(電子工業出版社)是剛剛出版的,國人寫的,講明2.6.11 。很多人說好,但有人說不夠體系,linux檔案系統。我沒買,不敢評說。
還有一本清華出的《Linux核心程式設計指南(第三版)》,原書應該是好書,(轉)Linux學習路線。但是翻譯、排版十分糟爛,脫字跳行,基礎沒法看,我買了一本又扔掉了。
5! 其它資源。 TLDP(TheLinuxDocument Project)有大批文件,其中不少是關於核心的,有些是在國外出版過的,象《LinuxKernel Interls》《TheLinuxKernel》《LinuxKernel Module Progri amming Guide》等,作者都是親身到場建築的人,著作較為可信。
Http://
中國Linux論壇的核心版。看看linux作業系統命令。該版是研究核心的中文Linux社群中水平最高的,有很多專家級別的牛人,熱烈推選去練習一下 (但提倡不要問太太甚簡單的題目,人家脾氣再好也會煩的^_^),它的置頂貼簡直是一個一應俱全的FAQ,精華區也有很多資料。只痛惜太過曲高和寡,人氣 不是很旺。
6! 一本不是講明Linux的書:《今世體系結構上的Unix體系:核心程式設計師的SMP和Csore技術》,百姓郵電出版社2003版,定價¥39. 本書固然不是講明Linux,但是對所有Unix核心都是適用的,適合對SMP和CPU的Cpainfulness這些組成原理常識不是很熟的朋儕,而且是很多國外牛人推選的書。中文版翻譯卓殊掌管。
還有個很首要的題目:怎樣欣賞核心原始碼。有的朋儕愛好在Windows上就業,用Source Insight;有的在Linux,用Source Naudio-videoi formbygbyor;還有特地欣賞原始碼的軟體,象lxr(LinuxCross Reference);還有用ctags/ectags/cscope等,這些都是很特出的軟體。我小我用Vim ctags欣賞(參考了核心版wheelz大俠的文件,)。
此外,前邊已經提到的一個首要的題目是:你研究核心的目的是什麼, 建築? 樂趣?若是是建築,而且是國際做建築,把kernel API熟識熟練一下就差不太多了(你也知道國際的水平有多差),歧說copy_from_user()、kmoc()函式等,kernel API在Internet上找獲得,編譯核心時也可能用DocBook生成(的確其實請參考核心原始碼包下的README檔案);若是是研究,那就折柳很 大了,須要下很大的苦功:學習。會用kmoc()絕不說明你懂得Linux核心的虛存管理子體系,正彷彿會講漢語不說明你懂中國文明一樣。鄭州SEO
說完了,發現後面講的太羅嗦了,簡化一下:
1! 入手編譯核心
2! 精讀《Linux核心設計與告竣》
3! 上核心版看置頂貼與精華區
此外就憑自己趣味採取吧。
下面是一篇沒寫完的《Linux核心模組程式設計入門》,不補寫了,將就著看吧。
woulsb . c .i amus
回覆於::35
Linux核心模組程式設計入門
看到前一天有好幾個問linux核心程式設計題目的帖子,不少是卡在了入門題目上,就摒擋一下入門的初步流程。針對2.6核心的Linux體系,須要你的機器 上已經安設了kernel-devel這個包,也就是編譯模組所必需的東西:系統官方網站。核心的標頭檔案和一些Makefile。
一,Hello World程式:
[code:1:fb . c .83fc10a]
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
#include
#include
#include
stbyic int hello_init(void)
{
printk(KERN_ALERT "Hello! The fucking crarizonay world\n");
return 0; } stbyic void hello_exit(void) { printk(KERN_ALERT "Bye! The fucking crarizonay world!\n"); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("woulsb . c .i amus ");[/code:1:fb . c .83fc10a] 2.6核心的khelp estabdominwoulslish子體系跟2.4相比有實質的改變。我們下面嘗試兩種方式編譯這個程式:
1! 你可能在本目錄下這樣寫一個Makefile
[code:1:fb . c .83fc10a]obj-m := hell.o
clesome kind of:
rm -rf *.o .*.cmd *.ko *.mod.c .tmp_versions[/code:1:fb . c .83fc10a]
然後用這樣的命令列編譯:
make -C /lib/modules/`uni ame -r`/help estabdominwoulslish M=`pwd` modules
這時ls一下,就能看到生成了很多檔案,其中hello.ko就是我們須要的核心模組。
2! 專業點兒,Makefile這樣寫:
[code:1:fb . c .83fc10a]obj-m := hello.o
KERNELBUILD := /lib/modules/`uni ame -r`/help estabdominwoulslish
default:
make -C $(KERNELBUILD) M=$(shell pwd) modules
clesome kind of:
rm -rf *.o .*.cmd *.ko *.mod.c .tmp_versions[/code:1:fb . c .83fc10a]
然後只須make一下就可能了。
拔出模組用insmod命令:
insmod ./hello.ko
這光陰各人可能會問:為什麼我的螢幕上沒有見到輸入?這個是console的日誌記載級別和你printk音信時指定的級別(本例中指定為KERN_ALERT,搜狐部落格。為次高,僅次於KERN_EMERG)決意的。豈論如何,你可能tail 或許cby看看體系日誌的末了幾行,體系日誌日常為/var/log/messyrs,或許間接用dmesg命令,肯定能看到輸入了。
二,標頭檔案題目。
C程式設計師都知道,要使用某個內部的函式,應該#include某個標頭檔案,這個標頭檔案包括了那個函式的原型(prototype)。核心的標頭檔案在 include/下,其中include/whereasm是個符號連結,指向你所用核心的的確其實的體系結構目錄,歧說我的體系是i386的,那麼 include/whereasm就指向include/whereasm-i386 。
核心程式設計中我們不能連結lib . c .庫,不能使用lib . c .庫中的函式,所以很有些煩悶。一些首要的函式,象strcpy/strcmp/snprintf等,網易部落格。kernel也為我們告竣並匯出 (export)了,而我們須要#include相關的標頭檔案,在include/linux和include/whereasm中,你須要自己探求你所 要使用的函式在哪個標頭檔案中宣告,並將其#include出去。
四 、養成在命令列下就業
一定要養成在命令列下就業的習性,要知道X-window只是運轉在命令列形式下的一個應用程式。在命令列下練習固然一開始進度較慢,但是熟識熟練後,您 異日的練習之路將是以指數增加的方式增進的。從網管員來說,命令列實際上就是規則,它總是有用的,同時也是靈敏的。即使是議決一條慢慢的調變解調器線路, 它也能專攬幾千公里以外地長途體系。
五、用Unix頭腦思考Linux
由於Linux是參照Unix的思想來設計的,理解和掌握它就必需以Unix的頭腦來舉辦,而不能以Windows頭腦。不可否定,windows在市場 上的告成很大一部門在於技術思想的獨到之處。可是這個創新是在面對小我使用者的前提下舉辦的,你知道linux。而面對著企業級的任職應用,它還是有些力所 不及。多年來在計算機操作體系領域一直是二者獨大:unix在任職器領域,Windows在小我使用者領域。由此可見,使用者需求決意了所採用的操作體系。不 論什麼原由,若是要練習Linux,那麼首先要將頭腦從Windows的"這個小河" 中拖進去,放入Unix的陸地。
六 、練習shell
對付Shell(中文稱號殼),習性Windows的讀者肯定是卓殊生疏的,由於Windows唯有一個"Shell"(若是可能說是Shell的話), 那就是Windows自己。用一句話方便理解的註腳就是,shell是使用者輸入命令與體系註腳命令之間的中介。最直觀的說法,一種Shell有一套自己的 命令。舉一個方便理解的例子,Linux的法度圭表Shel是Blung burning whereash Shel;Solaris的shell是B shell;Linux的Shell是以命令列的方式發揚進去的。讀者可能會不理解,Windows從命令列"退化"到了圖形介面,那麼Linux而今還 使用命令列豈不是一種讓步?
起初我剛剛接觸Linux時就曾有過這種想法。可是厥後發現,若是使用圖形介面,那麼分配給應用軟體的資源就少了,在價錢高貴的任職器上,能夠以較低的硬體配置告竣異樣的效用是卓殊首要的。
下面舉例說明,一臺任職器有1GB記憶體,假定其中512MB用於執掌圖形介面,若要安設一個須要784MB記憶體的資料庫軟體,dos2unix。專一的格 式就是擴張記憶體。但是若是使用命令列,體系可能只須要64MB記憶體,其它的記憶體就可能供資料庫軟體使用了。使用命令列,不但是記憶體,而且CPU及硬碟等資 源的佔用都要減省很多。所以,作為任職器使用命令列是優點而不是缺點。既然Shell有這麼多優點,就必須要練習它。
七、勤於執行
要增加自己Linux的技能,唯有議決執行來告竣了。所以,即速找一部計算機,即速安設一個Linux發行版本,然後進入英華的Linux世界。信託對付 你自己的Linux能力必定大有斬獲。此外,人腦不像計算機的硬碟一樣,除非硬碟壞掉了或許是資料被你抹掉了,否則積聚的資料將永遠而且馬上的影象在硬碟 中。在人類影象的曲線中,你必須要一直的反覆練習才會將一件事情記得比力熟。時間戳轉換。
異樣的,練習Linux也一樣,若是你無法經常練習的話,學了後頭的,後面的忘了。你對Linux命令熟識熟練後你可能開始搭建一個小的Linux網路, 這是最好的執行方法。Linux是網路的代名詞,Linux網路任職效用卓殊壯大,不論是郵件任職器、Web任職器、DNS任職器等都卓殊完好。當然你不 需搭建所有任職,可能慢慢來。須要說明的是這個Linux網路對付初學者有兩三臺計算機即可。自己多入手,不要非要等著他人幫你解決題目。
八、學會使用文件
和公有操作體系不同,各個Linux的發行版本的技術支援時間都較短,這對付Linux初學者是往往不夠的。其實當你安設了一個完整的Linux體系後其 中已經包括了一個壯大的助理副理,只是可能你還沒有發現和使用它們的技巧。支流Linux發行版都自帶卓殊詳細的文件(包括手冊頁和FAQ),從體系安設 到體系安寧!針對不同層次的人的周密鄭重文件,仔細閱讀文件後40%題目都可在此解決。查閱典範工具書和Howto,特別是Howto是全球數以萬計的 Linux、Unix的閱歷總結卓殊有參考價值通常40%的題目異樣可能解決。安設一個新的軟體時先看README!再看INSTALL然後看FAQ!末 了才入手安設!這樣遇到題目就知道為什麼。若是說明文件不看!結果出了題目再去論壇來找答案反而浪費時間。
當查詢文件時, 一定要看文件是在何種版本、何種環境及何種形態下出現的何種結果。看看ubuntu11.10 12.04。對付文件的有用性, 一時還無法在操作前就知道結論如何, 那麼對某個專題或題目,閱讀相關的多篇文章將會減省大批的時間, 還可能保證儘量"明淨"的環境,有用防止由於不同操作所變成的更多題目。操作時要仔細核對各個步驟及輸入的結果,儘量連結與文件一概。
九、在Linux論壇獲取助理副理
若是下面的措施沒有解決題目,此時你就須要Linux社群的助理副理了。須要說明的是你要有周全的思考,準備好你的題目,不要魯莽的提問,否則只會獲得到魯莽的答覆或許基礎得 不就任何答案。越發揚出在尋求助理副理前為解決題目付出的勤懇,你越能獲得實質性的助理副理。最好先搜尋一下論壇能否有您須要的文章。這樣可能獲得一舉兩得的效率。
你須要提供無誤有用的資訊。這並不是要求你簡單的把成噸的出錯程式碼或許資料完全轉儲摘錄到你的提問中。若是你有龐大而龐大的測試條件,儘量把它剪裁得越小 越好。可能你會遇到這種情況,對付一個題目會出現不同形式答覆,這時你須要議決執行來考證。另外把這個題目放在其他Linux社群哀求助理副理也是一種採 取。若是得不到答案,請不要以為我們覺得無法助理副理你。對比一下學習。有時只是看到你題目的人不知道答案云爾。這時換一個社群是不錯的採取。
十、練習專業英文
若是你想深退練習Linux!看不懂由於文件實在是太難了。寫的最好的!最整個的文件都是英語寫的!最先發布的技術資訊也都是用英語寫的。即使是非英語國度的人釋出技術文件!也都首先翻譯成英語在國際學術雜誌和網路上頒發。
議決msome kind of、info等命令,可能從線上助理副理中急速地獲得所須要的命令和操作方法。不要怯怯喬喬海量的體系助理副理,仔細閱讀幾個msome kind of或info文件就會發現,這些助理副理險些都服從穩固格式寫成一命令稱號、引數、引數說明、使用例子、參考等。當英語成為一種習性, 就會自願地查詢或訂閱網際網路上感趣味的英文質料。這樣,在不知不覺中就已經和世界同步。
十一、在社群共享你的閱歷
隨著Linux應用的擴充套件,出現了不少Linux社群。其中有一些卓殊特出的社群:水木清華、其中有一些卓殊特出的社群:(國際最高水平GNU站點)、./ (中國最大的Unix技術社群),隨著常識的一直積聚,就可能把自己入手解決一些昔人沒有遇到的題目寫出文件在網路上共享給其他讀者。這個光陰, 也就成為了一名"高手"。Linux的使用者日常都是專業人士,他們有著很好的電腦背景且興奮協助他人,Linux高手更具有促進老手的文明靈魂。
末了是一個筆者的Linux練習的道路圖(rolistingmap):對比一下為什麼要學習linux。
瞭解Linux的基礎常識,這些包括了使用者管理、群組的概念、許可權的觀念等;
掌握至多50個以上的常用命令;
掌握.tgz、.rpm等軟體包的常用安設方法

相關文章