[轉載] Linux新手必看:淺談如何學習linux

 

本文在Creative Commons許可證下發布php

1、起步
  首先,應該爲本身創造一個學習linux的環境--在電腦上裝一個linux或unix
問題1:版本的選擇html

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

  //注:如今以爲RH很死板,AS,ES等用在服務器上或許不錯,Personal desktop用mandrake,debian,suse都不錯。linux

  若是你並不打算深刻學習linux,而是有諸如適應北京市政府辦公平臺遷移到linux上這種須要,那麼中軟,紅旗等中文linux是不錯的選擇c++

  我強烈建議:本身親自動手把linux裝到你的硬盤上,你必須學會獨立安裝linux系統的技能,對於如今的版原本說,其實跟裝WinXP同樣簡單今後如今開始,請不要以windows的工做方式來考慮問題,應該嘗試挖掘linux身上的"天才unix"的氣質。程序員

2、進階算法

  • 掌握至少50個以上的經常使用命令;
  • 理解shell管道"|",文件流重定向">"及追加">>"等;
  • 熟悉Gnome/KDE等X-window桌面環境操做;
  • 掌握.tgz.rpm.biz等軟件包的經常使用安裝方法;
  • 學習添加外設,安裝設備驅動程序(好比modem);
  • 熟悉Grub/Lilo引導器及簡單的修復操做;
  • 熟悉系統固有目錄的名稱及學會用mount命令訪問其餘文件系統;瞭解vi,gcc,gdb等經常使用編輯器,編譯器,調試器學習linux環境下的簡單組網;

  建議:買一本不須要太厚的linux教材,大體能夠知足要求。(如今的書愈來愈多了,還帶不少圖,我當時可沒這麼多書:)sql

3、高級應用
  澄清一些概念:
  linux的普通操做與真正的系統管理不能相提並論,後者須要不少知識shell

我我的認爲比較重要幾種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站點站內搜索引擎尋找最新文檔,以免錯誤和漏洞有幾本技術大全和技術內幕我認爲都是這方面不錯的書

4、深刻學習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及其編程》

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

1. 科學哲學和管理哲學
【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)

2.  計算機科學基礎
【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))

3. 軟件工程思想
【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)

4. 軟件需求
【28】 「探索需求-設計前的質量」( Exploring Requirements: Quality Before Design)
【29】 「編寫有效用例」(Writing Effective Use Cases )

5. 軟件設計和建模
【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)

6.  程序設計(這個因人而異,術業有專攻,學學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」

7. 軟件測試
【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 )

8. 軟件維護和重構
【53】 「重構-改善既有代碼的設計」(Refactoring: Improving the Design of Existing Code)

9. 配置管理和版本控制
【54】 「版本控制之道 —— 使用CVS」(程序員修煉三部曲第一部:Pragmatic Version Control Using CVS)

10.  領域專題(網絡、平臺、數據庫相關) 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】 「數據訪問模式 —— 面向對象應用中的數據庫交互」

 

相關文章
相關標籤/搜索