天天看點

Linux新手必看:淺談如何學習linux

本文在Creative Commons許可證下釋出

一.起步

  首先,應該為自己創造一個學習linux的環境--在電腦上裝一個linux或unix

問題1:版本的選擇

  北美用redhat,歐洲用SuSE,桌面mandrake較多,而debian是技術最先進的,linux開發人員中用debian的最多,其次是redhat,從全球linux各應用領域市場佔有率來看無疑redhat是最多的,此外還有很多出名的發行版本,不再列舉。原則是:我們沒有必要把時間浪費在"裝系統"上而應集中精力學習最有用的東西。

//注:現在覺得RH很死闆,AS,ES等用在伺服器上或許不錯,Personal desktop用mandrake,debian,suse都不錯。

如果你并不打算深入學習linux,而是有諸如适應北京市政府辦公平台遷移到linux上這種需要,那麼中軟,紅旗等中文linux是不錯的選擇

我強烈建議:自己親自動手把linux裝到你的硬碟上,你必須學會獨立安裝linux系統的技能,對于現在的版本來說,其實跟裝WinXP一樣簡單從此現在開始,請不要以windows的工作方式來考慮問題,應該嘗試挖掘linux身上的"天才unix"的氣質。

二.進階

掌握至少50個以上的常用指令;

了解shell管道"|",檔案流重定向">"及追加">>"等;

熟悉Gnome/KDE等X-window桌面環境操作;

掌握.tgz.rpm.biz等軟體包的常用安裝方法;

學習添加外設,安裝裝置驅動程式(比如modem);

熟悉Grub/Lilo引導器及簡單的修複操作;

熟悉系統固有目錄的名稱及學會用mount指令通路其他檔案系統;了解vi,gcc,gdb等常用編輯器,編譯器,調試器學習linux環境下的簡單組網;

建議:買一本不需要太厚的linux教材,大緻可以滿足要求。(現在的書越來越多了,還帶很多圖,我當時可沒這麼多書:)

三.進階應用

澄清一些概念:

linux的普通操作與真正的系統管理不能相提并論,後者需要很多知識

我個人認為比較重要幾種linux語言

1.英語

即使你不學linux,我也強烈建議你學好英文[U.S.english]。因為實質上計算機語言就是英文和字元,所謂的多國語言隻是外部包裝。你必須能無障礙的閱讀大量的英文技術文檔,在搜尋引擎找到的英文網站和網頁中熟練的檢索。最好能有用英文直接交流的能力,擺脫了這個障礙,你的學習和了解速度就能快很多,你就有機會拉開和别人的差距

2.shell[sed/awk]

shell是指令解釋器,是核心與使用者界面交流通道,shell寫的小腳本有點類似于win下的.bat但shell比.bat強大的多,shell不隻是解釋指令,更是一種程式設計語言,有時候幾百行的c用shell幾十行就能代替完成工作,因為shell的工作方式建立在系統已有的衆多應用程式之上這也是CS中的一個重要思想。

此外,shell可以實作工作自動化,這個概念也比較重要sed,awk用來處理文本,曆來很常用

3.Perl/PHP

漂亮的腳本, CGI的首選,比ASP好,應用面很廣

4.C\C++

C、C++是linux/unix的核心語言,系統代碼都是C寫的

5.ASM

系統底層及核心,硬體,裝置驅動程式,嵌入式開發都需要。要是走核心路線的話,才c\c++,asm最重要

6.Java,Python,Tcl,XML

*系統管理篇

  在熟悉linux的基礎上還需要掌握至少一種unix。我首推Solaris,其次是FreeBSD。比如營運級系統一般是Solaris+Oracle/DB2之類的學習apache,ssh,sendmail/Qmail,proftp/vsftp,Samba,Squid,MySQL/PostgreSQL/Oracle,Bind等各種應用伺服器的構架及電子商務的應用熟悉TCP/IP協定族,學習諸如apache+php+proftp+mysql+quota的實作以及大型區域網路,分布式叢集等各種企業級應用解決方案熟悉多使用者管理,資料庫管理,檔案系統,邏輯存儲管理,日志分析,備份與災難資料修複系統更新檔,核心更新,以及在此基礎上的防火牆構架等以保障系統安全在内的各種系統管理技能我覺得,如果在此基礎上再掌握路由/交換裝置便是一個不錯的系統管理者

各種基于linux的解決方案可參考相關書籍和文獻,必要時用google或各大linux站點站内搜尋引擎尋找最新文檔,以避免錯誤和漏洞有幾本技術大全和技術内幕我認為都是這方面不錯的書

四、深入學習linux

我個人了解的讀linux核心需要的基礎:在此之前,希望先把應用層的東西學一下,那樣會比較好了解

1.C

如果學過潭浩強的大學教科書(除了編幾個數學模型好像什麼也做不了的那種), 建議再看一下《The C Programming Language》Second Edition這本聖經/*如果想學緩沖區溢出,這點C的功力可能是不夠的*/還有,《C陷阱與缺陷》,《C專家程式設計》,《C\C++深層探索》。反正經典書看多了是沒有壞處的

2.asm (AT&T文法,保護模式)

保護模式下的比較複雜,基本上每本講核心的書都會有介紹有80x86 Intel文法的基礎就行,有興趣可以看看Intel的官方白皮書

3.資料結構(離散數學)

計算機專業的核心課程,重要性我就不說了

4.作業系統原理

看懂這個再去讀linux吧

5.微機原理/組成原理(數字電路)

底層直接和硬體打交道,是以這個也要

6.了解linux/unix

我想至少你要會操作吧,了解unix的API

7.軟體工程/編譯原理

這方面的經典書去www.china-pub.com可以搜到很多我覺得APUE這種書不适合初學者,還是先看看UPE之類的吧

APUE:

《advanced programming in the unix environment》

《unix環境進階程式設計》

作者:W.Richard.Stevens共有6本經典書,尊為"聖經"他的書為全世界黑客所拜讀!

UPE:《unix programming environment》

《unix程式設計環境》比較适合初學者的,深入淺出,其中有一些比較重要的思想

另外,介紹linux下應用層程式設計的書也有很多,比如

《GNU\Linux程式設計指南》,redhat,redflag出的書........... 經典書還有很多很多......《 作業系統:設計與實作》//上海交大的考研參考書目,講

Minix的unix作業系統設計

《4.4BSD作業系統設計與實作》

《昂萊氏unix源代碼分析》

《ulk:understanding the linux kernel 》(2nd)深入了解linux核心

《linux裝置驅動程式 (2nd)》

《linux核心源代碼情景分析》

《保護方式下的80386及其程式設計》

五、上升到工程化Linux下環境開發:

一、 科學哲學和管理哲學

【1】 “程式開發心理學”(The Psychology of Computer Programming : Silver Anniversary Edition)

【2】 “系統化思維導論”(An Introduction to Systems Thinking, Silver Anniversary Edition)

【3】 “系統設計的一般原理”( General Principles of Systems Design)

【4】 “品質·軟體·管理(第1卷)—— 系統思維”(Quality Software Management:Systems Thinking)

【5】 “成為技術上司者——解決問題的有機方法”(Becoming A Technical Leader:An Organic Problem-Solving Approach)

【6】 “你的燈亮着嗎?-發現問題的真正所在”( Are Your Lights On? How to Figure Out What the Problem Really Is)

【7】 “程式員修煉之道”(The Pragmatic Programmer)

【8】 “與熊共舞:軟體項目風險管理” (Waltzing With Bears: Managing Risk on Software Projects)

【9】 “第五項修煉: 學習型組織的藝術與實務”( The Fifth Discipline)

二、 計算機科學基礎

【10】 “計算機程式設計藝術”(The Art of Computer Programming)

【11】 “深入了解計算機系統”(Computer Systems A Programmer\'s Perspective )

【12】 “算法導論”(Introduction to Algorithms, Second Edition)

【13】 “資料結構與算法分析 —— C語言描述(原書第2版) ”(Data Structure & Algorithm Analysis in C, Second Edition) 31

【14】 “自動機理論、語言和計算導論(第2版)”(Introduction to Automata Theory, Languages, and Computation(Second Edition))

【15】 “離散數學及其應用(原書第四版)”(Discrete Mathematics and Its Applications,Fourth Edition)

【16】 “編譯原理”(Compilers: Principles, Techniques and Tools)

【17】 “現代作業系統”(Modern Operating System)

【18】 “計算機網絡(第4版)”(Computer Networks)

【19】 “資料庫系統導論(第7版)”(An Introduction to Database Systems(Seventh Edition))

三、 軟體工程思想

【20】 “人件”(Peopleware : Productive Projects and Teams, 2nd Ed.)

【21】 “人件集 —— 人性化的軟體開發”( The Peopleware Papers: Notes on the Human Side of Software)

【22】 “人月神話”(The Mythical Man-Month)

【23】 “軟體工程 — 實踐者的研究方法(原書第5版)”(Software Engineering: A Practitioner\'s Approach, Fifth Edition)

【24】 “靈活軟體開發-原則、模式與實踐”(Agile Software Development: Principles, Patterns, and Practices)

【25】 “規劃極限程式設計”( Planning Extreme Programming)

【26】 “RUP導論(原書第3版)”(The Rational Unified Process:An Introduction,Third Edition )

【27】 “統一軟體開發過程”(The Unified Software Development Process)

四、 軟體需求

【28】 “探索需求-設計前的品質”( Exploring Requirements: Quality Before Design)

【29】 “編寫有效用例”(Writing Effective Use Cases )

五、 軟體設計和模組化

【30】 “面向對象方法原理與實踐”

【31】 “面向對象軟體構造(英文版.第2版)”(Object-Oriented Software Construction,Second Edition )

【32】 “面向對象分析與設計(原書第2版)”(Object-Oriented Analysis and Design with Applications,2E )

【33】 “UML面向對象設計基礎”(Fundamentals of Object-Oriented Design in UML)

【34】 “UML精粹 —— 标準對象模組化語言簡明指南(第2版)”( UML Distilled: A Brief Guide to the Standard Object Modeling Language (2nd Edition))

【35】 “UML和模式應用(原書第2版)”(Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process, Second Edition )

【36】 “設計模式精解”(Design Patterns Explained)

【37】 “設計模式:可複用面向對象軟體的基礎”( Design Patterns:Elements of Reusable Object-Oriented software)

【38】 “面向模式的軟體體系結構 卷1:模式系統”( Pattern-Oriented Software Architecture, Volume 1: A System of Patterns)

【39】 “軟體設計的藝術”(Bringing Design to Software)

六、 程式設計(這個因人而異,術業有專攻,學學C#、JAVA也不錯啊)

【40】 “程式設計珠矶”(Programming Pearls Second Edition )

【41】 “C程式設計語言(第2版·新版)”(The C Programming Language )

【42】 “C++ 程式設計語言(特别版)”(The C++ Programming Language, Special Edition)

【43】 “C++ Primer (3RD)”

【44】 “C++語言的設計和演化”( The Design and Evolution of C++)

【45】 “C++ 程式設計思想(2ND)”(Thinking in C++ Second Edition)

【46】 “Effective C++” & “More Effective C++”

【47】 “C++程式設計藝術 ”(The Art of C++ )

【48】 “Java 程式設計思想:第3版”( Thinking in Java, Third Edition)

【49】 “Effective Java”

七、 軟體測試

【50】 “測試驅動開發(中文版)”(Test-driven development:by example )

【51】 “面向對象系統的測試”(Testing Object-Oriented System: Models, Patterns, and Tools)

【52】 “單元測試之道Java版 —— 使用Junit”/ “單元測試之道C#版——使用NUnit” (Pragmatic Unit Testing:In Java with JUnit / Pragmatic Unit Testing:In C# with NUnit )

八、 軟體維護和重構

【53】 “重構-改善既有代碼的設計”(Refactoring: Improving the Design of Existing Code)

九、 配置管理和版本控制

【54】 “版本控制之道 —— 使用CVS”(程式員修煉三部曲第一部:Pragmatic Version Control Using CVS)

十、 領域專題(網絡、平台、資料庫相關) 99

【55】 “TCP/IP詳解”( TCP/IP Illustracted)

【56】 “Unix網絡程式設計”(UNIX Network Programming)

【57】 “UNIX環境進階程式設計”(Advanced Programming in the UNIX Environment) 102

【58】 “UNIX 程式設計藝術”(The Art of Unix Programming)

【59】 “資料通路模式 —— 面向對象應用中的資料庫互動”