一、为什么要学Linux?
当然最重要是爱好和兴趣!如果你没必要学,或者根本不喜欢,请不要浪费时间,你学也学不好!
二、起步学习
你应该为自己创造一个学习linux的环境--在电脑上装一个Linux或Unix 。
问题1:版本的选择
北美用redhat,欧洲用SuSE,桌面mandrake较多,而debian是技术***进的Linux。
开发人员中用debian的最多,其次是redhat,从全球Linux各应用领域市场份额来看 ,无疑redhat是最多的,此外还有很多出名的发行版本,不再列举。
对于初学Linux的人来说,建议使用redhat,原因如下:
1)现在很多书都是以redhat为例讲的,为了与书本协调一致 。
2)周围的人都用redhat,交流比较方便 。
3)redhat应用范围广,有典型性和代表性 。
4)它易于使用和安装,我们没有必要把时间浪费在“装系统”上 而应集中精力学习最有用的东西。
//注:现在觉得RH很死板,AS,ES等用在服务器上或许不错, Personal desktop用mandrake,debian,suse都不错,笔者现在用Mandrake,因为她长得漂亮 。
如果你并不打算深入学习Linux,而是有诸如适应北京市政府办公平台迁移到Linux上这种需要,那么中软,红旗等中文Linux是不错的选择 。
强烈建议:自己亲自动手把Linux装到你的硬盘上, 你必须学会独立安装Linux系统的技能,对于现在的版本来说,其实跟装WinXP一样简单 。
从此现在开始,请不要以windows的工作方式来考虑问题, 应该尝试挖掘Linux身上的“天才Unix”的气质。
三、进阶
- 掌握至少50个以上的常用命令 ;
- 理解shell管道"|",文件流重定向">"及追加">>"等 ;
- 熟悉Gnome/KDE等X-windows桌面环境操作 ;
- 掌握.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内核需要的基础:
在此之前,希望先把应用层的东西学一下,那样会比较好理解 。
1.C
如果学过潭浩强的大学教科书(除了编几个数学模型好像什么也做不了的那种), 建议再看一下 《The C Programming Language》Second Edition这本圣经 。
/*如果想学缓冲区溢出,这点C的功力可能是不够的*/
还有,反正经典书看多了是没有坏处的 。
2.asm (AT&T语法,保护模式)
保护模式下的比较复杂,基本上每本讲内核的书都会有介绍 。
有80x86 Intel语法的基础就行, 有兴趣可以看看Intel的官方网站。
3.数据结构(离散数学)
计算机专业的核心课程,重要性我就不说了 。
4.操作系统原理
看懂这个再去读Linux吧 。
5.微机原理/组成原理(数字电路)
底层直接和硬件打交道,所以这个也要学。
6.了解Linux/Unix
至少你要会操作吧,了解unix的API 。
7.软件工程/编译原理
这方面的经典书去百度上搜到很多 ,APUE这种书不适合初学者,还是先看看UPE之类的吧 。
APUE
《advanced programming in the unix environment》
《unix环境高级编程》
作者:W.Richard.Stevens共有6本经典书,尊为“圣经” ,他的书为全世界黑客所拜读!
UPE:
《unix programming environment》
《unix编程环境》比较适合初学者的,深入浅出, 其中有一些比较重要的思想 。
另外,介绍Linux下应用层编程的书也有很多,比如 redhat、redflag出的书...........
经典书还有很多很多:
- 操作系统:设计与实现 //交大的考研参考书目,讲Minix的
- unix操作系统设计
- BSD操作系统设计与实现
- 昂莱氏unix源代码分析
- understanding the linux kernel (2nd)深入理解linux内核
- linux设备驱动程序 (2nd)
- linux内核源代码情景分析
- 保护方式下的80386及其编程