转:一封写如何学习linux的信

xx:

你好!

信中提到你已经在开始学习Linux了,很高兴看到你走出了这第一步!欢迎你进入了一个全新的、开放的、互助的环境。你将会发现随着时间的增长和经验的积累,你对计算机的控制力会越来越强,你会发现你每前进一步都可以建立在原来的基础之上。只要你愿意,你基本上可以涉及计算机相关的任何领域。

很惭愧!一直以来都在享受OpenSource给予我很多方面的知识、技能和分享他人的经验,却没有给这个组织贡献过什么。曾经也幻想过,什么时候我也可以象很多大师一样在互联网上也写些文档,给后面的学习者以帮助。可一直以来都羞怯于自已知识和能力有限,离这一步还遥遥不可及,还不敢在大众面前班门弄斧。但回头想想自已虽然才识有限,却毕竟学习和使用她有六年的时间了,虽做不到象大师们那样的高度,多多少少在这方面还有些积累、心得,还是可以把这些心得、学习的历程,告诉刚刚进入这个新环境的同仁们,或许可以让大家少走些弯路。小小荧光纵使不能让在寒夜里的人们温暖,如果能给迷惘的人一些方向,也是对自已莫大的欣慰了。算是自已对这个组织的小小回报吧。

先说说我学习计算机的经历吧,我想经历也能说明我为什么会对Linux情有独衷。

一、MS-DOS v5.0(我的计算机启蒙)

先说说我对MS的印象。*心而论MS是让我开始了解什么是计算机的导师。还记得大学当时刚出MS-DOS 5.0,那时买了一本MSDOS 5.0的手册,当时对计算机的了解就知道DOS然后加上一些应用软件,一个头痛的问题当时觉得学计算机命令其多,要学好计算机就一定要记忆力好。记了很多指令,直至今天这些指令偶尔还有派上些用场。当时最cool的事情就是如何设置我们学样的286,386机器,让他们能使用640K以上的扩展内存,来回设置config.sys和autoexec.bat文件;如何做在扩展内存上做RAMDISK;如何可以不用换盘就可以很轻松的运行软件;如何可以存破解学样机器的CMOS锁;如何将720K的五英寸的软盘当800K来使;如何用clean,scan,kill杀毒。以为那些就是学计算机要掌握的东西,现在想想很幼稚,典型的认为自已能解决别人不能解决的问题就是学会了计算机。后来学校开了Pascal,学完之后好象也不能干什么,对编程反而没什么兴趣,那段时间还自学了汇编,因为学汇编可以破学样的CMOS密码,可以写病毒,那是当时最大的兴趣icon_smile.gif。我觉得当时是缺少好的老师,开始学以为计算机什么都能干,后来学完编程之后,好象也不能干什么,兴趣大减。现在想想当时没有花时间好好学学基础的知识,因为现在工作后才发现,基础是多么的重要。至今还记忆得大学上pascal课提到的算法+数据结构=程序概念,虽然现在有关OO的东西已经普及,但直到现在我们具体的工作方法还是以这个居多。
后来MS出了win3.1版,漂亮的界面,人性化的设计,没想到计算机能有这么强的表现力。印象最深的windows附件里有个paint作图工具,那时觉得能在计算机里画点什么就激动的不行。那段时间里windows里还没有什么游戏,有很长一段时间在玩三国志和一些F19的模拟战机的游戏,真到现在我还是很佩服当时那一代的开发人员,在很有限的资源还是干了很了不起的事情。不过每个时代都会因为外在环境的影响产生不同的产品,应该和整个时代和环境相结合。现在如果是一个CPU速度比开发人员的开发速度大大便宜的时代,所以很多时候现在软件开发上更多考虑的是开发速度和后续的扩展和维护,在性能方面在一般的应该里都不是需要花很多精力去考虑的因素了。我觉MS很多方面有超前的思路,他在很多方面在不断的要求提升硬件的性能,实际上他也是看到了这个必然的趋势,我们每天都在说MS怎么了,但每天又离不开他们的产品。很多Opensource社区里面的人经常说MS这不好那不好,其实很片面的,真正深入学习MS的文化,你不得不佩服这是世界上最聪明的人在做产品,很多东西好与不好都是很有讲究的。
到95年开始工作了,win95又出来了。那时在梅州工作的单位就一台386,也没买多久也只装了个DOS+Foxpro。是以前北京民航局的人赚外快的人做的,因为是工作原因也不赶怎么去动那台机器。一次偶然的机会,我们那一个代理AST机器的代理商做展览,我看到了当时MS出的win95。当时win95全面支持了多媒体功能,当时的情形似乎还在昨天似的,一台机器竟然完全可以看电影、听CD,同时干N种事情,把我看傻了,太厉害了。我想完了,MSDOS那些东西都还没搞懂,新的东西又出来了,唉,这怎么办啊。后来看了些有关MS企业的书,原来MS把自已做为竞争对手,他们做的事情就是要用新的产品打败旧的产品,这样他们又在新的市场上占领了先机,大家又重新在跟着MS跑了。MS就象一个不停的机器不让你放松半下,新的东西又出来了,所以你要不停的学习。记得以前的一个事实,在MSDOS年代国内有很多开发人员做的非常好,后来windows的出现,大部人最后就消失了,看看MS的程序员少有超过30以上的。其实他们每次做的东西都是征对于中小企业,每次出的开发工具越来越简单,做为RAD(Rapid Application Develop)的工具,MS的工具是首先。有一次我和我们一位开发我们客户端(client)程序的资深架构师聊天(他是我的一个好朋友,以前负责我们客户端开发的整个团队的Teamleader),我问MS怎么从来不考虑移植问题?他说MS的策略是面向中小企业的用户,实际应用里如果在一个企业里做好的话,移植性的要求非常少。对于开发人员来说也是,一般的应用在一个环境下做好就行了,没有必要移植到不同的环境。还有一点就是这里面也有商业的策略,也可以说是技术壁垒,MS的做法实际上就是要他很多人留在他们的环境里,让他们永远在MS很熟服的呆着,不让他们有转移到新的开发*台上去,这也就把原有的用户保留下来了。以前对很多MS技术上的做法不明白,后来发现很多事情从商业理解就很容易了,说来说去都是为了自已的市场商业利益,看看以前的netscape也是个典型的例子。我们和MS上也存在竟争关系。但我们公司现在至始至终MS是我们的一个定时炸弹,如果他们一旦看中了这个市场的话要做,我们在很多方面都是处于极其不利的地位,肯定是场恶战了。虽然公司现在靠业务收入还很不错,但大家一讲到MS,心里都没多少底,MS是个巨无霸,只要他想干的事情,没有任何人能阻止。而且MS是习惯了借东风的的,象以前Mac的GUI、MSDOS、Netscape等都是这样。你只要多看些MS的一些书,你就不得不佩服他们在很多方面的过人之处。看过之后会让你有心潮澎湃的感情,会发出这样的感叹----哦!原来MS是这样的啊。
通过对MS的了解我发现很多事情确实要做好很多方面的*衡,技术人员需要有市场的眼光,而不能做单纯的tech guy。需要明白技术终究是为人服务的,不是我们的玩具,用户需要什么,我们能为他们做些什么,这才是最为关键的。
在西方的管理上经常会听到balance这个词,实际上也就是我们中国人说的“中庸之道”。以前可能对早期的启蒙教育太深,一说到这些就觉得不好。现在人长大了,很多观念好好想想,确实流传了上千年的东西不是那么简单的事情,很多方面都有很深的涵义,可以在现实生活中指导自已的形为。

二、了解到有Internet让我激动不以

还是95年快毕业那伙,有一次在图书馆看了一本PC Magazine的中文杂志,发现有个叫胡启立的人写了有关Internet的介绍,后来好象当了信息产业方面的一个部长什么的,经常听到他的名字。到现在我还记得杂志上的一些内容,就是介绍Internet的历史和她能干什么,我一想到全世界的电脑都连起来了,而且我可以随时看到世界各地的信息,下载他们的软件,发电子邮件,太神奇了,不敢相信世界上还有这种事。我想9年前知道Internet的人也没有几个,到现在我还清楚记得94是中国接入Internet的第一年。最早还是中科院核物理研究所的几台机器接到美国的。
因为对Internet了解的早,所以一直在打听哪里可以上Internet。以前听说在暨南大学可以,好是羡慕,可惜没有朋友在那。那段在广州工作的时间里买了一些有关Internet的书,权且做些书本学习之用。至今对那本大块头的书《Internet大全》还记忆犹新,虽然那本书很厚很全很难看完,但不经意间对大部分内容也做了些了解。我那时知道了TCP/IP、PPP、IP地址、unix这些比较基本的东西。那本书很多是讲如何使用互联网上很多常用软件的书,那时都兴什么大全大全的书,现在我一看这种很厚很厚的书就没什么兴趣了。真正大家写得书都是很有内容,一般不会太厚,建议以后买书先对作者做些了解,问问身边的同事看看网上的评论才买,这样买好书的机会会大大增多。
96年我们梅州终于也有节点了,经过一番了解,后来又和公司领导胡吹一顿,最终申请通过了。那里我们那里没有Modem卖,后来托广州的同学买了个回来。最初只知道上网用终端方式,因为那本书上说的都是终端上的运用。可以远程在终端上收发邮件,用用gopher看看一些北京/上海的一些资料。后来知道有了netscape可以浏览网页,但又不知道如何用PPP。唉,没有人教,找不到书,只能痛苦的在网上找。后来去电信那边看了下他们是如何用的,大大加快了用PPP方式上网的步伐。终于通过终端方式用kermit下载了trump的tcp/ip软件,下载了netscape。以当时28.8k bps的速率,加上线路不好,搞了好些天才搞定,唉真是辛苦。但想想书中讲到的魔力--可以和全球另一端的人实时联系,就让我激动不以,乐此不疲。功夫不负有心人,最后终于用netscape看到一些东西,但没有想象的好,那时Internet上信息太少了基本上没有什么东西,也不知道如何找东西。
上SZBBS是一大转折,终于可以和真实存在的一群人打交道了,一帮年青有激情、有智慧的青年人,也让我认识了一位漂亮MM。那次美丽?邂逅让我从此再也不敢去会网友,担心会冲淡这份美好的回忆。至今还记得九七年那一幕幕场景----汽车站、火车站、越秀公园、植物园、珠江边还有乒乓球以及尴尬的把钥匙掉进了...,还听你讲了许许多多你的故事,还记得机场的那一别。
SZBBS当时那一帮青年很多现在都很有成就,我们现在的老板们当时都是其中的一员。包括现在网易的老总都是我们那个时代的网友。

三、一次无意间知道了Linux

九八年的一次在网上转,发现有个国内的人做了个主页介绍Linux。当时印象中是这个东西什么都能干,FTP/WWW/MAIL...,而且可以用Unix上的东西。我想这东西神了,以前看Internet和看C语言的书,都讲Unix是Internet的开山鼻祖,可一直没有机会可以接触。记忆里只知道以前大学里机械系里能用,而且不是一般人能用到,一直对其神往。没想到居然能在PC上跑,太神奇了。现在想想其实那种情况也是大家一直在期待的,用这样的东西不用钱,同时又有源码,让人不可思议。直到现在我都很佩服西方那些人,他们那种某于奉献的精神让我感动不以,可以说我现在的工作和生活都得益于这些人,从心底里对他们表示尊敬。
当时用的是Linux Slackware4.0的版本,因为软件有些大而且网络速度奇慢,下了好几天才搞定。后来在BBS上找到了一个台湾人写的安装slackware的教程,按着他里面的操作,加上若干天的研习,终于自已把Linux装上了。那天装好以后,当我看到Login:提示符的时候,兴奋、激动...,我自已终于也有了个Unix的工作站。
因为当时学习MS的东西在网上的帮助太少了,而且用MS的东西找不到人帮忙解决问题,出现问题的时候一般人的建议就是uninstall&reboot。我受够了,用MS东西一般用用就罢了,真要学东西,依当时我处的环境很难有所突破。
因为Linux当时在国内也没有怎么受到重视,直到一天我在计算机世界杂志上看到几天数据库软件厂商已经开始支持Linux了,我对学习Linux的信心很足了。后来一系列各大软件厂商的动作进一步证明我的选择没错,看看今天的现状,国内太多的人靠Linux养家糊口了。以前在网上的一个深圳朋友,也做Linux的firewall和vpn了,开了间公司,效益还不错。我们现在公司有海量级的用户数,所有这些server端都是由Linux支持的,如果没有Linux,也就没有我们公司。我想这一点老板比我更感激Linux icon_smile.gif

四、学习Linux的心得

通过这几年来对Linux的学习,一步一步摸着石头过河,到现在才刚刚上岸。我能起的作用可能可以告诉你一些学习的方法,当你遇到困难的时候有个人在旁边给予帮助。说句心里话,对于Linux的掌握我还只能算是很粗的东西,因为看了很多大师们的东西以后,发现自已离他们真得还很远。我不是要打击你的意思,是告诉你实情。但也可以告诉你,就这一点现在还是比较好混口饭吃。对她了解掌握的越深,你会发现他几乎什么都能做,有了实现自已商业机会的*台。

学习Linux分好几种层次,我个人觉得可以用中学里学的课文《疱丁解牛》来对比。说白了也就是对事物的认识一般都是由表及里的过程,学习Linux也是一样的。以前总觉的学理的人只要会数理化就行了,很多老师们由于自身的素质问题也不由自主的暗示着我们这样做。现在觉得很后悔当初没有学好文,文太重要了,很多时候他真的可以指导我们的形为和思维方式。最*看的很多管理上的书,最终上升到都是哲学方面的问题,很多东西一追踪根源到上升到哲学上来了。以前小的时候不懂事,觉得学这些东西有什么用,现在成熟一些了才发现这些东西真的不是件简单的事情。学习Linux有很多东西,我建议你首先要注意大师们在哲学上的思路。Linux是由Unix产生的,最终他的实现及他基础上很多应用软件都是基于一个哲学理念“把任务分解成一小块一小块完成”,可能现在你觉得这是件很简单的道理。但他不简单就在于所有有关Unix的东西都是基于这一理念的,看看我们常用的那些小工具吧,find,grep,gzip,tar,bash...等等,这个道理无不贯穿始终。现在IBM/MS等公司经常提到的WEB Service,实际上细想也是这样的,无非是把很多服务分散开来,然后有个总的业务逻辑来进行迅速的组合成一个新的服务,满足市场的迅速变化的需求。


结论1:首先要明白他的设计理念是缘自Unix的“把任务分解成一小块一小块完成”,建议你可以看这本电子书<<The Art of Unix Programming>>。是由Eric Steven Raymond写的,在google上很容易找到。这本书编重于编程,可以根据自已的兴趣选相应章节。我也没有全看完,也在研习中:-)


从使用着手,自已装个系统。建议你从Redhat开始。现在Redhat的安装基本上都是学习MS的做法,很图形化了。只要按照图形的指示,很容易让一个系统跑起来。我觉得初学者应该从这个入手,这样会快很多。因为Linux上的软件包都是由不同的开发团队做的,所以一般人不知道如果安装,redhat公司做的事情就是把这些东西组织起来,然后把这些软件卖给大家。因为他对这一行非常的精通,所以卖软件是其次,卖服务是主业。现在redhat已停止出个人版的了,改成专做企业的了,版本发行最*有些变动。现在最后一个版本好象是RH9.1。

装好系统后从使用应用软件开始,建议你先学BASH SHELL编程。因为你将业想往Oracl DBA发展的话,精通SHELL可以在管理上给你带来很大的便利。同时对于理解Linux系统的启动和一些软件的安装很有帮助。比如说你可以很清楚的了解Linux的整个启动过程,继而知道为什么要做那一步做了这个动作,对你将来处理实际碰到的问题至少可以明白知道问题出在哪。象很多我们日常在Unix/Linux的管理和脚本都是分不开的,精通BASH是我们需要完成的第一步。我指的是精通,不是一般的了解,因为你只有精通了,用的时间越长,你会发现script可以帮我们很方便的干很多事情。这里有一本电子书提供参考,是我至今见到写BASH最全,最好的一本。名叫《Advanced Bash Scripting Guide》,你可以在www.linuxdoc.org里找到。

这里也提一下www.linuxdoc.org里的文章是你学习Linux的良师益友,里面的很多文章都是非常不错的教材。主要分为几类:1、FAQ 2、HOWTO 3、Guider 4、man手册。其中的Guider有几本都是非常不错的入门书,你基本上可以不用去买本,美国出的印刷书都奇贵,你把那里的几本书看完就差不多了。插一句,现在P2P很流行,我基本上都不买专业的书了,大部分都可以找到电子版的下载。里面的HOWTO主要讲的一些具体的问题如何处理,门类也很多很杂,你可以根据自已现在的需求去看相应的文章。有空的时候可以多看看,这里面有些很好的solution,说不定什么时候就可以用上。FAQ的文章不多,建议挑些重要的看下。对于man手册,一般系统上都有,不过那里应该是最*的,*时用的不多。

结论2:自已装个Redhat,学好shell。

你用Unix/Linux时候,熟悉一个编辑器是必不可少的。用两种建议选择Emacs&VIM。Emacs比较大些,要花些空间,功能具强,以前用过一段时间但没有深入下去,所以了解也是通过大师们文章中反复提到这个关键字和一些信息知道的,用好了功能具强,相当于一个MS下的IDE开发环境;vim比较小些,功能也很强,是vi的增强版,我现在主要是用她来编辑东西。vim支持多种语法,可以用来编脚本、C、Java,功能足够我们用,学好需要一定的时间实践。因为我们用Unix/Linux,免不了有时要用console来控制,如果用惯了MS的编辑的话,你会非常痛苦,建议如果以后想长时间使用unix/linux环境的话,学好一种这环境下的编辑器。vim也有windows的版本,开始用起来会觉得不方便,便很快你会发现用VIM可以解决很多MS下编辑器不能解决的问题,不信你可以试试看。icon_smile.gif

结论3:学会一种Unix/Linux下编辑器Emacs或Vim,建议Vim(因为我在用,可以给你些指导 )


学习Linux有几种常用的服务软件需要会用,1) apache(http) 2) bind(dns) 3) pro-ftp(ftp) 4)samba(file share) 。需要掌握这些软件的安装和简单配置,这些软件在网上都有很详细的文档。至少apache要会安装和管理,因为这是最基本的WEB服务,今天在哪里都能用到。对于这些常用服务软件根据自已兴趣和环境要求做出选择,不一定要很精,但要会,建议精通。

结论4:学会常用服务软件的安装和配置,至少掌握apache


在Linux中还有很多小实用工具也需要掌握,这对你今后诊断问题和做相应的系统管理有很大帮助。如配置网卡地址的工具ifconfig,查找文件的工具find,行编辑的命令sed、awk,网络状态检查netstat、ping、nc等。这些工具可以在实践中慢慢学习。

结论5:在实践中学习一些常用小工具,如ifconfig netstat route等


掌握一到两种Opensource的数据库,如现在流行的两种数据库MySQL和PostgreSQL。MySQL用的人多些也比较简单,速度又快,做一些简单的数据库应用很多都用他做backend databaes server。如果你自已想学Oracle的话,可以直接学Oracle。Oracle的东西多且全,基本上所用的功能都能在Oracle找到。但如果你想更深一层学习DB的话,你可以考虑学PostgreSQL,他有源程序而且支持事务处理(trans-action)、子查询(sub-select),过程(procedure)、自定义函数(function)、光标(cursor),支持了大部份SQL92和99的标准。他的文档也比较全。


结论6:建议掌握一种Opensource的DB,如MySQL


建议对TCP/IP协议层深入了解,我想你们上研究生时应该讲的很深。但我还是建议你再多复习相关的知识点,很多时候网络上的问题可以通对你对TCP/IP的了解找到问题所在。建议你买那个steven的书叫<<tcp/ip详解>>,同时经常在身边准备好那几种状态切换的图,劳记在心,出问题的时候就可以知道是哪边网络不通,还是应用程度出了什么问题了。

结论7:建议再深入了解TCP/IP protocol


建议除了bash外,再学多一种在Unix环境下的RAD脚本语言python。我也正在学python,通过这段时间的了解发现,这个东东有很多功能而且在开发上可以比c/c++提高至少5倍效率。有时候偏向做系统管理,但掌握一本这种编程形的脚本对工作帮助很大,可以迅速的处理一些问题。BASH是侧重于人机交复的脚本,有些事情用BASH是无法完成的。Python在很多Internet应用上有很多module&package,你可以很方便的使用已有的功能,比如说自已做个小的WEB SERVER,做测试工具,做数据库查询等等。


结论8:建议学下Python


好了,今天先罗嗦到这里,还有很多想法愧于文笔有限,改天再详谈。

水*有限,权做参考,希望对于你的学习有所帮助。



快 乐

Elvis
2004-02-18于深圳

posted @ 2005-03-09 09:15  shipfi  阅读(845)  评论(0编辑  收藏  举报