浅谈如何学习linux

>>强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!

本文作者是evilqliang,欢迎阅读原文。这篇文章讲解了linux学习思路及周边技术知识点学习路线。如果需要更深入学习linux,欢迎在公众号回复“linux学习”,获取linux视频教程

起步

首先,应该为自己创造一个学习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.CC++
C、C++是linux/unix的核心语言,系统代码都是C写的。


5.ASM
系统底层及内核,硬件,设备驱动程序,嵌入式开发都需要。要是走核心路线的话,才cc++,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专家编程》,《CC++深层探索》。反正经典书看多了是没有坏处的。


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下应用层编程的书也有很多,比如

《GNULinux编程指南》,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)


十、 领域专题(网络、平台、数据库相关)
【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】 “数据访问模式 —— 面向对象应用中的数据库交互”


关注开发者快讯,获取有价值的文章

浅谈如何学习linux


始发于微信公众号: 后端技术精选