學(xué)習(xí)linux/unix編程方法的建議,學(xué)習(xí)Linux的四個(gè)步驟
假設(shè)你是計(jì)算機(jī)科班出身,計(jì)算機(jī)系的基本課程如數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、體系結(jié)構(gòu)、編譯原理、計(jì)算機(jī)網(wǎng)絡(luò)你全修過(guò)。
我想大概可以分為4個(gè)階段,水平從低到高
從安裝使用=>linux常用命令=>linux系統(tǒng)編程=>內(nèi)核開(kāi)發(fā)閱讀內(nèi)核源碼
其中學(xué)習(xí)linux常用命令時(shí)就要學(xué)會(huì)自己編譯內(nèi)核,優(yōu)化系統(tǒng),調(diào)整參數(shù)
安裝和常用命令書(shū)太多了,找本稍微詳細(xì)點(diǎn)的就ok,其間需要學(xué)會(huì)正則表達(dá)式
系統(tǒng)編程推薦《高級(jí)unix環(huán)境編程》,黑話叫APUE
還有《unix網(wǎng)絡(luò)編程》
這時(shí)候大概還需要看資料理解elf文件格式,連接器和加載器,cmu的一本教材中文名為《深入理解計(jì)算機(jī)系統(tǒng)》比較好
內(nèi)核開(kāi)發(fā)閱讀內(nèi)核源碼階段,從寫驅(qū)動(dòng)入手逐漸深入linux內(nèi)核開(kāi)發(fā)
參考書(shū)如下《linux device drivers》,黑話叫l(wèi)dd
《linux kernel development》,黑話叫l(wèi)kd
《understading the linux kernel》,黑話叫utlk
《linux源碼情景分析》
這四本書(shū)為搞內(nèi)核的必讀書(shū)籍
***,第三階段和第四階段最重動(dòng)手,空言無(wú)益,光看書(shū)也不罩,不動(dòng)手那些東西理解不了
學(xué)習(xí)linux/unix編程方法的建議
建議學(xué)習(xí)路徑:
首先先學(xué)學(xué)編輯器,vim, emacs什么的都行。
然后學(xué)make file文件,只要知道一點(diǎn)就行,這樣就可以準(zhǔn)備編程序了。
然后看看《C程序設(shè)計(jì)語(yǔ)言》K&R,這樣呢,基本上就可以進(jìn)行一般的編程了,順便找本數(shù)據(jù)結(jié)構(gòu)的書(shū)來(lái)看。
如果想學(xué)習(xí)UNIX/LINUX的編程,《APUE》絕對(duì)經(jīng)典的教材,加深一下功底,學(xué)習(xí)《UNP》的第二卷。這樣基本上系統(tǒng)方面的就可以掌握了。
然后再看Douglus E. Comer的《用TCP/IP進(jìn)行網(wǎng)際互連》***卷,學(xué)習(xí)一下網(wǎng)絡(luò)的知識(shí),再看《UNP》的***卷,不僅學(xué)習(xí)網(wǎng)絡(luò)編程,而且對(duì)系統(tǒng)編程的一些常用的技巧就很熟悉了,如果繼續(xù)網(wǎng)絡(luò)編程,建議看《TCP/IP進(jìn)行網(wǎng)際互連》的第三卷,里面有很多關(guān)于應(yīng)用協(xié)議telnet、ftp等協(xié)議的編程。如果想寫設(shè)備驅(qū)動(dòng)程序,首先您的系統(tǒng)編程的接口比如文件、IPC等必須要熟知了,再學(xué)習(xí)《LDD》2。
對(duì)于幾本經(jīng)典教材的評(píng)價(jià):
《The C Programing Language》K&R 經(jīng)典的C語(yǔ)言程序設(shè)計(jì)教材,作者是C語(yǔ)言的***,教材內(nèi)容深入淺出。雖然有點(diǎn)老,但是必備的一本手冊(cè),現(xiàn)在有時(shí)候我還常翻翻。篇幅比較小,但是每看一遍,就有一遍的收獲。另外也可用譚浩強(qiáng)的《C語(yǔ)言程序設(shè)計(jì)》代替。
《Advanced Programing in Unix Envirement》 W.Richard Stevens:也是非常經(jīng)典的書(shū)(廢話,Stevens的書(shū)哪有不經(jīng)典的!),雖然初學(xué)者就可以看,但是事實(shí)上它是《Unix Network Programing》的一本輔助資料。國(guó)內(nèi)的翻譯的《UNIX環(huán)境高級(jí)編程》的水平不怎么樣,現(xiàn)在有影印版,直接讀英文比讀中文來(lái)得容易。
《Unix Network Programing》W.Richard Stevens:***卷講BSD Socket網(wǎng)絡(luò)編程接口和另外一種網(wǎng)絡(luò)編程接口的,不過(guò)現(xiàn)在一般都用BSD Socket,所以這本書(shū)只要看大約一半多就可以了。第二卷沒(méi)有設(shè)計(jì)到網(wǎng)絡(luò)的東西,主要講進(jìn)程間通訊和Posix線程。所以看了《APUE》以后,就可以看它了,基本上系統(tǒng)的東西就由《APUE》和《UNP》vol2概括了??催^(guò)《UNP》以后,您就會(huì)知道系統(tǒng)編程的絕大部分編程技巧,即使卷一是講網(wǎng)絡(luò)編程的。國(guó)內(nèi)是清華翻譯得《Unix網(wǎng)絡(luò)編程》,翻譯者得功底也比較高,翻譯地比較好。所以建議還是看中文版。
《TCP/IP祥解》一共三卷,卷一講協(xié)議,卷二講實(shí)現(xiàn),卷三講編程應(yīng)用。我沒(méi)有怎么看過(guò)。,但是據(jù)說(shuō)也很經(jīng)典的,因?yàn)槲覜](méi)有時(shí)間看卷二,所以不便評(píng)價(jià)。
《用TCP/IP進(jìn)行網(wǎng)際互連》Douglus.E.Comer 一共三卷,卷一講原理,卷二講實(shí)現(xiàn),卷三講高級(jí)協(xié)議。感覺(jué)上這一套要比Stevens的那一套要好,就連Stevens也不得不承認(rèn)它的***卷非常經(jīng)典。事實(shí)上,***卷即使你沒(méi)有一點(diǎn)網(wǎng)絡(luò)的知識(shí),看完以后也會(huì)對(duì)網(wǎng)絡(luò)的來(lái)龍去脈了如指掌。***卷中還有很多習(xí)題也設(shè)計(jì)得經(jīng)典和實(shí)用,因?yàn)樽髡弑旧砭褪且晃唤處?,并且卷一是?guó)外研究生的教材。習(xí)題并沒(méi)有答案,留給讀者思考,因?yàn)閱?wèn)題得答案可以讓你成為一個(gè)中級(jí)的Hacker,這些問(wèn)題的答案可以象Douglus索取,不過(guò)只有他只給教師卷二我沒(méi)有怎么看,卷三可以作為參考手冊(cè),其中地例子也很經(jīng)典。如果您看過(guò)Qterm的源代碼,就會(huì)知道Qterm的telnet 實(shí)現(xiàn)部分大多數(shù)就是從這本書(shū)的源代碼過(guò)來(lái)的。對(duì)于網(wǎng)絡(luò)原理的書(shū),我推薦它,而不是Stevens的《TCP/IP祥解》。
《Operating System - Design and Implement》這個(gè)是講操作系統(tǒng)的書(shū),用Minix做的例子。作者母語(yǔ)不是英文,所以英文看起來(lái)比較晦澀。國(guó)內(nèi)翻譯的是《操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》,我沒(méi)看過(guò)中文版,因?yàn)榉g者是尤晉元,他翻譯的《APUE》已經(jīng)讓我失望頭頂了。讀了這本書(shū),對(duì)操作系統(tǒng)的底層怎么工作的就會(huì)有一個(gè)清晰的認(rèn)識(shí)。
《Linux Device Driver》2e ,為數(shù)不多的關(guān)于Linux設(shè)備驅(qū)動(dòng)程序的好書(shū)。不過(guò)內(nèi)容有些雜亂,如果您沒(méi)有一些寫驅(qū)動(dòng)的經(jīng)驗(yàn),初次看會(huì)有些摸不著南北。國(guó)內(nèi)翻譯的是《Linux設(shè)備驅(qū)動(dòng)程序》第二版,***版,第二版的譯者我都有很深的接觸,不過(guò)總體上來(lái)說(shuō),雖然第二版翻譯的有些不盡人意,但是相比***版來(lái)說(shuō)已經(jīng)超出了一大截。要讀這一本書(shū),至少應(yīng)該先找一些《計(jì)算機(jī)原理》《計(jì)算機(jī)體系結(jié)構(gòu)》的書(shū)來(lái)馬馬虎虎讀讀,至少應(yīng)該對(duì)硬件和計(jì)算機(jī)的工作過(guò)程有一些了解。
【編輯推薦】