第2章 Linux如何学习

目前Linux有两种主要的操作模式,分别是图形界面与命令行界面,那么学习Linux要用 X Window(图形界面)好还是 Command Line(命令行界面)好?这两种学习心态有什么优缺点呢?此外,有没有比较好的入门资料可供参考?学习Linux有困扰的时候应该要如何发问?要到哪里去搜寻网络资源?还有,怎样进行有智慧的提问?在这一章里面,就让我们好好谈一谈!

2.1 Linux当前的应用角色

在第1章“Linux是什么”当中,我们谈到了Linux相关的历史,并简单介绍了一下Linux这个Kernel 与 Linux distributions 等。而在开始进入 Linux 的基础学习之前,我们有必要了解一下应该要如何有效地学习Linux!但在谈到如何学习Linux之前,我们就得根据Linux目前的一般应用来说明一下,因为每种应用你所需要的Linux技能都不相同!了解Linux的应用后,你才好理解你需要的是什么样的学习方式!

由于 Linux kernel 非常小巧精致,可以在很多省电以及较低硬件资源的环境下面执行;此外,由于 Linux distributions 集成了非常多非常棒的软件(不论是专利软件或自由软件),因此也相当适合目前个人计算机的使用呢!当前的Linux常见的应用可略分为企业应用与个人应用两方面来说。

2.1.1 企业环境的利用

企业对于数字化的目标在于提供消费者或员工一些产品方面的信息(例如网页介绍),以及整合整个企业内部的数据统一性(例如统一的账号管理/文件管理系统等)。另外,某些企业例如金融业等,则强调在数据库、安全强化等重大关键应用。学术单位则很需要强大的运算能力等。所以企业环境运用Linux做些什么呢?

网络服务器

这是Linux当前最热门的应用了。Linux继承了Unix高稳定性的良好传统,其上面的网络功能特别稳定与强大。此外,由于GNU计划与Linux的GPL授权模式,让很多优秀的软件都在Linux上面发展,且这些在Linux上面的服务器软件几乎都是自由软件。因此,作为一个网络服务器,例如 WWW, Mail Server, File Server 等,Linux 绝对是上上之选。当然,这也是 Linux的强项。目前很多硬件厂商甚至搭配自家的硬件来销售Linux呢!例如下面的链接:

HP公司的产品:

http://h18000.www1.hp.com/products/servers/byos/linuxservers.html

IBM公司的产品:http://www-07.ibm.com/servers/eserver/tw/openpower/

关键任务的应用(金融数据库、大型企业网管环境)

由于个人计算机的性能大幅提升且价格便宜,所以金融业与大型企业的环境为了要增强自己机房的机器设备,因此很多企业渐渐走向Intel兼容的x86主机环境。而这些企业所使用的软件大多都是Unix操作系统平台的软件,总不能连过去发展的软件都一口气全部换掉吧!所以,这个时候符合Unix操作系统标准并且可以在x86上运行的Linux就渐渐崭露头角了。

目前很多金融业界都已经使用Linux作为他们的关键任务应用。所谓的关键任务就是该企业最重要的业务。举例来说,金融业最重要的就是那些投资者、账户的数据了,这些数据大多使用数据库系统来作为访问接口,这些数据很重要吧!很多金融业将这么重要的任务交给了Linux了!你说Linux厉不厉害 [9]

学术机构的高性能运算任务

学术机构的研究经常需要自行开发软件,所以对于可作为开发环境的操作系统需求非常迫切!举例来说,很多大学就很需要这方面的环境,好进行一些毕业专题的制作。又例如工程界流体力学的数值模式运算、娱乐事业的特效功能处理、软件开发者的工作平台等。由于 Linux的创造者本身就是个计算机性能癖,所以Linux有强大的运算能力;并且Linux具有支持度相当广泛的GCC编译软件,因此Linux在这方面的优势可是相当明显的!

举个鸟哥自己的案例好了,鸟哥之前所在的研究室曾运行一套空气质量模式的数值仿真软件。这套软件原本只能在Sun的SPARC机器上面运行,后来该软件转向Linux操作系统平台发展,鸟哥也将自己实验室的数值模式程序由Sun的Solaris平台移植到Linux上面呢。据美国环保署内部人员的测试,发现Linux平台的整体硬件费用不但比较便宜(x86系统)而且速度还比较快呢!另外,为了加强整体系统的性能,集群计算机系统(Cluster)的平行运算能力在近年来一直被拿出来讨论 [10]。所谓的平行运算指的是将原本的工作分成多份然后交给多台主机去运算,最终再将结果收集起来的一种方式。由于通过高速网络使用到多台主机,将原本需要很长运算时间的工作一下子完成了,大幅降低等待的时间。例如气象预报就很需要这样的系统来帮忙。而Linux操作系统则是这种架构下相当重要的一个环境平台呢!

目前鸟哥所在的昆山科技大学信息传播系里就有一套由 12 台双内核个人计算机组成的集群计算机架构;这一整组设备组起来差不多 30 万左右,不过却可以让我们的数值模式大幅降低等待时间!这12台主机装的就是Linux。

2.1.2 个人环境的使用

你知道你平时接触的电子商品中,哪些里面有Linux系统存在呢?其实相当多呢!我们就来谈一谈吧!

桌面计算机

所谓的桌面计算机,其实就是你我在办公室使用的计算机。一般我们称之为桌面系统。那么这个桌面系统平时都在做什么呢?大概都是这些工作吧:

上网浏览+实时通信(MSN, Skype, Yahoo 等);

文字处理;

网络接口的公文处理系统;

办公软件(Office)处理数据;

收发电子邮件;

想进行这些计算机工作时,你的桌面环境需要什么呢?很简单,就是需要窗口!因为上网浏览、文字排版的所见即所得界面以及电子公文系统等,如果没有窗口界面的辅助,那么将对用户造成很大的困扰。而众所皆知的,Linux早期都是由工程师所发展的,对于窗口界面并没有很需要,所以造成Linux不太亲和的印象。

好在,为了要强化桌面计算机的使用率,Linux与X Window System结合了。要注意的是,X Window System仅只是Linux上面的一套软件,而不是内核。所以即使X Window挂了,对Linux也可能不会有直接的影响呢!更多关于X Window System的详细信息我们留待第24章再来介绍。

近年来在各大团队的团结合作之下,Linux的窗口系统上面能够运行的软件实在是多得吓人!而且也能够应付企业的办公环境。例如美观的 KDE 与 GNOME 窗口界面,搭配可兼容微软Office 的 Open Office 软件,Open Office 包含了文字处理、电子表格、报表软件等,功能齐全。然后配合功能强大速度又快的 Firefox 浏览器,以及可下载信件的雷鸟(ThunderBird,类似微软的 Outlook Express),还有可连上多种实时通信的 Pidgin!Linux 能够做到企业所需要的各项功能啦!

手持系统(PDA、手机)

别跟我说在中国你没有用过手机!你知道吗,很多的手机、PDA、导航系统都可能使用的是Linux操作系统!而为了加强Linux操作系统在手机上面的统一标准,很多国际厂商合作了一个 LiMo 的计划(Linux Mobile phone),也有 Linux 的手机论坛,你可以参考一下下面的链接:

LiMo基金会:http://www.limofoundation.org/

Linux手机论坛:http://www.lipsforum.org/

除此之外,还有一些社群以及Google这个高超的家伙也在玩Linux手机!例如下面的链接说明:

OpenMoKo网站:http://www.openmoko.com/

Google的手机平台:http://code.google.com/android/

了解了吧?在你天天碰的手机里头可能就含有Linux操作系统呢!很有趣的发现吧!

嵌入式系统

在第0章当中我们谈到过硬件系统,而要让硬件系统顺利运作就得要编写合适的操作系统才行。

那硬件系统除了我们常看到的计算机之外,其实家电产品、PDA、手机、数码相机以及其他微型的计算机配备也是硬件系统。这些计算机配备也都是需要操作系统来控制的!而操作系统是直接嵌入于产品当中的,理论上你不应该会更改到这个操作系统,所以就称为嵌入式系统。

包括路由器、防火墙、手机、PDA、交换机、家电产品的微电脑控制器等,都可以是 Linux操作系统。酷学园(www.study-area.org)内的 Hoyo 网友就曾经介绍过如何在嵌入式设备上面载入Linux!目前红火的netbook中,很多也是使用Linux。

虽然嵌入式设备很多,大家也想要转而使用Linux操作系统,不过在中国,这方面的人才还是太少了!要玩嵌入式系统必须要很熟悉 Linux Kernel 与驱动程序的结合才行!这方面的学习可就不是那么简单。

总之,网络服务器、工作站计算机、桌面计算机等就是Linux目前最常被应用的环境了。而你如果想要针对桌面计算机,或者是网络服务器主机来学习的话,对于 Linux,你应该如何进行学习的课题呢?下面我们就来谈一谈。

2.2 鸟哥的Linux苦难经验回忆录

为什么鸟哥要先介绍Linux的应用,并且还要写这一章如何学习呢?原因就是鸟哥曾经受过伤害啊!什么伤害呢?是要看外科还是精神科?都不是啦!因为鸟哥玩Linux初期曾经犯了“天下新手都可能容易犯的错”,所以这里才先要跟大家耳提面命一番嘛!

2.2.1 鸟哥的 Linux 学习之路

接触Linux的原因

大约在1999年左右,鸟哥因为学业上的需要,被迫得去学习UNIX系统,那个时候我们使用的 UNIX 系统是 Sun 的 SPARC+Solaris 操作系统,当时的 Sun UNIX可不是一般人玩得起的,鸟哥也是一般人,所以当然也就玩不起 Sun UNIX。然而学业上所需要完成的计划方案还是需要进行的,那怎么办呢?这个时候就得要想一些替代方案。

听说有另外一种可以在 PC 上头运行的 UNIX Like 系统,叫做 Linux的,它的接口、功能以及基本的文件结构都跟UNIX差不多,甚至连系统稳定性也可以说是一模一样,而且对于硬件配备的要求并不高。既然玩不起几十万起跳的UNIX系统,那么使用一些即将淘汰的计算机配备来架设一部Linux主机吧!

在经过了一些时候的努力之后,竟然真的被鸟哥架起来了(当时的版本是 Red Hat 6.1)。那么就赶快先来熟悉它,然后等到有了一定的经验值“升级”成老手之后,再来玩UNIX,以免玩坏了几十万的大计算机。这似乎是不错的方式,所以就开始了鸟哥的Linux学习之路。

错误的学习方式阶段

由于鸟哥之前连UNIX是什么都没听过,当然就更别提Linux这套操作系统,更可怕的是,听说Linux还需要使用到命令行模式!刚开始碰还真的有点紧张。还好,鸟哥玩计算机的历史可以追溯到之前的DOS年代,所以对于命令行模式多少还有点概念,这过去的经验或许应该可以撑上一阵子吧?但是没想到 Linux 的命令真是“博大精深”。早期的 DOS 概念简直就是不够用,因此,为了偷懒,一开始鸟哥就舍弃命令行模式,直接在X-Window上面玩起来了!

在还没有安装Linux之前,鸟哥就买了两三本书,每本都看了N遍,发现到每一本书的前半段,在Linux的基础方面的介绍谈得不多,基本就是以一些工具教你如何设置一些很重要的参数文件,但偏偏没有告诉你这些工具到底做了什么事情或修改了哪些文件?不过书的后半段却放上了很多的架站文件,然而却都有点“点到为止”,所以当时总觉得Linux很有点朦朦胧胧的感觉,而且在当时最严重的现象是只要一出现问题,身为用户的鸟哥完全无法解决,所以只好选择重新安装,重新设置与书本教的内容完全一模一样的环境!不过,即使如此,很多时候仍然解决不了发生问题的窘境!

那个时候真的很好笑,由于鸟哥并非信息系出身,所以身旁并没有懂计算机/操作系统的朋友,也就不知道怎么发问!曾经为了要安装光驱里面的数据,放进光驱后,利用X Window 的自动挂载将光盘挂载起来,用完之后却发现无法退出光驱,最终竟然用回形针将光盘强制退出。这样光盘就无法再使用,只好又重新启动……

在当时,由于知道Linux可以用来作为很多功能的服务器,而鸟哥的研究室当时又需要一台电子邮件服务器,所以鸟哥就很高兴地借用书上的说明,配合 Red Hat 6.1 提供的一些工具程序,例如 Linuxconf, netcfg 等的工具来架设。然而由于工具程序的整合度并不见得很好,所以经常修改一个小地方会搞上一整天!

好不容易使用了所有的知道的工具来架设好了鸟哥的电子邮件服务器,请注意,这个时候鸟哥的Linux 主机上面开了多少的端口/服务其实当时的鸟哥并不清楚,当时认为俺的机器就只有我认识的一些朋友知道而已,所以反正机器能运行就好了,其他的设置似乎也就不这么重要。

恶梦的开始

然而事实上,这种学习心态却造成了后来鸟哥恶梦的开端!怎么说呢?虽然Linux号称需要的硬件等级不高,不过 X Window 却是很耗系统资源的一项软件,因为只要涉及图形界面的话,需要亲和力,就需要多一点内存、多一些硬盘空间啦,显卡与CPU要好一点,且早期的图形界面整合度不是很高,所以造成 X Window 死机的机会是很高的。

在鸟哥当时安装的Linux主机当中,使用的是旧旧的计算机,系统的配备并不高,在运行了X Window 之后,剩下可以使用的物理内存其实已经不多了,再运行其他的服务,例如邮件服务,实际上很有点吃力。所以当时的一些同仁经常抱怨我们的机器怎么老是服务不良?这个 Linux 怎么跟“号称稳定”的名号不符?而在鸟哥登录系统检查之后,才发现,X Window又挂了?当时还不清楚原来可以使用 ps 及 kill 等命令将 X Window 杀掉即可让 Linux 恢复正常,竟然是用重启的方式来重新启动Linux,现在想起来,当时真糗。

后来再重新安装一次,并选择了文字界面登录系统,果然系统是稳定多了!服务上面似乎也就安定了许多。不过,你以为恶梦这样就解决了吗?当然不是。在鸟哥的机器服务了一阵子之后,我老板竟然接到上层单位的来信,信中说明:贵单位的主机可能有尝试入侵国外主机之嫌,敬请妥善改善!这不就是警告信吗?当时至少还知道有系统注册表文件可以分析确切日期有谁在线,没想到一登录之后才发现,搞了老半天,原来我们的机器被入侵了!而身为管理者的鸟哥竟然还茫然不知,这真是一大败笔。

由图形界面转到文字界面竟然用“重新安装”来处理?不要怀疑,当初没有学好Linux的时候,就是以为需要重新安装,尤其Windows的经验告诉我们,这样做“才是对的”。

在赶快重新安装,并且重新参考很多文件,架设好了防火墙之后,以为终于从此就可以高枕无忧了。结果还是不尽然的,因为我们的电子邮件服务器早就被当成垃圾转信站,造成局域网内网络流量的大量提高,导致经常会无法连上因特网⋯⋯

一个贵人的出现

在经过了一年多以及经历那么多事件后,鸟哥还是没有觉悟!后来因为某些小事情无法解决而上网搜寻,竟然找到酷学园,并主动发出 email 给站长“网中人”(用户 netman)先生,网中人完全没有就我的问题来回答,竟然是大发雷霆地臭骂鸟哥一顿。怎么会这样?鸟哥从小到大念书几乎没有被念过,竟然读到这么大了还被人家骂!真可悲,于是乎痛定思痛,遵循网中人大哥的教诲,从他的网站(http://www.study-area.org)的内容出发,并将鸟哥原本的网站全部砍掉重练!

花了两三个月在网中人的网站上学习到 Linux 最基础的文件结构、命令模式与脚本(Shell and shell script)、软件管理方式和资源与账号管理等,而在将这些基础的架构理解之后,再回头看一下各式各样的server启动服务与相关的技巧,发现原来如此,怎么这么简单的东西当初弄得我几天几夜睡不好?尤其最重要的登录信息的追踪,帮鸟哥避免了很多不必要的系统伤害行为。

此外,为了方便鸟哥本身的管理,我于是开始了一些脚本(shell script)的编写,让日常的管理变得更轻松而有效率。当然,这些工作几乎都是在文字界面下面完成的,图形界面之下的工作毕竟还是有限的。

编写文件的有趣经验

后来鸟哥为了想要赶快毕业,但希望能够让我在实验室的努力不被学弟学妹所搞烂,所以开始编写一些FAQ的文件。但是没想到越写越发现自己懂得竟然是那么少,于是就越写越多,数据也越查越多,渐渐就有“鸟哥的Linux私房菜”网站的出现。而在写了这个网站之后发现到更多的朋友其实与鸟哥有相同的经验,他们也在讨论区上面提供非常多有用的意见,于是网站就越来越热闹了。

从编写文件的经验里面也接触到很多业界的朋友,才发现一台Linux主机其实是做不了什么大事的。重点是我们要让Linux解决什么问题,而不是单纯只是去学习架站而已。尤其酷学园的ZMAN对鸟哥网站关于服务器方面的数据影响很大,我们不能够让Linux死板地定位在那边,还有更多可用的功能可以让我们去思考!

鸟哥的忠言,希望不会逆耳

经过上面鸟哥学习之路的经验分享之后,我想,你应该也慢慢了解鸟哥想要推出这本经验之谈的书籍最主要的目的了,那就是想让想要学习Linux的玩家可以快速且以较为正确的心态来进入Linux的世界,而不要像鸟哥在Linux的环境中打转了一年多之后才来正确地创建概念。希望我这老家伙的苦口婆心不要让你误会啊!

但是玩Linux并不一定要很辛苦的。因为你玩Linux的目的跟我又不一样!鸟哥是为了要学习Linux上面的功能,好应用在未来学术研究领域上,所以才这样接触它,那难道你不能只为了要使用Linux的桌上办公环境吗?是的。所以鸟哥想来谈一谈Linux的学习者心态!

2.2.2 学习心态的分别

架不架站有所谓

大家都知道Linux最强项的地方在于网络,而Windows是赢在用户界面较为亲善。然而很多用户还是经常会比较Linux与Windows这两套相当流行的操作系统,初次接触Linux的人比到最后的结果都是说:“Linux怎么都要使用文字界面来架站,怎么这么麻烦,还是Windows比较好用。”事实上这么比较实在是有点不公平且没有意义,为什么呢?基本上,Windows 是很普及的一个操作系统,这点我们都无法否认,但是,一般使用Windows的用户用Windows来做什么?

上网、实时通讯、聊天打发时间;

做做文字工作,处理电子表格;

玩游戏及其他休闲娱乐。

当然,Windows 的工作环境还有很多可以发展的空间,不过这里我们主要以一般用户的角度来看。说了上面这几个工作,请问一下,一般用户谁有在使用Windows玩架站?很少对不对!是的!真的是很少人在玩Windows的架站。那么如何可以说Linux无法普及是文字界面惹的祸呢?鸟哥相信,如果是一般用户,应该不至于想要使用 Linux 来架设网站,所以美美的X-Window 对于一般用户已经相当好用了,实在没有必要来学习架站的原理与过程,还有防火墙的注意事项等。

话再说回来,那么你干嘛要使用Linux架站呢?“因为Linux的网络功能比较强。”说得没错,但是,相对地,比较强的项目可能也具有比较“危险”的指数,当你一开始学习 Linux 就只想满脑子的玩架站,却又不好好弄懂一点Linux与网络基础的话,在Windows下面大不了是被攻击,但是在Linux下面,却有可能让你吃上官司的。像上面提到的鸟哥的惨痛教训!

只是图形界面,可以吗

而如果你已经习惯以图形化界面来管理你的Linux主机时,请特别留意,因为Linux的软件是由多个团队研发出来的,图形界面也仅是一个团队的研发成果,你认为,一个团队的东西可以将所有团队的内容都完整无缺地表现出来吗?如果你依赖图形久了,那如果你的系统出问题,看来就只能求助于外面的工程师了,如此一来,有学跟没有学有何不同?

曾经有个朋友问我:“Linux 怎么这么麻烦?架设一个 DNS 真是不容易呀!不像 Windows,简单得很,按几个按钮就搞定了!”这个时候鸟哥就回答了一句话:“不会呀!如果你只是想要安装DNS的话,网络上面一大堆按部就班的设置方式教学,照着做,一样可以在十分钟之内就完成一个DNS主机的设置呀!”他想一想,确实有道理!同时鸟哥又反问了一件事:“你以为学Windows就不需要了解DNS的概念吗?你有尝试过使用Windows架设DNS却无法让它实在运行的问题吗?果真如此的话,这个时候你怎么解决?”他愣住了!因为在Windows上面他确实也没有办法解决!所以说,不论是学哪一套操作系统,理论的基础都是不变的,也只有了解了基础之后,其他的技能才能够触类旁通呀!

网络上一些老手不太喜欢搞图形界面,是因为觉得图形界面默认的设置经常不合他们的意,尤其是图形化界面软件为了方便用户,经常自己加入一些设置,但是这些设置却往往是因地制宜的,所以反而经常会导致架设的网站无法正常工作!这点在网络新闻组上面已经讨论得相当清楚了!与其如此,何不一开始就玩文字界面,去弄懂它呢?

学习Linux还是学习distributions

此外,很多玩过 Linux 的朋友大概都会碰到这样的一个问题,就是 Linux distributions 事实上是非常多的。而每个distribution所提供的软件内容虽然大同小异,然而其整合的工具却都不一样,同时,每种软件在不同的distribution上面摆放的目录位置虽然也是大同小异,然而某些配置文件就是摆在不同的目录下,这个时候你怎么找到该信息?难道非得来一套distribution 就学它的主要内容吗?这么一来,市面上少说也有数十套 Linux distributions,每一套都学?如果你时间多到如此地步,那鸟哥也不知道该说什么好了。如果是我的话,那么我会干脆直接学习一些Linux的基本技巧,可以让我很轻易地就找到不同版本之间的差异性,而且学习之路也会变得更宽广。

鸟哥的观念不见得一定适合你,不过就只是以一个过来人的身份给个小建议,要么就不要拿Linux来架站,跟Windows一样,玩玩X-Window就很开心了,要不真的得花一点时间来玩一玩比较深入的东西,“要怎么收获就怎么栽”,虽然努力不一定有成果,但最起码,有成果的时候,成果肯定是自己的!

2.2.3 X Window 的学习

如果你只是想要拿Linux来替代原本的Windows桌面的话,那么你几乎不需要通过“严格的学习”。目前的 Linux distribution 绝大部分默认就是以桌面系统的角度来安装所需要的软件,也就是说,你只要将Linux安装好,接下来就能够进入Linux玩弄。根本就不需要什么学习。你只需要购买一本介绍Linux 桌面设置的书籍,里面有说明输入法、打印机设置、因特网设置的书籍就很够用了。鸟哥建议的distributions包括有:

Ubuntu 下载: http://www.ubuntu.com/getubuntu/download

OpenSuSE 下载: http://software.opensuse.org/

Fedora 下载: http://fedoraproject.org/en/get-fedora

Mandriva 下载: http://www.mandriva.com/en/download/free

另外还有一些网络上面的桌面调教文章也可以参考的!包括:

杨老师的图解桌面http://apt.nc.hcc.edu.tw/docs/FC3_X/

Ubuntu中文指南http://ubuntuguide.org/wiki/Ubuntu:Hardy_cn

如果想知道更多关于图形用户界面能够使用的软件信息,可以参考下面的链接:

Open Office(http://www.latex-project.org/):

就是办公室软件,包含电子表格、文字处理与报表软件等。

Free Maid(http://freemind.sourceforge.net/wiki/index.php/Main_Page):

可绘制组织结构的软件,酷学园里的SAKANA曾用过,鸟哥觉得挺好看。

AbiWord(http://www.abisource.com/):

非常类似微软的Word的文字处理软件。

Tex/LaTeX(http://www.latex-project.org/):

可进行文件排版的软件(很多自由软件文件使用此编辑器)。

Dia(http://dia-installer.de/index_en.html):

非常类似微软Visio的软件,可绘制流程图。

Scribus(http://www.scribus.net/):

专业的排版软件,老实说,鸟哥确实不会用。

GanttProject(http://ganttproject.biz/):

可绘制甘特图(就是时程表)的软件。

GIMP(http://www.gimp.org/):

在业界相当有名的绘图自由软件!

如果你不需要很特别的专业软件的支持,那么一般的办公环境中,上面的这些软件全部免费,而且相信已经足以应付你日常所需的工作环境。不过,千万记得,玩X Window就好,不要搞架站的东西!不论是Windows/Linux/Mac/Unix 还是什么的,只要是玩到架站,它就不是这么安全的东西。所以,很多东西都需要学习。下面我们就来谈谈,如果有心想要向Linux操作系统学习的话,最好具备什么心态呢?

2.3 有心向Linux操作系统学习的学习态度

为什么大家老是建议学习 Linux 最好能够先舍弃 X Window 的环境呢?这是因为 X Window 也只是 Linux 内的“一套软件”,而不是“Linux 内核”。此外,目前发展出来的 X Window 对于系统的管理上还是有无法掌握的地方,举个例子来说,如果 Linux 本身识别不到网卡的时候,请问如何以 X Window来识别这个硬件并且驱动它呢?

还有,如果需要以 Tarball(源码)的方式来安装软件并加以设置的时候,请以 X Window 来架设它。这可能吗?当然可能,但是这是在考验“X Window 开发商”的技术能力,对于了解 Linux 架构与内核并没有多大的帮助的!所以说,如果从只是想要“会使用Linux”的角度来看,那么确实使用X Window 也就足够了,反正搞不定的话,花钱请专家来搞定即可;但是如果想要更深入学习 Linux 的话,那么命令行模式才是不二的学习方式!

以服务器或者是嵌入式系统的应用来说,X Window 是非必备的软件,因为服务器是要提供客户端来连接的,并不是要让用户直接在这台服务器前面按键盘或鼠标来操作的。所以图形界面当然就不是这么重要了。更多的时候甚至大家会希望你不要启动 X Window 在服务器主机上,这是因为X Window通常会耗掉很多系统资源的缘故!

再举个例子来说,假如你是个软件服务的工程师,你的客户人在上海,而你人在远方的北京。某一天客户来电说他的Linux服务器出了问题,要你马上解决它,请问:要你亲自去上海去修理?还是他搬机器过来让你修理?或者是直接请他开个账号给你进去设置即可?想当然,就会选择开账号给你进入设置即可。因为这是最简单而且迅速的方法。这个方法通常使用文字界面会较为单纯,使用图形界面则非常麻烦。所以,这时候就得要学学文字界面来操作Linux比较好啦!

另外,在服务器的应用上,文件的安全性、人员账号的管理、软件的安装/修改/设置、登录文件的分析以及自动化工作排程与程序的编写等,都是需要学习的,而且这些东西都还未涉及服务器软件呢。所以,建议你得要这样学习才好。

2.3.1 从头学习 Linux 基础

其实,不论学什么系统,“从头学起”是很重要的!还记得你刚接触微软的Windows时都在干什么?还不就是由资源管理器学起,然后慢慢玩到控制面板、桌面管理,然后还去学办公软件,我想,你总该不会直接就跳过这一段学习的历程吧?那么Linux的学习其实也差不多,就是要从头慢慢地学起啦!不能够还不会走路之前就想要学飞了吧!

经常有些朋友会写信来问鸟哥一些问题,不过,信件中大多数的问题都是很基础的!例如“为什么我的用户个人网页显示我没有权限进入”、“为什么我执行一个命令的时候,系统告诉我找不到该命令”、“我要如何限制用户的权限”等的问题,这些问题其实都不是很难的,只要了解了Linux的基础之后,应该就可以很轻易地解决掉这方面的问题呢!所以请耐心、慢慢地将后面的所有章节内容都看完。自然你就知道如何解决了!

此外,网络基础与安全也很重要,例如TCP/IP的基础知识、网络路由的相关概念等。很多的朋友一开始问的问题就是为什么我的邮件服务器主机无法收到信件。这种问题相当困扰,因为发生的原因太多了,而朋友们经常一接触Linux就是希望架站!根本没有想到要先了解一下Linux的基础,这是相当伤脑筋的。尤其近来计算机黑客(Cracker)相当多 (真奇怪,闲着没事干的朋友还真是不少),一个不小心你的主机就被当成黑客跳板了。甚至发生被警告的事件也层出不穷。这些都是没能好好注意一下网络基础的原因。

所以,鸟哥希望大家能够更了解 Linux,好让它可以为你做更多的事情!而且这些基础知识是学习更深入的技巧的必备条件。因此建议。

1.计算机概论与硬件相关知识

因为既然想要走Linux这门路,信息相关的基础技能也不能没有啊!所以先理解一下基础的硬件知识,不一定要全懂。又不是真的要你去组建计算机,但是至少要“听过、有概念”。

2.先从Linux的安装与命令学起

没有 Linux 怎么学习 Linux 呢?所以好好安装起一套你需要的 Linux 吧!虽然说 Linuxdistributions很多,不过基本上架构都是大同小异的,差别在于界面的亲和力与软件的选择不同罢了。选择一套你喜欢的就好了,倒是没有哪一套特别好说。

3.Linux操作系统的基础技能

这些包含了用户/用户组的概念、权限的观念、程序的定义等,尤其是权限的概念,由于不同的权限设置会妨碍你的用户的便利性,但是太过于便利又会导致入侵的可能。所以这里需要了解一下你的系统。

4.务必学会vi文本编辑器

Linux 的文本编辑器多到会让你数到生气。不过,vi 却是强烈建议要先学习的,这是因为 vi会被很多软件所调用,加上所有的 Unix like 系统上面都有 vi,所以你一定要学会才好。

5.Shell与Shell脚本的学习

其实鸟哥上面一直谈到的“命令行界面”说穿了就是一个名为shell的软件。既然要玩命令行界面,当然就是要会使用shell的意思。但是shell上面的数据太多了,包括“正则表达式”、“管道命令”与“数据流重定向”等,真的需要了解。此外,为了帮助你在将来的管理服务器更加方便,shell脚本也是挺重要的。

6.一定要会软件管理员

因为玩Linux经常会面临自己安装驱动程序或者是安装额外软件的时候,尤其是嵌入式设备或者是学术研究单位等。这个时候Tarball/RPM/DPKG等软件管理员的安装方式对你来说就重要!

7.网络基础的建立

如果上面你都通过了,那么网络的基础就是下一阶段要接触的,这部分包含了“IP概念”、“路由概念”等。

8.如果连网络基础都通过了,那么网站的架设对你来说,简直就是“太简单啦”!

在一些基础知识上,可能的话,当然得去书店找书来读啊!如果你想要在网络上面阅读的话,那么这里推荐一下由Netman大哥主笔的Study-Area里面的基础文章,相当实用!

计算机基础(http://www.study-area.org/compu/compu.htm)

网络基础(http://www.study-area.org/network/network.htm)

2.3.2 选择一本易读的工具书

一本好的工具书是需要的,不论是未来作为查询之用,还是在正确的学习方法上。可惜的是,目前坊间的书大多强调速成的Linux教育,或者是强调Linux的网络功能,却欠缺了大部分的Linux基础管理,鸟哥在这里还是要再次强调,Linux的学习历程并不容易,它需要比较长的时间来适应、学习与熟悉,但是只要能够学会这些简单的技巧,这些技巧却可以帮助你在各个不同的操作系统之间遨游。

你既然看到这里了,应该是已经取得了鸟哥的Linux私房菜——基础学习篇了吧!希望这本书可以帮助你缩短基础学习的历程,也希望能够带给你一个有效的学习方法!而在这本书看完之后,或许还可以参考一下Netman推荐的相关网络书籍:

http://linux.vbird.org/linux_basic/0120howtolinux/0120howtolinux_1.php

不过,要强调的是,每个人的阅读习惯都不太一样,所以,除了大家推荐的书籍之外,你必须要亲眼看过这本书籍,确定你可以吸收得了书上的内容,再去购买!

2.3.3 实践再实践

要增加自己的体力,就是只有运动;要增加自己的知识,就只有读书;当然,要增加自己对于Linux的认识,大概就只有实践经验了。所以,赶快找一台计算机,赶快安装一个Linux distribution,然后快点进入Linux的世界里面!相信对于你自己的Linux能力必然大有所获!除了自己的实战经验之外,也可以参考网络上一些善心人士整理的实践经验!例如最有名的Study-Area(http://www.study-area.org)等网站。

此外,人脑不像计算机的硬盘一样,除非硬盘坏掉了或者是数据被你删除了,否则存储的数据将永远记忆在硬盘中。在人类记忆的曲线中,你必须要不断地重复练习才会将一件事情记得比较熟。同样,学习Linux也一样,如果你无法经常摸索的话,那么,学了后面的,前面的忘光光!学了等于没学,这也是为什么鸟哥当初要写“鸟哥的私房菜”这个网站的主要原因,因为,我的忘性似乎比一般人还要好。所以,除了要实践之外,还得要常摸索!才会熟悉Linux而且不会怕它呢!

好了,下面列出几个学习网站来提供大家作为参考实践的依据:

Study-Area:http://www.study-area.org

鸟哥的私房菜馆:http://linux.vbird.org

卧龙大师的网络技术文件(繁体):http://linux.tnc.edu.tw/techdoc/

中国Linux团队:http://www.linux.org.cn/

狼主的网络实验室http://netlab.kh.edu.cn/index.htm

吴仁智的文件集:http://www.cses.tcc.edu.cn/~chihwu/

由于不同的网站当初编写的时候所用的Linux软件或版本与目前的主流版本并不相同,因此参考他人的实践经验时,必须要特别留意对方的版本,否则反而可能造成你的困扰。

2.3.4 发生问题怎么处理

我们是“人”不是“神”,所以在学习的过程中发生问题是很常见的。重点是,我们该如何处理在自身所发生的Linux问题呢?在这里鸟哥的建议是这样的流程。

1.在自己的主机/网络数据库上查询How-To或FAQ(帮助)

其实,在Linux主机及网络上面已经有相当多的FAQ整理出来了!所以,当你发生任何问题的时候,除了自己检查,或者到上述的实践网站上面查询一下是否有设置错误的问题之外,最重要的当然就是到各大FAQ的网站上查询。以下列出一些有用的FAQ与How-To网站给你参考一下:

Linux自身的文件数据:/usr/share/doc(在你的Linux系统中)

CLDP中文文件计划:http://www.linux.org.cn/CLDP/

The Linux Documentation Project:http://www.tldp.org/

上面比较有趣的是那个 TLDP(The Linux Documentation Project),它几乎列出了所有 Linux上面可以看到的文献数据,各种How-To的做法等,虽然是英文的,不过,很有参考价值。

除了这些基本的FAQ之外,其实,还有更重要的问题查询方法,那就是利用谷歌(Google)帮你去搜寻答案呢!在鸟哥学习Linux的过程中,如果有什么奇怪的问题发生时,第一个想到的,就是去http://www.google.com搜寻是否有相关的议题。举例来说,我想要找出Linux下面的NAT,只要在上述的网站内,输入Linux与NAT,立刻就有一堆文献运行出来了!真的相当优秀好用。你也可以通过谷歌来找鸟哥网站上的数据呢!

Google:http://www.google.com

鸟哥网站:http://linux.vbird.org/Searching.php

2.注意信息输出,自行解决疑难杂症

一般而言,Linux 在下达命令的过程当中,或者是 log file(登录文件)里头就可以自己查得错误信息了,举个例子来说,当你执行:

[root@linux ~]# ls -l/vbird

由于系统并没有/vbird 这个目录,所以会在屏幕前显示:

ls:/vbird: No such file or directory

这个错误信息够明确了吧!系统很完整地告诉你“查无该数据”!所以请注意,发生错误的时候,请先自行以屏幕前的信息来进行debug(排错),然后,如果是网络服务的问题时,请到/var/log/这个目录里头去查阅一下 log file,这样可以几乎解决大部分的问题了!

3.搜寻过后,注意网络礼节,在讨论区大胆发言吧

一般来说,如果发生错误现象,一定会有一些信息对吧!那么当你要请教别人之前,就得要将这些信息整理下,否则网络上人家也无法告诉你解决的方法。这一点很重要的喔!

万一真的经过了自己的查询却找不到相关的信息,那么就发问吧!不过,在发问之前建议你最好先看一下“提问的智慧http://phorum.vbird.org/viewtopic.php?t=96”这一篇讨论。然后,你可以到下面几个讨论区发问看看:

酷学园讨论区:http://phorum.study-area.org

鸟哥的私房菜馆讨论区:http://phorum.vbird.org

telnet://bbs.sayya.org

不过,基本上去每一个讨论区回答问题的熟手其实都差不多是那几个,所以你的问题不要重复发表在各个主要的讨论区!举例来说,鸟园与酷学园讨论区上的朋友重复性很高,如果你两边都发问,可能会得到反效果,因为大家都觉得,另外一边已经回答你的问题了。

4.Netman兄给的建议

此外,Netman兄提供了一些学习的基本方针,提供给大家参考:

在Windows里面,程序有问题时,如果可能的话先将所有其他程序保存并结束,然后尝试按救命三键(Ctrl+Alt+Delete),将有问题的程序(不要选错了程序)“结束工作”,看看能不能恢复系统。不要动不动就直接关机或重启。

有系统地设计文件目录,不要随便到处保存文件以至以后不知道放哪里了,或找到文件也不知道为何物。

养成一个做记录的习惯。尤其是发现问题的时候,把错误信息和引发状况以及解决方法记录清楚,同时最后归类及定期整理。别以为你还年轻,等你再弄多几年计算机了,你将会非常庆幸你有此习惯。

如果在网络上看到任何好文章,可以为自己留一份 copy,同时定好题目,归类存档。(鸟哥注:需要注意知识产权!)

作为一个用户,人要迁就机器;做为一个开发者,要机器迁就人。

学写脚本的确没设置server那么好玩,不过以我自己的感觉是:关键是会“偷”,偷了会改,改了会变,变则通矣。

在Windows里面,设置不好设备,你可以骂它;在Linux里面,如果设置好设备了,你得要﹗感激它

2.4 鸟哥的建议(重点在Solution 的学习)

除了上面的学习建议之外,还有其他的建议吗?确实是有的。其实,无论做什么事情,对人类而言,两个重要的因素会造成我们学习的原动力:

成就感

兴趣

很多人问过我,鸟哥是怎么学习Linux的?由上面鸟哥的悲惨Linux学习之路你会发现,原来我本人对于计算机就蛮有兴趣的,加上工作的需要,而鸟哥又从中得到了相当多的成就感,所以,就一发不可收拾地爱上Linux!因此鸟哥个人认为,学习Linux 如果没有兴趣,它对你也不是什么重要的工具,那么就不要再学下去了!因为很累人,而如果你真的想要使用这一套优良的操作系统,除了前面提到的一些建议之外,得要培养出兴趣与成就感才行!那么如何培养出兴趣与成就感呢?有几个方向可以提供给你参考:

建立兴趣

Linux上面可以玩的东西真的太多了,你可以选择一个有趣的课题来深入研究!不论是Shell还是图形界面等,只要能够玩出兴趣,那么再怎么苦你都会不觉得!

成就感

成就感是怎么来的?说实在话,就是“被认同”来的!怎么被认同呢?写心得分享啊!当你写了心得分享,并且公告在BBS上面,自然有朋友会到你的网页去瞧一瞧,当大家觉得你的网页内容很棒的时候,你肯定会加油继续分享下去而无法自拔的!那就是我啦。

就鸟哥的经验来说,你“学会一样东西”与“要教人家会一样东西”思考的思路是不太一样的!学会一样东西可能学一学会了就算了!但是要“教会”别人,那可就不是闹着玩的。得要思考相当多的理论性与实务性方面的知识,这个时候,你所能学到的东西就更深入了。鸟哥经常说,我这个网站对我在Linux的了解上面真的帮助很大!

协助回答问题

另一个创造成就感与满足感的方法就是“助人为乐!”当你在BBS上面告诉一些新手,回答他们的问题,你可以获得的可能只是一句“谢谢”!但是那句话真的会让人很有快乐的气氛。很多的老手都是因为有这样的满足感,才会不断地协助新来的朋友的呢。此外,回答别人问题的时候,就如同上面的说明一般,你会更深入地去了解每个项目,又多学会了好多东西呢!

参与讨论

参与大家的技术讨论一直是一件提升自己能力的快速途径。因为有这些技术讨论,你提出了意见,不论讨论的结果是对是错,对你而言,都是一次的知识成长。这很重要!目前台湾地区举办 Linux活动的能力是数一数二的 Linux 团队“酷学园”(Study Area),每个月不定期地举办自由软件相关活动,有兴趣的朋友可以看看:

http://phorum.study-area.org/index.php/board,22.0.html

此外,除了这些鸟哥的经验之外,还有在BBS上面有一份对于Linux新手相当有帮助的文件资料,大家可以多看一看:

李果正先生的GNU/Linux初学者之旅:http://info.sayya.org/~edt1023/linux_entry.html

鸟哥这里有也一个备份:

http://linux.vbird.org/linux_basic/0120howtolinux/0120howtolinux_3.php

信息人的有效学习(洪朝贵教授网页):http://people.ofset.org/~ckhung/a/c013.php

除了这些基本的初学者建议外,其实,对于未来的学习,这里建议大家要“眼光看远”!一般来说,公司发生问题时,他们绝不会只要求各位单独解决一台主机的问题而已,他们需要的是整体解决方案(Total Solution)。而我们目前学习的 Linux 其实仅是在一部主机上面进行各项设置而已,还没有到达解决整体公司所有问题的状态。当然啦,得要先学会Linux相关技巧后,才有办法将这些技巧用之于其他的问题上面!

所以,大家在学习Linux的时候,千万不要有“门户之见”,认为微软的东西就比较不好,否则,未来在职场上,竞争力会比人家弱的!有办法的话,多接触,不排斥任何学习的机会!都会带给自己很多的成长!而且要谨记:“不同的环境下,解决问题的方法有很多种,只要行得通,就是好方法!”

2.5 重点回顾

Linux在企业应用方面,着重于网络服务器、关键任务的应用(金融数据库、大型企业网管环境)及高性能运算等任务。

Linux在个人环境的使用上着重于桌面计算机、手持系统(PDA、手机)、嵌入式设备(如家电用品等)。

Linux distributions 有针对桌面计算机所开发的,例如 Ubuntu, OpenSuSE 及 Fedora 等,是学习X Window 的好工具。

有心向Linux学习者,应该多接触文字界面(shell)的环境,包括正则表达式、管道命令与数据流重定向,最好都要学习!最好连shell脚本都要有能力自行编写。

实践是学习Linux的最佳方案,空读书,遇到问题也不见得能够自己处理的!

学习Linux时,建立兴趣与成就感是很重要的,另外,协助回答问题、参与团队活动也是增加热情的方式!

Linux文件计划的网站是http://www.tldp.org。

2.6 本章习题

实践题部分

我的 Linux 系统上面老是出现问题,它有一个错误信息为“fatal: SASL per-connection security setup”,请帮我找出可能的原因为何?

Windows 的操作系统当中,老是自动出现一个名为 internet optimizer的软件,我想要知道它是什么,可以怎么找?

想一想再回答,为何你想要学习Linux?有没有持续学习的动力?你想要Linux帮你达成什么样的工作目标?

问答题部分

我的Linux发生问题,我老是找不到正确的答案,想要去http://phorum.study-area.org提问,应该要先做哪些工作才发问?

你觉得学习Linux最重要的一环是什么?

什么是TLDP?全名为何?网站在哪里?