Monday, April 13, 2009

zz:linux学习

說得挺中肯的,也基本符合學習曲線. 以後如果有人問我,我就refer他看這篇文章.

http://home.eeworld.com.cn/?uid-78216-action-viewspace-itemid-12643

很多朋友(无论是单片机出身的底层软件工程师还是上微机软件程序员)如何学习Linux,是个老生常谈的问题,也是各大社区讨论频率较高的问题,以前也有 好多朋友发邮件和我一起讨论,我近日,心血来潮,突然想把这几年使用Linux的经验总结一下。首先你应该先装上linux操作系统,开始时可以看看 shell脚本,不用太复杂的,差不多你就可以看看/etc/rc.d/里面的几个文件,熟悉启动过程和所启的服务,
然后你就试着让你机器可以上网,www.google.com对你以后的帮助是最大的
再之后就可以配置samba,ftp,http的服务器了,等你大概对应用有了了解后,就可以进入编写应用程序了,多看看自由软件的源吗,可以去http://sourceforge.net/
下载源码,自己去编译,比如些娱乐软件的,等你越来越有成就感后,你会发现linux社区还有更乐趣的事,一切才刚开始,你已经可以自己去裁剪,编译内核了,写写驱动程序什么的,之后建议你往嵌入式linux方向发展,

有什么样的决心,就有什么样的未来,兴趣是关键

一,为什么学Linux?哪些人需要学Linux?
哪 些人需要学Linux?我认为任何想让计算机为自己干活的人,都可以学Linux。KISS(Keep It Simple,Stupid!),在Linux就有很好的体现。我是个懒人,以前在windows里面很多冗繁的操作,我都想方设法的在Linux里面自 动让计算机来实现(或许windows也能,但是我不会),如果你想让计算机更体贴的为你服务,那就学习Linux吧!

二、选择哪个发行版学习?
这 也是个困扰初学者的问题,当初我也是,我最高记录是一天换了三个发行版。想当初,什么Redhat,SuSE,Fedora,Mandrake, Debian,红旗,中标等等,能装的都装过。最后我算是明白了,邓爷爷说的没错阿"不管黑猫白猫,能抓耗子的就是好猫",所以说大家就不要太刻意的去追 求哪个发行版了,能用就行,至于好不好用,能不能让其发挥最大的功能,那不是发行版的问题,而是你的问题。BTW,我现在使用的是Debian,已经使用 快三年了!

三、如何学习Linux?
至于具体应该如何系统的学习Linux,我也不能发表什么权威的看法,完全都是自己的经验。

1、基础学习。
Linux发行版都是在Linux Kernel的基础上加以定制的,可以这样说,不管用哪个发行版的Linux,其基本操作都是想通的。我个人觉得,Linux基础主要指以下几个方面:
a、学习Linux前,建议了解一下操作系统、计算机硬件结构、网络、等基础知识。最好多认几个英文单词,呵呵。
b、Linux的安装与定制。如何将Linux安装在自己的机器上,且将Linux定制成最适合自己机器的操作系统。
c、Linux常用命令,诸如:cd,ls,cat,ps等等这类基础命令。
d、Linux软件的安装。你可以采用rpm、deb等各种形式的安装方式,但我个人比较建议基于源代码的安装,这样更能学到东西。
e、熟悉X窗口,现在比较常用的是GNOME和KDE,选一个自己比较喜欢的,熟悉她。
f、熟悉Linux的文件结构,了解每个目录其主要包含内容及作用。
g、基础Shell编程,用Shell编程来完成最基本操作,诸如:系统备份等。
h、熟悉vi、emacs等常用的编辑器,当然,你也可以选择gedit等X环境的编辑器。

2、进阶学习
当你掌握了一定的基础以后,根据自己的需要,进行深入的学习。再次说明,本文完全都是我长期使用Linux的经验总结,不代表任何组织负责,不承担任何责任,呵呵。
a、使用Linux架设自己的服务器,现在比较流行的是LAMP(Linux,Apache,MySQL,PHP/Python)。
b、深入理解shell编程,学习sed/awk等,学习正则表达式的写法。个人比较强调,正则表达式在处理文本的时候相当有用,一定要学好哦。
c、学习各类常用服务器的搭建。如:ssh、sendmail/Qmail、proftp/vsftp、Samba、Squid、PostgreSQL/Oracle、Bind等。当然,你可以选择性根据自己实际情况来学习。
d、如果条件允许,可以学一点web脚本编程语言,如:perl,php等。
e、如果对网络比较喜欢,可以深入的学习TCP/IP协议。
f、如果想再企业级环境中使用,可以深入了解多用户管理、文件系统、日志分析、备份与数据修复、系统补丁、内核升级、网络安全等课题。人不是全能的,可以选择自己比较喜欢的课题来研究。
g、如果对程序设计比较感兴趣,可以学习C或Python,个人感觉Python作为入门编程语言比较适合,因为她不难,至少比C简单多了。

3、高级学习
当对Linux有了充分的认识后,那就根据自己的条件,来更有选择性、针对性的学习了。我个人在Linux的认识上,还在这个阶段徘徊不前,所以就胡说八道一下,如有不正之处,还请各位多多指教:

a、程序设计类:
先 要理解Linux的工作原理,熟悉内核的各模块功能,熟练使用C语言。所以说,要想学好Linux,C语言是相当重要的。现在大学普遍使用C语言的课本都 是老谭同志的那本,还行,不过我个人建议看看《The C Programming Language》这本书对自己是相当有好处的。不过看懂这俩本书也不能马上应用到实际工作中来,因为这两本都是基础中的基础,理论中的理论,要想实际运 用C语言,还需要自己多读别人的代码,多写代码,不要怕麻烦,我刚接触C语言也很郁闷,总是不能理解,尤其是指针啊、数组阿之类的,搞的我莫名其妙的。

要 想学好程序设计,数学是基础,我上大学那阵,开了高数、概率论、线性代书、离散这四门必修课。当时也没怎么认真学,觉得考试能过就好,现在后悔了,闲暇之 余都不敢看小说了,要把以前的数学书拿出来复习了,郁闷死我了。数据结构和算法是一个程序的灵魂,所以要想在程序设计上有所建树的,一定要再这两方面深入 研究。不管用什么语言来实现,都是需要一个好的算法和数据结构。

当然了,Linux内的程序设计不单单是C语言,你还可以选择自己喜欢 的、熟悉的语言来开发,如:C++、Python、JAVA等等,太多了。就程序设计而言,选择什么语言并不重要,重要的是解决问题的方法。基础很重要, 什么操作系统原理阿、计算机结构阿、数字电路阿,能多多少少了解一点,总是不会错的。

b、系统管理类:
如果你的目标不是程序员,而是一个系统管理员(就像我),那个人建议主要注意以下几个方面:
1、一定要学好Shell编程,当你熟练以后,你会发现,用shell编程,解决问题真的很简单。
2、对自己使用的发行版,一定要做深入的了解,哪些文件控制哪些,等等。
3、对网络协议、网络安全、网络设计,要深入学习研究。
4、能在第一时间内获悉你正在使用环境中的软件bug,内核漏洞,并且根据实际情况,决定采用什么方式补救,某些时候,不一定升级就有效。
5、有兴趣的可以研究研究Linux集群,用集群来解决实际环境中的一些实际问题,如:热备份、负载均衡等。
6、对系统备份、数据恢复,一定要有深刻的认识,我以前就遇到过数据丢失的情况,后悔莫及。
7、了解你实际工作环境中计算机的硬件体系。
8、理解你的计算机所提供的各种服务的原理。如,vsftp、ssh、apache等工作原理。

四、一些我个人感觉比较好的Linux书籍
W.Richard.Stevens先生的那六本书(书名俺就不打了,磨损键盘,反正大家都明白)。并再次缅怀W.Richard.Stevens先生,没有您,就没有计算机的今天。
《LINUX系统管理技术手册》 EVI NEMETH,GARTH SNYDER,TRENT R.HEIN写的,不怎么出名,但个人感觉很实用,绿皮的。
《鸟哥的Linux私房菜》 **鸟哥写的,他网站上有电子版,对于入门者来说,还不错。
《LINUX DEVICE DRIVERS》这本书就不说了吧,经典中的经典,其实我买了,看了,但是感觉没用,呵呵,我不做开发的。
《THE ART OF UNIX PROGRAMMING》Eric Raymond先生的经典作品,多看点书,总是没错的。
《UNIX SHELLS BY EXAMPLE》 Shell实例编程教学,还不错,有很多有用的东西,并且介绍了好多版本的shell,不单是bash。
《莱昂氏UNIX源代码分析》经典书,可以做收藏之用,但是看了总比没看的好

暂时就列这么多吧,其实呢,看书这个东西,不在乎多少,而在于理解掌握多少,自己明白的,才是自己的,自己不明白的,永远都是书本的、别人的。我以前有段时间,下载了好多电子书,结果都没看,浪费空间了,呵呵。不过多看点书,总是没有坏处的

No comments: