寫1下最近個人的linux學習線路,學完后再好好參考其他人的:
1.《Linux程序設(shè)計》- 靠它來入門,然后裝1個linux系統(tǒng),學習shell(bash)和linux C,把基礎(chǔ)打牢;
2. 《深入理解Linux內(nèi)核》和《Linux內(nèi)核設(shè)計與實現(xiàn)》:后者我已粗粗看過1遍,值得細看,前者必須盡快看完;
3. 《Linux裝備驅(qū)動設(shè)計》:必買必看,實用性強;
4.《Advanced Programing in Unix Envirement》:這本書貌似翻譯不給力,我有高清英文電子版,漸漸看,不著急;
剩下的根據(jù)需要具體學習吧,呵呵!
先學學編輯器,vim, emacs 甚么的都行.
然后學 make file 文件,只要知道1點就行,這樣就能夠準備編程序了.
然后看看《C 程序設(shè)計語言》K&R,這樣呢,基本上就能夠進行1般的編程了,順便找本數(shù)據(jù)結(jié)構(gòu)的書來看.
如果想學習 UNIX/LINUX 的編程,《APUE》絕對經(jīng)典的教材,加深1下功底,學習《UNP》的第2卷.這樣基本上系統(tǒng)方面的就能夠掌握了.
然后再看 Douglus E. Comer 的《用 TCP/IP 進行網(wǎng)際互連》第1卷,學習1下網(wǎng)絡(luò)的知識,
再看《UNP》的第1卷,不但學習網(wǎng)絡(luò)編程,對系統(tǒng)編程的1些經(jīng)常使用的技能就很熟習了,
如果繼續(xù)網(wǎng)絡(luò)編程,建議《TCP/IP進行網(wǎng)際互連》的第3卷,里面有很多關(guān)于利用協(xié)議 telnet、ftp 等協(xié)議的編程.
如果想寫裝備驅(qū)動程序,您的系統(tǒng)編程的接口比如文件、IPC 等要熟知了,再學習《LDD》
《The C Programing Language》K&R 經(jīng)典的 C 語言程序設(shè)計教材,作者是 C 語言的發(fā)明者,教材內(nèi)容深入淺出.雖然有點老,但是必備的1本手冊,現(xiàn)在有時候我還常翻翻.篇幅比較小,但是每看1遍,就有1遍的收獲.另外也可用譚浩強的《C 語言程序設(shè)計》代替.
《Advanced Programing in Unix Envirement》 W.Richard Stevens:也是非常經(jīng)典的書(空話,Stevens 的書哪有不經(jīng)典的!),雖然初學者就能夠看,但是事實上它是《Unix Network Programing》的1本輔助資料.國內(nèi)的翻譯的《UNIX 環(huán)境高級編程》的水平不怎樣樣,現(xiàn)在有影印版,直接讀英文比讀中文來得容易.
**《Unix Network Programing》**W.Richard Stevens:第1卷講 BSD Socket 網(wǎng)絡(luò)編程接口和另外1種網(wǎng)絡(luò)編程接口的,不過現(xiàn)在1般都用 BSD Socket,這本書只要看大約1半多就能夠了.第2卷沒有設(shè)計到網(wǎng)絡(luò)的東西,主要講進程間通訊和 Posix 線程.看了《APUE》以后,就能夠看它了,基本上系統(tǒng)的東西就由《APUE》和《UNP》vol2 概括了.看過《UNP》以后,您就會知道系統(tǒng)編程的絕大部份編程技能,即便卷1是講網(wǎng)絡(luò)編程的.國內(nèi)是清華翻譯得《Unix 網(wǎng)絡(luò)編程》,翻譯者得功底也比較高,翻譯地比較好.建議還是看中文版.
《TCP/IP 詳解》1共3卷,卷1講協(xié)議,卷2講實現(xiàn),卷3講編程利用.我沒有怎樣看過.,但是聽說也很經(jīng)典的,我沒有時間看卷2,不便評價.
**《用 TCP/IP 進行網(wǎng)際互連》**Douglus.E.Comer 1共3卷,卷1講原理,卷2講實現(xiàn),卷3講高級協(xié)議.感覺
上這1套要比 Stevens 的那1套要好,就連 Stevens 也不能不承認它的第1卷非常經(jīng)典.事實上,第1卷即便你沒有1點網(wǎng)絡(luò)的知識,看完以后也會對網(wǎng)絡(luò)的來龍去脈了如指掌.第1卷中還有很多習題也設(shè)計得經(jīng)典和實用,作者本身就是1位教師,并且卷1是國外研究生的教材.習題并沒有答案,留給讀者思考,問題得答案可讓你成為1個中級的 Hacker,這些問題的答案可以象 Douglus 索取,不過只有他只給教師卷2我沒有怎樣看,卷3可以作為參考手冊,其中地例子也很經(jīng)典.如果您看過 Qterm 的源代碼,就會知道 Qterm 的 telnet 實現(xiàn)部份大多數(shù)就是從這本書的源代碼過來的.對網(wǎng)絡(luò)原理的書,我推薦它,而不是 Stevens 的《TCP/IP 祥解》.
《Operating System - Design and Implement》這個是講操作系統(tǒng)的書,用 Minix做的例子.作者母語不是英文,英文看起來比較晦澀.國內(nèi)翻譯的是《操作系統(tǒng)設(shè)計與實現(xiàn)》,我沒看過中文版,翻譯者是尤晉元,他翻譯的《APUE》已讓我失望頭頂了.讀了這本書,對操作系統(tǒng)的底層怎樣工作的就會有1個清晰的認識.
**《Linux Device Driver》**2e,為數(shù)不多的關(guān)于Linux裝備驅(qū)動程序的好書.不過內(nèi)容有些雜亂,如果您沒有1些寫驅(qū)動的經(jīng)驗,初次看會有些摸不著南北.國內(nèi)翻譯的是《Linux裝備驅(qū)動程序》第2版,初版,第2版的譯者我都有很深的接觸,不過整體上來講,雖然第2版翻譯的有些不盡人意,但是相比初版來講已超越了1大截.要讀這1本書,最少應當先找1些《計算機原理》《計算機體系結(jié)構(gòu)》的書來馬馬虎虎讀讀,最少應當對硬件和計算機的工作進程有1些了解.
了解Linux 的基礎(chǔ)知識;
掌握50個以上的經(jīng)常使用命令;
掌握.tgz、.rpm等軟件包的安裝方法;
學習添加外設(shè),安裝裝備驅(qū)動程序;
熟習Linux文件系統(tǒng)和目錄結(jié)構(gòu);
掌握vi,gcc,gdb等經(jīng)常使用工具;
理解shell別名、管道、I/O重定向、輸入和輸出和shell腳本編程。
隨著Linux利用的擴大許多朋友開始接觸Linux,根據(jù)學習Windwos的經(jīng)驗常常有1些茫然的感覺:
不知從何處開始學起。作為1個Linux系統(tǒng)管理員,我看了許多有關(guān)Linux的文檔和書籍,并為學習Linux付出了許多艱苦的努力。
認真正取得了1份正式的Linux系統(tǒng)管理工作后,我更加深入地理解了Linux的靈魂:服務與多用戶。
Linux系統(tǒng)知識是非常廣博的,但是只要掌握了重點知識,管理它并沒有想象中的那末可怕。
在下面我會將作為系統(tǒng)管理員的1些工作心得和總結(jié)出來的經(jīng)驗系統(tǒng)地介紹給大家。
通過Linux的學習掌握UNIX的目的想必不用多說了,在這個網(wǎng)絡(luò)人材身價倍增的年代,想靠技術(shù)吃飯又不想掌握網(wǎng)絡(luò)和編程技術(shù)是不明智的。當1人第1次聽說Linux并躍躍欲試的時候,總會提出幾個?,它是甚么(What)? 為何要用它(W hy)? 怎樣學習它(How)?做為開放源碼運動的主要組成部份,Linux的利用愈來愈廣泛,從我們平時的文娛、學習,到商業(yè)、政府辦公,再到大范圍計算的利用。為了滿足人們的需求,各種各樣的、基于Linux的利用軟件層見疊出。只要具有了LinuX的基本功,并具有了自學的能力以后,都可以通太長期的學習將專項內(nèi)容予以掌握。
常常有些朋友1接觸Linux 就是希望構(gòu)架網(wǎng)站,根本沒有想到要先了解1下Linux 的基礎(chǔ)。這是相當困難的。雖然Linux桌面利用發(fā)展很快,但是命令在Linux中仍然有很強的生命力。Linux是1個命令行組成的操作系統(tǒng),精華在命令行,不管圖形界面發(fā)展到甚么水平這個原理是不會變的,Linux命令有許多強大的功能:從簡單的磁盤操作、文件存取、到進行復雜的多媒體圖像和流媒體文件的制作。這里筆者把它們中比較重要的和使用頻率最多的命令,依照它們在系統(tǒng)中的作用分成幾個部份介紹給大家,通過這些基礎(chǔ)命令的學習我們可以進1步理解Linux系統(tǒng):
l 安裝和登錄命令:login、 shutdown、 halt、 reboot 、mount、umount 、chsh
l 文件處理命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln
l 系統(tǒng)管理相干命令: df、 top、 free、 quota 、at、 lp、 adduser、 groupadd kill、 crontab、 tar、 unzip、 gunzip 、last
l 網(wǎng)絡(luò)操作命令:ifconfig、 ip 、ping 、 netstat 、telnet、 ftp、 route、 rlogin rcp 、finger 、mail 、nslookup
l 系統(tǒng)安全相干命令: passwd 、su、 umask 、chgrp、 chmod、chown、chattr、sudo、 pswho
不管在論壇還是讀者反饋中,我們看到最多的問題常常是某個新手,在安裝或使用linux的進程中遇到1個具體的問題就開始發(fā)問, 很多都是重復性的問題, 乃至有很多人連基本的問題描寫都不是很清楚。這說明很多初學linux的人還沒有掌握基本功。怎樣才能快速提高掌握linux的基本功呢? 最有效的方法莫過于學習權(quán)威的linux工具書,工具書對學習者而言是相當重要的。1本毛病觀念的工具書卻會讓新手全部誤入歧途。目前國內(nèi)關(guān)于linux的書籍有很多不過精品的不多,筆者強烈建議瀏覽影印本的“o’reilly原版linux圖書http://www.oreilly.com.cn/ ”,而且出版社還提供了1個非常好的線路圖:http://www.oreilly.com.cn/guide/guide_linux.php 見圖-1。
常常有人問:我想學習內(nèi)核,需要甚么基礎(chǔ)嗎?Linus Torvalds本人是這樣回答的:你必須使用過Linux。 這個……還是有點太泛了吧,我想下面幾個基礎(chǔ)可能還是需要的,雖然不1定必須:
1, 關(guān)于操作系統(tǒng)理論的最低級的知識。不需要通讀并理解《操作系統(tǒng)概念》《現(xiàn)代操作系統(tǒng)》等巨著,但總要知道分時(time-shared)和實時(real-time)的區(qū)分是甚么,進程是個甚么東西,CPU和系統(tǒng)總線、內(nèi)存的關(guān)系(很粗略便可),等等。
2, 關(guān)于C語言。不需要已很精通C語言,只要能熟練編寫C程序,能看懂鏈表、散列表等數(shù)據(jù)結(jié)構(gòu)的C實現(xiàn),用過gcc編譯器,就能夠了。固然,如果已精通C語言明顯是大占便宜的。
3, 關(guān)于CPU的知識。這塊兒可以在學習內(nèi)核進程中補,但這樣的話你就需要看講授很詳細的書,比方后面將會提到的《情形分析》。你是不是熟習Intel 80386 CPU?嘗試著回答這幾個問題來判斷1下:1)說出80386的中斷門和圈套門的區(qū)分;2)說出保護模式與實模式的區(qū)分;3)多處理器機器上,普通的讀-改-寫回1塊內(nèi)存這樣的動作,為何需要特殊的手段來保護。等等。講授基于其它CPU的Linux內(nèi)核的書,目前好象只有1本《IA64Linux內(nèi)核:設(shè)計與實現(xiàn)》──也還是Intel的,其它都是講授基于IA32的。
以上算是知識方面吧,如果還要再補充1條,我想就是:動手編譯過內(nèi)核。
好了,我們接下來走。好多人裝上Linux以后,第1件事找到內(nèi)核源碼所在的路徑,打開1個C程敘文件,開始嘩嘩嘩翻頁,看看大名鼎鼎的Linux內(nèi)核代碼到底長啥樣子──然后關(guān)閉。這是可理解的,但卻不是學習的方法。剛開始,必須從讀書入手。最少要對內(nèi)核有1個Overview以后,才有可能帶著問題去試圖瀏覽源代碼本身。 [/color:8c0c3b6f46]下面就講1下我讀過的幾本書:
1, 《Linux內(nèi)核設(shè)計與實現(xiàn)》,英文名Linux Kernel Development(所以有人叫它LKD),機械工業(yè)出版社,¥35, 美國Robert Love著,陳莉君譯者。 評說:
此書是現(xiàn)今數(shù)一數(shù)二的入門最好圖書。作者是為2.6內(nèi)核加入了搶占的人,對調(diào)度部份非常精通,而調(diào)度是全部系統(tǒng)的核心,因此本書是很權(quán)威的。這本書講授淺顯易懂,全書沒有羅列1條匯編語句,但是給出了全部Linux操作系統(tǒng)2.6內(nèi)核的概觀,使你能通過瀏覽迅速取得1個overview。而且對內(nèi)核中較為混亂的部份(以下半部),它的講授是最透徹的。對沒怎樣深入內(nèi)核的人來講,這是強烈推薦的1本書。
翻譯:翻譯水平、負責任程度都不錯,但是印刷存在1些毛病。買了此書的朋友可以參考我在Linux高級利用版的《Linux內(nèi)核設(shè)計與實現(xiàn)中文版勘誤》:
http://bbs.chinaunix.net/forum/viewtopic.php?t=541234
另外,此書2005年有了第2版,目前還沒有中譯本面世。我就是對比著2nd-en勘誤1st-cn的。
2, 《Linux內(nèi)核源代碼情形分析》上、下。毛德操、胡希明著,浙江大學出版社,上冊¥80,下冊¥70. 評說:
本書是基于2.4.0內(nèi)核的,比較早,也沒聽說會出第2版。上冊講授內(nèi)存管理、中斷、異常與系統(tǒng)調(diào)用、進程控制、文件系統(tǒng)與傳統(tǒng)Unix IPC;下冊講授socket、裝備驅(qū)動、SMP和引導。關(guān)于這套書的評價褒貶不1,我個人認為其深度是同類著作中最優(yōu)秀的。本書基于Intel IA32體系,由于厚度大,很多體系上的知識都捎帶講授了,所以如果你想深入了解內(nèi)核的工作機制而又不非常熟習Intel CPU的體系構(gòu)造,本書是最適合的。缺點是:版本較老,沒有TCP/IP協(xié)議棧部份(它講的socket只是Unix域協(xié)議的),圖表太少,不合適初學者入門。還有就是對學生朋友來講,可能書價偏高,這樣的話可以斟酌先買上冊,由于上冊是核心部份,下冊1大部份都在講具體PCI/ISA/USB裝備的驅(qū)動。
翻譯:沒甚么翻譯,作者是國人,而且行文流暢。本人書桌上諸多計算機經(jīng)典圖書當中,這套是唯1又經(jīng)典又無瀏覽障礙的。
www.linuxforum.net內(nèi)核版好多朋友已把這書讀到67遍了,我很慚愧,上冊差不多讀熟了,下冊就SMP部份還看過──但這就花費了整整1年的時間,還有好多弄不懂的。這里順便說明另外1個研究內(nèi)核常見的誤區(qū):目標太龐大。要知道Linux內(nèi)核(最新的2.6.13)bzip2緊縮以后37M,解緊縮以后244M,根本不是哪一個人能夠吃透的。即便是內(nèi)核的核心開發(fā)團隊中,恐怕也只Linus Torvalds、Alan Cox、David Miller、Ingo Molnar寥寥數(shù)人會有比較全面的了解,其它人都是做自己專門的部份。 我自己來講,目前已決定放棄內(nèi)存管理的全部(slab層、LRU、rbtree等)、文件系統(tǒng)部份、外設(shè)驅(qū)動部份,暫時也沒打算弄IA32之外的其它體系的部份。
3, 《深入理解Linux內(nèi)核》第2版。中國電力出版社。也是陳莉君譯。此書是Linux內(nèi)核黑客在推薦圖書時的首選。 評說:
此書C版的converse兄送了我1本初版,因此就沒買第2版,比較后悔。因此只就初版說1說,初版基于2.2,第2版2.4 。我見O’Reilly官方主頁上說第3版的英文版將于2005年11月出版,也不知我們什么時候才能見到。此書圖表很多,形象地給出了關(guān)鍵數(shù)據(jù)結(jié)構(gòu)的定義,與《情形分析》相比,本書內(nèi)容緊湊,不會1個問題講授動輒上百頁,有提綱挈領(lǐng)的功用,但是深度上要遜于《情形分析》。
4, 其它的幾本書。市面上能見到的其它的Linux內(nèi)核的圖書,象《Linux裝備驅(qū)動程序》、《Linux內(nèi)核源代碼完全注釋》和新出的《Linux內(nèi)核分析及編程》等。
《Linux裝備驅(qū)動程序》第2版是基于2.4的,中文翻譯不錯,中國電力出版。這書強調(diào)動手實踐,但它是講授“裝備驅(qū)動”的,不是最核心的東西,而且有些東西沒硬件的話沒法實踐,可能更合適驅(qū)動開發(fā)的程序員吧,不太合適那些For fun and profit的人。此書有第3版英文版,東南京大學學出版社影印,講授2.6的,行文流暢,講授的面也比第2版更廣泛,我讀過其中關(guān)于同步與互斥、內(nèi)存分配的部份,感覺很不錯。
《Linux內(nèi)核源代碼完全注釋》(機械工業(yè)出版社)是同濟大學的博士生趙炯的著作,講授0.1Linux內(nèi)核,我沒買也沒看,有看過的朋友說1說。
《Linux內(nèi)核分析及編程》(電子工業(yè)出版社)是剛剛出版的,國人寫的,講授2.6.11 。很多人說好,但有人說不夠系統(tǒng),我沒買,不敢評說。
還有1本清華出的《Linux內(nèi)核編程指南(第3版)》,原書應當是好書,但是翻譯、排版10分糟爛,脫字跳行,根本沒法看,我買了1本又扔掉了。
5, 其它資源。 TLDP(The Linux Documentation Project)有大量文檔,其中很多是關(guān)于內(nèi)核的,有些是在國外出版過的,象《Linux Kernel Interls》《The Linux Kernel》《Linux Kernel Module Programming Guide》等,作者都是親身參加開發(fā)的人,著作較為可信。
Http://www.linuxforum.net
中國Linux論壇的內(nèi)核版。該版是研究內(nèi)核的中文Linux社區(qū)中水平最高的,有很多專家級別的牛人,強烈推薦去學習1下(但建議不要問太過分簡單的問題,人家脾氣再好也會煩的^_^),它的置頂貼簡直是1個包羅萬象的FAQ,精華區(qū)也有很多資料。只惋惜太過曲高和寡,人氣不是很旺。
6, 1本不是講授Linux的書:《現(xiàn)代體系結(jié)構(gòu)上的Unix系統(tǒng):內(nèi)核程序員的SMP和Caching技術(shù)》,人民郵電出版社2003版,定價¥39. 本書雖然不是講授Linux,但是對所有Unix內(nèi)核都是適用的,合適對SMP和CPU的Cache這些組成原理知識不是很熟的朋友,而且是很多國外牛人推薦的書。中文版翻譯非常負責。
還有個很重要的問題:怎樣閱讀內(nèi)核源代碼。有的朋友喜歡在Windows上工作,用Source Insight;有的在Linux,用Source Navigator;還有專門閱讀源代碼的軟件,象lxr(Linux Cross Reference);還有用ctags/ectags/cscope等,這些都是很優(yōu)秀的軟件。我個人用Vim ctags閱讀(參考了www.linuxforum.net內(nèi)核版wheelz大俠的文檔,)。
另外,前邊已提到的1個重要的問題是:你研究內(nèi)核的目的是甚么, 開發(fā)? 樂趣?如果是開發(fā),而且是國內(nèi)做開發(fā),把kernel API熟習1下就差不太多了(你也知道國內(nèi)的水平有多差),比方說copy_from_user()、kmalloc()函數(shù)等,kernel API在Internet上找得到,編譯內(nèi)核時也能夠用DocBook生成(具體請參考內(nèi)核源代碼包下的README文件);如果是研究,那就差別很大了,需要下很大的苦功:會用kmalloc()絕不說明你曉得Linux內(nèi)核的虛存管理子系統(tǒng),正猶如會講漢語不說明你懂中國文化1樣。
說完了,發(fā)現(xiàn)前面講的太羅嗦了,簡化1下:
1, 動手編譯內(nèi)核
2, 精讀《Linux內(nèi)核設(shè)計與實現(xiàn)》
3, 上www.linuxforum.net內(nèi)核版看置頂貼與精華區(qū)
另外就憑自己興趣選擇吧。
下面是1篇沒寫完的《Linux內(nèi)核模塊編程入門》,不補寫了,將就著看吧。
看到昨天有好幾個問linux內(nèi)核編程問題的帖子,很多是卡在了入門問題上,就整理1下入門的初步流程。針對2.6內(nèi)核的Linux系統(tǒng),需要你的機器上已安裝了kernel-devel這個包,也就是編譯模塊所必須的東西:內(nèi)核的頭文件和1些Makefile。
1,Hello World程序:
[code:1:fbc83fc10a]/*file: hello.c*/
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
#include
#include
#include
static int hello_init(void)
{
printk(KERN_ALERT "Hello, The fucking crazy world/n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Bye, The fucking crazy world!/n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("albcamus ");[/code:1:fbc83fc10a]
2.6內(nèi)核的kbuild子系統(tǒng)跟2.4相比有本質(zhì)的改變。我們下面嘗試兩種方式編譯這個程序:
1, 你可以在本目錄下這樣寫1個Makefile
[code:1:fbc83fc10a]obj-m := hell.o
clean:
rm -rf *.o .*.cmd *.ko *.mod.c .tmp_versions[/code:1:fbc83fc10a]
然后用這樣的命令行編譯:
make -C /lib/modules/`uname -r`/build M=`pwd` modules
這時候ls1下,就可以看到生成了很多文件,其中hello.ko就是我們需要的內(nèi)核模塊。
2, 專業(yè)點兒,Makefile這樣寫:
[code:1:fbc83fc10a]obj-m := hello.o
KERNELBUILD := /lib/modules/`uname -r`/build
default:
make -C $(KERNELBUILD) M=$(shell pwd) modules
clean:
rm -rf *.o .*.cmd *.ko *.mod.c .tmp_versions[/code:1:fbc83fc10a]
然后只要make1下就能夠了。
插入模塊用insmod命令:
insmod ./hello.ko
這時候候大家可能會問:為何我的屏幕上沒有見到輸出?這個是console的日志記錄級別和你printk消息時指定的級別(本例中指定為KERN_ALERT,為次高,僅次于KERN_EMERG)決定的。不管如何,你可以tail 或cat看看系統(tǒng)日志的最后幾行,系統(tǒng)日志1般為/var/log/messages,或直接用dmesg命令,肯定能看到輸出了。
C程序員都知道,要使用某個外部的函數(shù),應當#include某個頭文件,這個頭文件包括了那個函數(shù)的原型(prototype)。內(nèi)核的頭文件在include/下,其中include/asm是個符號鏈接,指向你所用內(nèi)核的具體的體系結(jié)構(gòu)目錄,比方說我的系統(tǒng)是i386的,那末include/asm就指向include/asm-i386 。
內(nèi)核編程中我們不能鏈接libc庫,不能使用libc庫中的函數(shù),所以很有些麻煩。1些重要的函數(shù),象strcpy/strcmp/snprintf等,kernel也為我們實現(xiàn)并導出(export)了,而我們需要#include相干的頭文件,在include/linux和include/asm中,你需要自己尋覓你所要使用的函數(shù)在哪一個頭文件中聲明,并將其#include進來。
1定要養(yǎng)成在命令行下工作的習慣,要知道X-window只是運行在命令行模式下的1個利用程序。在命令行下學習雖然1開始進度較慢,但是熟習后,您未來的學習之路將是以指數(shù)增加的方式增長的。從網(wǎng)管員來講,命令行實際上就是規(guī)則,它總是有效的,同時也是靈活的。即便是通過1條緩慢的調(diào)制解調(diào)器線路,它也能操縱幾千千米之外地遠程系統(tǒng)。
由于Linux是參照Unix的思想來設(shè)計的,理解和掌握它就必須以Unix的思惟來進行,而不能以Windows思惟。不可否認,windows在市場上的成功很大1部份在于技術(shù)思想的獨到的地方。可是這個創(chuàng)新是在面對個人用戶的條件下進行的,而面對著企業(yè)級的服務利用,它還是有些力不從心。多年來在計算機操作系統(tǒng)領(lǐng)域1直是2者獨大:unix在服務器領(lǐng)域,Windows在個人用戶領(lǐng)域。因而可知,用戶需求決定了所采取的操作系統(tǒng)。不管甚么緣由,如果要學習Linux,那末首先要將思惟從Windows的“這個小河” 中拖出來,放入Unix的海洋。
對Shell(中文名稱殼),習慣Windows的讀者肯定是非常陌生的,由于Windows只有1個“Shell”(如果可以說是Shell的話),那就是Windows自己。用1句話容易理解的解釋就是,shell是用戶輸入命令與系統(tǒng)解釋命令之間的中介。最直觀的說法,1種Shell有1套自己的命令。舉1個容易理解的例子,Linux的標準Shel是Bash Shel;Solaris的shell是B shell;Linux的Shell是以命令行的方式表現(xiàn)出來的。讀者可能會不理解,Windows從命令行“進化”到了圖形界面,那末Linux現(xiàn)在還使用命令行豈不是1種倒退?
當初我剛剛接觸Linux時就曾有過這類想法。可是后來發(fā)現(xiàn),如果使用圖形界面,那末分配給利用軟件的資源就少了,在價格昂貴的服務器上,能夠以較低的硬件配置實現(xiàn)一樣的功能是非常重要的。
下面舉例說明,1臺服務器有1GB內(nèi)存,假定其中512MB用于處理圖形界面,若要安裝1個需要784MB內(nèi)存的數(shù)據(jù)庫軟件,唯一的辦法就是擴大內(nèi)存。但是如果使用命令行,系統(tǒng)可能只需要64MB內(nèi)存,其它的內(nèi)存就能夠供數(shù)據(jù)庫軟件使用了。使用命令行,不但是內(nèi)存,而且CPU及硬盤等資源的占用都要節(jié)省很多。所以,作為服務器使用命令行是優(yōu)點而不是缺點。既然Shell有這么多優(yōu)點,就必須要學習它。
要增加自己Linux 的技能,只有通過實踐來實現(xiàn)了。所以,趕快找1部計算機,趕快安裝1個 Linux 發(fā)行版本,然落后入精彩的Linux世界。相信對你自己的 Linux 能力必定大有斬獲。另外,人腦不像計算機的硬盤1樣,除非硬盤壞掉了或是資料被你抹掉了,否則貯存的資料將永久而且立刻的記憶在硬盤中。在人類記憶的曲線中,你必須要不斷的重復練習才會將1件事情記得比較熟。
一樣的,學習 Linux 也1樣,如果你沒法常常學習的話,學了后面的,前面的忘了。你對Linux命令熟習后你可以開始搭建1個小的Linux網(wǎng)絡(luò),這是最好的實踐方法。Linux是網(wǎng)絡(luò)的代名詞,Linux網(wǎng)絡(luò)服務功能非常強大,不論是郵件服務器、Web服務器、DNS服務器等都非常完善。固然你不需搭建所有服務,可以漸漸來。需要說明的是這個Linux網(wǎng)絡(luò)對初學者有兩3臺計算機便可。自己多動手,不要非要等著他人幫你解決問題。
和私有操作系統(tǒng)不同,各個Linux的發(fā)行版本的技術(shù)支持時間都較短,這對Linux初學者是常常不夠的。其實當你安裝了1個完全的Linux系統(tǒng)后其中已包括了1個強大的幫助,只是可能你還沒有發(fā)現(xiàn)和使用它們的技能。主流Linux發(fā)行版都自帶非常詳細的文檔(包括手冊頁和FAQ),從系統(tǒng)安裝到系統(tǒng)安全,針對不同層次的人的詳實文檔,仔細瀏覽文檔后40%問題都可在此解決。查閱經(jīng)典工具書和Howto,特別是Howto是全球數(shù)以萬計的Linux、Unix的經(jīng)驗總結(jié)非常有參考價值通常40%的問題一樣可以解決。安裝1個新的軟件時先看README,再看INSTALL然后看FAQ,最后才動手安裝,這樣遇到問題就知道為何。如果說明文檔不看,結(jié)果出了問題再去論壇來找答案反而浪費時間。
當查找文檔時, 1定要看文檔是在何種版本、何種環(huán)境及何種狀態(tài)下出現(xiàn)的何種結(jié)果。對文檔的有效性, 1時還沒法在操作前就知道結(jié)論如何, 那末對某個專題或問題,瀏覽相干的多篇文章將會節(jié)省大量的時間, 還可以保證盡可能“干凈”的環(huán)境,有效避免由于不同操作所釀成的更多問題。操作時要仔細核對各個步驟及輸出的結(jié)果,盡可能保持與文檔1致。
如果上面的措施沒有解決問題,此時你就需要Linux社區(qū)的幫助了。需要說明的是你要有周全的思考,準備好你的問題,不要草率的提問,否則只會得到到草率的回答或根本得 不到任何答案。越表現(xiàn)出在尋求幫助前為解決問題付出的努力,你越能得到實質(zhì)性的幫助。最好先搜索1下論壇是不是有您需要的文章。這樣可以取得事半功倍的效果。
你需要提供精確有效的信息。這其實不是要求你簡單的把成噸的出錯代碼或數(shù)據(jù)完全轉(zhuǎn)儲摘錄到你的發(fā)問中。如果你有龐大而復雜的測試條件,盡可能把它剪裁得越小越好。可能你會遇到這類情況,對1個問題會出現(xiàn)不同內(nèi)容回答,這時候你需要通過實踐來驗證。另外把這個問題放在其他Linux社區(qū)要求幫助也是1種選擇。如果得不到答案,請不要以為我們覺得沒法幫助你。有時只是看到你問題的人不知道答案罷了。這時候換1個社區(qū)是不錯的選擇。
如果你想深入學習Linux,看不懂由于文檔實在是太難了。寫的最好的,最全面的文檔都是英語寫的,最早發(fā)布的技術(shù)信息也都是用英語寫的。即使是非英語國家的人發(fā)布技術(shù)文檔,也都首先翻譯成英語在國際學術(shù)雜志和網(wǎng)絡(luò)上發(fā)表。
通過man、info等命令,可以從在線幫助中快速地取得所需要的命令和操作方法。不要懼怕海量的系統(tǒng)幫助,仔細瀏覽幾個man或info文檔就會發(fā)現(xiàn),這些幫助幾近都依照固定格式寫成1命令名稱、參數(shù)、參數(shù)說明、使用例子、參考等。當英語成為1種習慣, 就會自覺地查找或定閱互聯(lián)網(wǎng)上感興趣的英文材料。這樣,在不知不覺中就已和世界同步。
隨著Linux利用的擴大,出現(xiàn)了很多Linux社區(qū)。其中有1些非常優(yōu)秀的社區(qū):水木清華、其中有1些非常優(yōu)秀的社區(qū):www.linuxforum.net(國內(nèi)最高水平GNU站點)、http://www.chinaunix.net/ (中國最大的Unix技術(shù)社區(qū)),隨著知識的不斷積累,就能夠把自己動手解決1些前人沒有遇到的問題寫出文檔在網(wǎng)絡(luò)上同享給其他讀者。這個時候, 也就成了1名“高手”。Linux的使用者1般都是專業(yè)人士,他們有著很好的電腦背景且愿意協(xié)助他人,Linux高手更具有鼓勵新手的文化精神。
l 了解Linux 的基礎(chǔ)知識,這些包括了用戶管理、群組的概念、權(quán)限的觀念等;
l 掌握最少50個以上的經(jīng)常使用命令;
l 掌握.tgz、.rpm等軟件包的經(jīng)常使用安裝方法
l 學習添加外設(shè),安裝裝備驅(qū)動程序(比如網(wǎng)卡)
l 熟習Linux文件系統(tǒng) 和目錄結(jié)構(gòu)。
l 掌握vi,gcc,gdb等經(jīng)常使用編輯器,編譯器,調(diào)試器 。
l 理解shell別名、管道、I/O重定向、輸入和輸出和shell腳本編程。
l 網(wǎng)絡(luò)的基礎(chǔ)包括: 掌握路由概念、OSI7層網(wǎng)絡(luò)模型、TCP/IP模型及相干服務對應的層次對Linux學習非常重要的。然后學習Linux環(huán)境下的組網(wǎng)。
本書重在原理。合適入門的最好圖書。作者是為2.6內(nèi)核加入了搶占的人,對調(diào)度部份非常精通,而調(diào)度是全部系統(tǒng)的核心,因此本書是很權(quán)威的。
此書比上1本多了些細節(jié)。是Linux內(nèi)核黑客在推薦圖書時的首選。寫的比較簡單易懂,合適剛剛接觸LINUX內(nèi)核的。
此書圖表很多,形象地給出了關(guān)鍵數(shù)據(jù)結(jié)構(gòu)的定義,與《Linux內(nèi)核源代碼情形分析》相比,本書內(nèi)容緊湊,不會1個問題講授動輒上百頁,有提綱挈領(lǐng)的功用,但是深度上要遜于《Linux內(nèi)核源代碼情形分析》。
這書強調(diào)動手實踐!但它是講授“裝備驅(qū)動”的,不是最核心的東西,而且有些東西沒硬件的話沒法實踐,可能更合適驅(qū)動開發(fā)的程序員吧
其中關(guān)于同步與互斥、內(nèi)存分配的部份,感覺很不錯。
好,很經(jīng)典,是浙江大學教授毛德操寫的,惋惜成書于2001年以后1直沒有更新。分上下冊。
很多是基于2.4內(nèi)核講授的需要注意。如果學習的話也建議學習2.6,2.6跟2.4比產(chǎn)生了很多顯著改良,應當學習的。
全書內(nèi)容博大精深,不是非常好懂,對細節(jié)問題描寫比較清晰。但是感覺對內(nèi)核的整體感覺不夠強。另外缺少網(wǎng)絡(luò)部份的分析。覺得不是很合適初學者。
點評:面對中高級,這本書很好,對了解操作系統(tǒng)是1本不可多得的好書。
參考手冊,很薄,值得1看。
這本書針對的是比較新的內(nèi)核版本2.6.24;內(nèi)容比較全面,深入淺出。
如果沒有對Linux內(nèi)核的初步結(jié)構(gòu)的認識,那末會看得比較費勁。建議可以1邊去翻在國內(nèi)已聞名已久的4本Linux內(nèi)核著作(《Linux內(nèi)核原代碼情形分析》、《Linux內(nèi)核設(shè)計與實現(xiàn)》、《深入理解Linux內(nèi)核》、《Linux裝備驅(qū)動程序》),再1邊看這本書,把這本書當作1個補充或當作1個內(nèi)核框架圖譜說明書來瀏覽,收效會更好。
主要描寫和注釋了Linux0.11內(nèi)核全部源代碼。對初學Linux內(nèi)核操作系統(tǒng)的人來說,該書能夠引領(lǐng)讀者快速入門,并且能全面了解1個簡單操作系統(tǒng)的工作機理。對進1步學習現(xiàn)在的Linux內(nèi)核具有非常大的指點作用。對學習嵌入式利用的技術(shù)人員來說,通過《完全注釋》1書的學習也能迅速融入嵌入式利用領(lǐng)域。
從只有210行的引導扇區(qū)代碼動身,1步1步地向讀者顯現(xiàn)1個操作系統(tǒng)框架的完成進程。
小日本寫的,不過確切寫的內(nèi)容很好,講怎樣自己1步步寫操作系統(tǒng),從匯編到C都有觸及。
簡稱LVMM,是1本介紹Linux虛擬內(nèi)存管理機制的書。如果你希望深入的研究Linux的內(nèi)存管理子系統(tǒng),仔細的研讀這本書無疑是最好的選擇。
1本講授網(wǎng)絡(luò)子系統(tǒng)實現(xiàn)的書,通過這本書,我們可以了解到Linux內(nèi)核是如何實現(xiàn)復雜的網(wǎng)絡(luò)功能的。
以上5本書籍被作者可謂是久經(jīng)考驗的神作(概括為“2+1+2”,第1個2是指2本全面講授內(nèi)核的書,中間的1指1本講授驅(qū)動開發(fā)的書,后面的2則指2本有關(guān)內(nèi)核具體子系統(tǒng)的書,希望這5本書籍能一樣對你有用。