﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Thinking in XiaoQiang-文章分类-Linux</title><link>http://www.blogjava.net/uiiang/category/4184.html</link><description>世人皆有悲哀，只有你不明白</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 07:30:03 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 07:30:03 GMT</pubDate><ttl>60</ttl><item><title>完全用GNU/Linux工作，摈弃Windows</title><link>http://www.blogjava.net/uiiang/articles/18225.html</link><dc:creator>小强</dc:creator><author>小强</author><pubDate>Fri, 04 Nov 2005 15:53:00 GMT</pubDate><guid>http://www.blogjava.net/uiiang/articles/18225.html</guid><wfw:comment>http://www.blogjava.net/uiiang/comments/18225.html</wfw:comment><comments>http://www.blogjava.net/uiiang/articles/18225.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/uiiang/comments/commentRss/18225.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/uiiang/services/trackbacks/18225.html</trackback:ping><description><![CDATA[<P>我已经半年没有使用 Windows 的方式工作了。Linux 高效地完成了我所有的工作。 <BR><BR>GNU/Linux 不是每个人都想用的。如果你只需要处理一般的事务，打游戏，那么你不需要了解下面这些了。 <BR><BR>我不是一个狂热的自由软件份子，虽然我很喜欢自由软件。这篇文章也不是用来推行自由软件运动的，虽然我觉得自由软件运动是非常好的。 <BR><BR>这篇文章也不是用来比较 Linux 和 Windows 内核效率，文件系统，网络服务的。我现在是作为一个用户而不是一个开发者来说话的，我们的讨论是基于操作，应用层面的。是为了告诉大学里还不了解，或者不理解 UNIX 的科学工作者和大学生，UNIX 比 Windows 更适合用于科学研究工作，请大家理解 UNIX 的工作方式，不要用 Windows 的标准来要求 Linux，而要用一个科学工作者的标准来要求自己，用UNIX 的思想来武装自己。 <BR><BR>我显然是反对在大学，特别是理工科专业推广 Windows 的。我也反对在对"娃娃"们的计算机启蒙教育中使用 Windows。因为 Windows 不论从技术上，经济上，思想风格上都是与我们培养高科技人才的目标格格不入的。Windows 的流行属于历史遗留问题，爷爷一级的人当然已经不可救药，但是我们不应该让下一代继续走上歧途。 <BR><BR>UNIX 不是计算机专家的专利 <BR><BR>当我建议一些非计算机专业的人用 Linux 的时候，很多人说："UNIX 是计算机系的人用的，我们不能理解。" "UNIX 是男孩用的，我们女孩不用。" <BR><BR>但是其实世界上的大多数科学家和工程师几乎用的都是 UNIX 作为他们的电脑工具。就因为它简单，可靠，稳定，强大，有趣。甚至很多时候 UNIX 就是唯一的选择。 <BR><BR>你说："我们都会用 UNIX 的话，你们计算机专业的人还用来干什么？" 很容幸的告诉你，计算机专业的有一部分人就是专门为你们提供这样强大而方便的计算机工具的。如果他们制造的工具只有自己会用的话，那这个工具还有什么用？ <BR><BR>理解 GNU/Linux 不要用 Windows 的标准来要求 Linux。 <BR><BR>由于GNU/Linux这个词太长，下面如果没有特别指明，"Linux"就是指GNU/Linux"。 <BR><BR>在这个年代，恐怕没有人需要我来介绍 Linux 是什么了吧？如果你觉得"Linux 只不过是跟 DOS 差不多的东西"，那请问问你旁边的 Linux 用户，Linux 到底是什么？ <BR><BR>那为什么我还要写一篇这样的文章？因为，我发现还有很多人不不理解 Linux 和 UNIX，虽然他们也在用它，但是他们有时会问："为什么 Linux 不能像 Windows 那样 ……？"，"怎么Redhat Linux不能 mount NTFS 分区！"，"Linux 下用什么整理硬盘？"，"什么时候OpenOffice才能完全兼容Word文件啊？"，"现在还有什么Windows能干的事情Linux干不了的？"…… <BR><BR>他们有40G的硬盘，却只为 Linux 分配了2G空间，有时还抱怨"这个东西怎么占这么多硬盘！" 似乎 Windows 该占用大部分硬盘。他们把重要的数据装在Windows的分区，似乎信不过Linux。他们总是到处寻找新奇的，好看的GUI程序，对命令行的东西一概不屑一顾。他们对Drag&amp;Drop，菜单配置，自动升级非常感兴趣。他们如果找到一个很像 Windows 程序的 Linux 程序，一定会很高兴的说："哈哈！Linux 也能……了！"如果Linux在某种测试中胜过Windows，他们会高兴得跳起来。他们没有办法用Linux 解决问题的时候，甚至用Wine来运行Windows程序。有时实在没办法，只好重起到Windows，或者干脆省得麻烦，在 Windows 下装一个 VMWare 虚拟一个 Linux 玩。 <BR><BR>你如果出现了上面的情况，说明你的思想受到了 Windows 的某种潜移默化的影响和误导。你没有能够从本质上理解存在于 Linux 身上的 UNIX 思想。你支持 Linux，你喜欢 Linux，你能从中感觉到快乐，这非常好。你现在只需要明白的是：Linux 从来就不是一个玩具，它是天才UNIX的后代。UNIX 是自晶体管发明以来最伟大的发明，它从诞生那一天开始就比 Windows 的设计出色。 <BR><BR>你要体会什么叫做"设计"，一个糟糕的设计并不是到后来缝缝补补就可以变好的，而一个出色的设计，不但可以以不变应万变，而且可以影响到后来者。一个出色的设计配上一个出色的实现，那就是非常出色的发明。Linux 就是这样的一个出色的发明。Linux 并不需要追赶 Windows，也不需要打垮微软。它的最终目标是改变整个计算机世界，还人们自由，给人们乐趣和方便。 <BR><BR>Unix 是简单的，你不需要成为一个天才也能理解这种简单。 <BR><BR>UNIX的设计者 Dennis Ritchie 说："Unix is simple. It just takes a genius to understand its simplicity." 但是我不这么认为，因为我不是一个天才，但是我却勇敢的把 Windows 完全删除掉，遇到不明白的事情的时候努力用 UNIX 的方式去解决，而不是寻求 Windows 的帮助。现在我体会到了 UNIX 的思想和好处，我可以用比 Windows 高效几倍的效率工作。因为我相信这样的信念："Windows 能办到的事 Linux 一定能办到，而且办的更好。" <BR><BR>这小节开头的话应该改成："Unix 是简单的，你不需要成为一个天才或是计算机专家。但是在这个冲斥着 Windows 错误观念的世界，你需要信念和勇气才能理解它的简单。" 我下面就告诉你一些我理解到的东西。首先，你要知道的是微软在国际科学领域是根本没有地位的。 <BR><BR>微软的地位 <BR><BR>微软的名声在欧洲和美国的大学里，特别是在计算机系里之坏，大家可能有所耳闻。我认识的 MIT，Stanford 的教授，贝尔实验室的专家，甚至一个欧洲小国的高中计算机老师都绝口不提微软的名字。在他们眼里，微软只是一个没有真技术，专靠在落后国家商业宣传和垄断经营的小公司。这个"小"并不是说它人少，钱少，而是说它先进技术少。 <BR><BR>我上次和王益合作写了一个算法演示程序，那个算法是贝尔实验室一位科学家Steven Fortune很天才的发明，为了程序能够被身边大多数人使用，我们选择了 VC+MFC 作为平台。我在分析算法时还得到 Fortune 很热情的鼓励，寄给我一份资料，还多次回信耐心的给我讲解了很多细节。但是程序完成之后，我把样品发给 Fortune，他回信说："对不起。我机器上没有 MFC。" 话说的很客气，但是我已经感觉到了他对 Windows的不屑。然后我把 MFC 静态编译进程序再发给他，他就没有再回信了。他显然不是瞧不起我，而是确实有难处。 <BR><BR>你能感觉到这位科学家对微软和 Windows 是什么态度了吧？不是反感，而是他心里根本没有 Windows 这个东西！微软在高科技领域没有发展，那么它怎么生存呢？到发展中国家去发展一下，他们的人民还对电脑一无所知，我说不定甚至可以打入大学的计算机系呢。我送他们软件，我捐钱盖大楼，我出钱找图灵奖获得者来演讲，让他们觉得我们都是科学家！ <BR><BR>好了，现在全国的大学包括清华，几乎所有人机器必装盗版 Win2000，Office XP，学校的选课系统是非IE不能正确浏览，论文用 Word 编辑，演示用ppt做，email 的通知附件是 doc 文件，你不用 Word 打不开，连 863 项目都用 VC 写程序了。我很久以前就看到一份报纸说，"微软为什么不严厉打击盗版？" 这篇文章说，微软非但不打击中国的盗版行为，而且有放任之趋势。放长线吊大鱼，"以后我要你们加倍的来还我！" 确实如此，它的目的快实现了。 <BR><BR>Windows 笼罩下的中国计算机教育 <BR><BR>说句丢脸的话，比尔盖茨很久以前是我的偶像…… //blush <BR><BR>在中国，比尔盖茨被很多人奉为神圣，"少年电脑天才"，甚至有的人提到他的名字就做出"抱拳对天"的姿势。很多人谈到微软的"新技术"，"高科技" 都是眉飞色舞。各种"VC编程圣经"，"深入了解 Visual C++"之类的书，在开头几页都会出现非常肉麻的字眼，"在那团团的混沌中，一个开天辟地的精灵，Windows 1.0，诞生了……" <BR><BR>微软的软件被这么多人盗用，那么人们是怎样使用这些盗版程序的呢？先看看电脑培训班，教的都是一些 DOS 命令，打字，Windows 基本操作，Word 文档处理，PowerPoint，高级班可能有 Excel，Access…… 参加各种微软认证考试，MCSE，MSDE 的人络绎不绝。考试辅导班都贴出了"280元，考过为止"之类的字样。考试参考资料更是昂贵，有些电脑书店整整两书架都是"Microsoft Press"的东西。我有个同学参加认证考试，每门考试都要200多元。而且你一次考不过可以再考，又要交钱。他后来还津津乐道跟我说，看我，花了XXXX(一个四位数)元考过了微软认证，得到一张比尔盖茨亲笔签名的证书和价值6000元的 Windows XP 内部发行版。 <BR><BR>"电脑要从娃娃抓起"，我们再来看看娃娃们学的是什么。大部分家长给孩子买了电脑之后，他们首先就会装一个盗版的 Windows，然后买来盗版的游戏开始玩。如果哪个孩子会用 Delphi 编程序，那可不得了。报社记者，电视台争相报导，说，某某学校的初中生某某，在别人都还在玩电脑游戏这种"初级阶段"的时候就已经用 Delphi 写程序了。镜头还瞄准了他显示器上面的像框中的比尔盖茨头像！ <BR><BR>我刚进入大学计算机系时还不懂得什么是操作系统，因为我以前只用过"中华学习机"。看到新入学的同学们各个谈论的都是 "Windows 95"，"VC"…… 我简直觉得我落后了好几十年一样，整个一土人，根本跟他们答不上话。好不容易找到一个比较熟的同学问了一下："你们天天谈论的瘟95是什么啊？"答："win95就是一个操作系统，跟DOS是一类。""朵死是什么？" "你连DOS都不知道是什么？别在计算机系混了。" 学校上课当然不讲VC编程之类的东西，但是上 Pascal 的老师有一次就说："嗨，我们学校真是落后。现在别人都用 C, C++，甚至 VC 了，我们还在讲 Pascal。不知道什么时候才能有VC课啊。你们出去也是要用VC的，只好自学了。" 于是，有些同学很多时候上课都捧着一本很重的"Windows 编程大全"之类的书，根本没有听课。吃饭时就念念有词的跟我说，"代码的优化是无止境的"，"匈牙利命名法真是伟大的发明" …… 这就是中国很多大学计算机系的情况。 <BR><BR>感觉到无知了？这不是偶然的，而是微软长久以来埋下的伏笔。它要让无知的大家都把它奉为神圣，它要让支持UNIX，Xwindow的人一旦说 UNIX 好，Xwindow 好的时候，都被一群人围着说教："这个 Windows 也能做到"，"你对 Windows 有偏见"，"微软才是主流啊"，"你敢瞧不起 win2k？"，".NET 就是世界潮流"，"微软的毕竟是新技术"，"有钱就是有技术"…… 甚至在一番论战比较后败下来还是要说："Windows 性能差点，但是易用性强"，"Windows 是老百姓用的，要求别那么?quot;，"微软那么有钱，以后想超过 UNIX 还不容易吗？"…… <BR><BR>发达国家的计算机教育 <BR><BR>我前段时间在 USENET 发文问有关 Scheme 语言的问题时，认识了一位丹麦人。他解决了我所有的问题，并且建议我阅读一些很"深奥"的有关程序语言语法，文法的书，他告诉我很多网站可以学习 LISP，Scheme，人工智能，算法。他叫我看 Jonathan Rees 的论文 "Syntactic Closures"。他还打包给我寄过来一份 MIT 的 "How to Design Programs"。他说他在自己的 PC 机上装的是 Linux，他用 Emacs 编辑，运行Scheme 程序。他对 Emacs 的了解和爱好真是使人惊讶。他大学本科毕业时做的毕业设计是一个 Scheme 解释器。这对于我来说是望尘末及了。 <BR><BR>他是那么的不厌其烦，我的每一个问题他都详细的回答。我有时都觉得过于详细了，怎么这么耐心啊？我觉得他似乎是我的高中老师。他是什么样的人呢？我好奇的打听了他的情况。原来，他是丹麦一所普通高中的计算机老师。 <BR><BR>他说他在高中里讲授程序设计和算法，计算机语言文法。他说用 Scheme，他的学生不用再为内存泄漏等程序语言本身的问题而烦恼，而专注于问题和算法本身。有利于培养学生解决问题的能力，特别是用计算机解决数学问题的能力。 <BR><BR>天哪！为什么欧洲出现那么多数学家，几何学家？你看看别人重视的是什么！我们的计算机教育如果继续这样下去，只会沿着弯路越走越远！ <BR><BR>微软和它的朋友们的如意算盘 <BR><BR>下面来看看微软的收入是怎么来的。首先，Windows 98系列操作系统，一个就是 100多美元，每次升级又是几乎同样的价钱。Windows NT 还要贵几倍，而且有用户数目限制，5个用户的，10个用户的…… 以后如果要增加用户数目还要按比例付钱。 <BR><BR>花了如此多钱买来的操作系统就能用了吗？它竟然连压缩程序都没有提供！你装上Windows 之后一般第一件事就是去下载一个 WinZip 吧，"只要 29 美元"。Windows会中病毒啊，马上花 70 美元买一个 Norton AntiVirus 吧。还有黑客呢？再买一个Norton Internet Security 好了，100 美元。系统需要优化，磁盘需要整理，买一个Norton System Works 是你最佳的解决方案，100美元。 <BR><BR>可是你现在还是不能干正事啊！你想要一个 Word, PowerPoint？那就买一套 Office XP 吧，一起买便宜些，$459.90。 <BR><BR>那些程序不会用啊！那些菜单怎么设置，到底有什么功能啊？看"帮助"也学不会。买本书看看吧，我推荐"Special Edition Using Microsoft Office XP"，不贵，$27.99。这本书里面大部分是屏幕抓图，还是买一本旧的比较划算，$17.85。 <BR><BR>你如果只是当个秘书，上面的差不多还凑合了。可是你有更高的追求，你想成为 Windows程序员。首先买一个 Visual Studio.NET 吧，要不然怎么编译程序。$494.95。 <BR><BR>为了紧跟微软动向，世界潮流，不能不注册个 MSDN 什么的吧？这个贵一点，不过物有所值啊，$2,799。 <BR><BR>嗯，你现在已经是上层阶级，白领人士了。你现在可以像这样"自由"的，"安全"的生活了。 <BR><BR>为什么要反对使用 Windows <BR><BR>很多人都说不应该完全否定 Window，Windows 也有它的长处。不应该骂微软。 <BR><BR>对。Windows 容易操作，适合普通用户。如果微软把它自己定位在 P&amp;G，Philips 那样的地位，能够给我们的百姓提供周到的，完善的，价廉物美的服务。那我肯定是很喜欢它的。但是从上面的种种情况说明，微软是一个野心极大的国际垄断组织！它的产品没有一个是不出问题的：Windows 不稳定，容易中病毒，而微软不为大家免费提供杀毒软件。我就是要让你们花钱买我的朋友 Symantec 的杀毒软件，谁叫你们已经上了我的贼船？这叫什么售后服务啊！ <BR><BR>你买来微软的程序，安装的时候一般都有一个协议，说："由于微软的程序造成你的数据损坏或丢失，微软概不负责。" 我想很多人肯定觉得这个不合理，不想按那个 "I accept"。但是你的软件买都买来了，钱都花了，现在一按 "I decline"，安装程序马上就会退出。你只好被迫点击了 "I accept"！这不是不平等条约吗？ <BR><BR>我已经目睹了好几个朋友的文档被 Microsoft Word 损坏，有的是编辑了十多天的30多页的论文，有的是费了很大工夫做出来的个人简历，那个朋友为此失去了到自己向往的P&amp;G 工作的机会。就在他要投简历的前一个晚上，就在那一瞬间…… 不知道他痛哭的时候有没有想起要投诉微软，可是谁叫我们用的都是盗版呢，况且你还点击了 "I accept"。 <BR><BR>微软仗势已经占有大部分PC市场，制定不符合国际标准的"微软的标准"，以不合理的方式压制其它公司的软件，这个问题已经在美国司法部闹了很久了。他甚至在 Windows系列操作系统中放置能够通过网络泄漏用户信息的代码，以至于 Windows 刚进入澳大利亚时被澳大利亚政府禁止使用。 <BR><BR>有些人说："微软毕竟开创了一个历史，造就了今天的 IT 行业。" 但是，如果没有微软，我们今天早就用上非常稳定，非常可靠，非常方便，非常"傻瓜"的软件了！微软是阻挡信息技术发展的罪魁祸首。 <BR><BR>微软的程序的工作方式(注意，我只是说操作方式，病毒的事情另外算)确实适合于一般家庭，上上网，发发邮件，打打游戏都不错。可是微软却要把自己包装成什么"高科技"企业，要在世界各地设置"研究院"，在大学计算机系赠送不适合用于科研的 Windows产品，甚至出钱请图灵奖得主来中国畅谈"二十一世纪的计算"，还在大会上宣传自己的 .NET 技术。非要把别人认为自己是科学的，自己是领导世界高科技的。但是呢？它什么高科技也没有。欧洲，美国，哪一个关键部门在用微软的东西？NASA? DOE? CERN?你仔细想一想，微软的程序对人类到底有什么重大作用？ <BR><BR>什么是 Windows 能干而 Linux 干不了的事情？--- <BR>"Windows 能干而 Linux 干不了的事情，那就是不需要干的事情。" <BR><BR>有个朋友看我半年没有用 Windows，有时就会问我："你只用 Linux，有没有发现有些Windows 能处理的事情 Linux 干不了？"--- <BR>我回答说："Windows 能干而 Linux 干不了的事情，那就是不需要干的事情。" <BR><BR>Windows 能做的有益的事情 Linux 都能做--- <BR>Windows 下的某些功能确实是我们需要的，那么 Linux 的开发者们和用户也需要这种功能，他们就会去实现这种功能，而且比 Windows 的方式好得多。由于大多数科学家，工程师用的都是 Linux 或者某种商业 UNIX, 所以几乎所有商业的科学工程程序，比如Matlab, Mathematica, AutoCAD, Candence的，Synopsys的，Avant! 的……全都是先有UNIX 的版本(包括Linux)，然后再考虑移植给 Windows，甚至根本不移植给Windows，因为 Windows 的机器一般没有足够的能力运行这样的程序。你不要以为只有 Windows 才有 PSpice, UNIX 的 HSpice 要好得多，而且可以运行在大型主机上。当然它们不是免费的，但是它们值那个价钱。 <BR><BR>但是 Windows 下有些东西在 Linux 下没有很相似的，或者你找到很多类似的，但是它们每一个比起 Windows 的那个程序都要差很多，那么原因有两种可能性： <BR><BR>有一个完全类似的程序，但是由于它乍一看不漂亮，被你忽略了。而其它程序虽然看起来很漂亮，但是它们是一些初学编程的人写的。现在由于 Gtk, Qt 的诞生，Linux 下开发图形界面程序极其简单，很多初中生甚至小学生都可以随手编出一些漂亮不中用的程序。如果你整天寻找这样的程序挑来挑去，永远也找不到你满意的。当然也有一流的程序用 Gtk 和 Qt，比如 GVIM 就可以用 Gtk 作为图形界面，我还知道 Synopsys 一些程序用了 Qt。 <BR><BR>我曾经也犯过这样的错误，从外表区分一切。结果优秀的 FVWM, lftp, Mutt, wget 都被我忽略过。当我找回它们的时候，我是那么的羞愧不已，它们现在都是我的朋友我第一次看到 FVWM 觉得它只不过是一个有很厚很难看边框的东西。可是现在，我的同学看到 FVWM 都说："哇！真漂亮。" <BR><BR>有另一种完全不同的方式可以达到相同的目的，甚至更好。 <BR><BR>很多人很关心 Open Office, Star Office, AbiWord, ... 他们多么盼望有一天某一个Linux 程序能够完全兼容的打开一个复杂的 doc 文档。但是你永远也不可能有那一天。为什么呢？因为微软为了占有市场，必定不会让其它系统的程序能够完全兼容它的文档格式。它一定会不断变化 doc 文档的内部结构，隐藏一些秘密，让其它公司的程序打开 doc 文档时总是有某种问题，从而你必需购买 Microsoft Office 和 Windows。 <BR><BR>你应该想一下，那么多的高智商的大学教授，科学家，学生，他们用的都是 Linux 或者其它类型的 UNIX，他们没有 Word 可用，怎么处理文档呢？这么多年没有一个像Open Office 的程序出现，难道大家没有办法写文档吗？ <BR><BR>显然不是这样。你看看那些高水平的学术杂志，论文，那些大学教授的网页，那些漂亮的幻灯片，它们是什么做的？原来 UNIX 用户早就有非常方便的 troff, LaTeX, SGML等东西可以处理文档，而且它们比起 Word 都要高明的多。Word 显然被这些大拿忽略了，以至于很久以来没有人想在 Linux 下开发一个类似 Word 的程序，除非某些公司想抢微软的饭碗。 <BR><BR>很多人留着 Windows 在硬盘上的原因无非是为了用 Word 和 PowerPoint。我见过一个教授，他的 Windows 笔记本电脑上除了 PowerPoint 什么都没有。有一天演示的时候，他指着堆乱字符说："对不起，这是一个公式……怎么每次都是这样……" 其实有比PowerPoint 好几百倍的东西可以制造幻灯片，你可以用最简单的方法制造世界一流效果的论文和幻灯片。你待会儿可以看看我的TeX网页，你就会知道为什么我可以完全离开 Windows。 <BR><BR>Windows 能做的那些没用的事情 Linux 永远做不好 <BR><BR>电脑游戏 <BR>有些人说 Linux 下不能玩 Windows 下所能得到的所有游戏。的确，Linux 下虽然也有少量的游戏，比如 Quake。但是它没有 Counter Strike, 没有 Star Craft, …… <BR><BR>并不是说电脑游戏不该玩，但是应该适可而止。电脑是用来处理事务，帮助你学习，解决问题的工具，而不是一个玩具！整天沉迷于电脑游戏中，而不出去感觉外面的世界，你会变得越来越冷酷，越来越缺乏人情味。你与真实的世界越来越远。 <BR><BR>你可以在 CS 里杀人，你可以在 Tomb Raider 里探险，你甚至可以在 Tony Hawk's Pro Skaters 里滑板…… 但是 It's not real！你虽然有很高的"反恐技巧"，但是遇到歹徒的时候，你是那么的怯懦；你虽然控制 Laura 伸手敏捷，但是你打篮球的时候怎么总是被人断球？你虽然可以轻易的在 THPS 里作出一个 "360 kickflip to hangten grind to fakie"，但是你踩在自己的滑板上的时候还不会 ollie！ <BR><BR>说回来，如果你偶尔玩一下电脑游戏未尝不可。但是世界上有远比 Windows + PC 更好的游戏方式。Sony 的 PlayStation2, SEGA 的 DreamCast, Nintendo 的 N64，Namco的街机……每一个都比 Windows 游戏精彩，每一个都有如此高的3D性能，以至于Pentium4, Itanium + GForce4 都无法与它们比美！ <BR><BR>Linux 的用户们都是关心解决世界的关键问题的份子，他们哪里有时间用自己的机器来玩游戏啊？他们每天用Linux高效的做完自己的工作就到阳光下享受自然去了。要玩游戏也是玩一些类似推箱子，贪吃蛇之类的智力小游戏。所以，你知道为什么 Linux 几乎没有游戏了吧？ <BR><BR>"整理硬盘，优化系统" <BR><BR>这是一个非常有意思的话题，仅次于有关"病毒"的话题。相信很多 Windows 用户都有整理硬盘的经历。在很多 Windows 用户眼里，"硬盘用久了，会出现碎片，速度会减慢，需要一个程序来整理，整理硬盘的时候不要做其它工作"，这好像是天经地义的事情。 <BR><BR>我也曾经津津有味的看着 Norton Defrag 一点一点的把我的硬盘排序，调整，用图形的方式显示出来，然后报告?quot;100% 没有碎片。你的硬盘现在已经达到最佳状态。" 我现在才发觉我那时是多么的幼稚。 <BR><BR>Linux 和 UNIX 用户似乎从来没有"整理硬盘"这种说法呢？你觉得很奇怪吗？如果你觉得很奇怪，那说明你的思想在某种程度上被微软的垃圾程序禁锢了。你需要明白，UNIX 的大型主机很多必须是一天24小时，一年365又1/4天不停运转的，要是每个星期都要整理一次硬盘，在整理的时候几乎不能干任何事情，那是绝对行不通的！ <BR><BR>Linux 机器根本不用整理硬盘，这就是为什么没有看到过 Linux 用户整理硬盘。Linux 的文件系统是比 Windows 的 FAT, FAT32, NTFS 高明得多的文件系统，它们不但可以对文件设置权限，实施完全的保护，而且可以"越用越整齐"，"越用碎片越少"！你应该把文件大部分放在 Linux 的分区，而不是 Windows 分区，因为它比 Windows分区可靠得多。 <BR><BR>还有更滑稽的事情就是有很多"Norton System Doctor"，"Windows 优化大师"，"超级兔仔注册表魔法" 之类的程序存在，而且价格昂贵。似乎一个操作系统本来应该有很多问题，需要别的厂商做程序来"优化"它，而且为了得到优化，你需要付钱！这些问题 Linux 根本就没有，所以不需要什么优化。Linux 内核本身就是高度优化的。 <BR><BR>IDE <BR><BR>有些人在抱怨为什么 Linux 没有一个良好的 IDE 开发环境。Linux 现在已经有一些IDE 了，但是总是有很多问题。你是不是正在寻找，正在期望 Linux 某一天可以有一个VC那样的开发环境？你有没有发现你正在进入微软给你设下的怪圈？你为什么一定要用 IDE？你说："IDE 开发迅速，调试方便，适合大型程序……" 那说明微软的程序在你脑子里已经比较根深蒂固，你需要好好清醒一下了，看看我来告诉你。 <BR><BR>高明的 UNIX 程序员不用 IDE，IDE 从来就是给初级 Windows 程序员用的。 <BR><BR>你看看大型的 UNIX 程序，包括 Linux 内核，各种网络服务程序，Xwindow 程序在内，哪一个是 IDE 搞出来的？我们实验室的 EDA 程序也没有一个是 IDE 弄的，我还知道Candence, Synopsys，Mentor 的高性能的图形界面 EDA 程序也都不是 IDE 写的。你信不信，微软的人在写 Windows 本身的时候也根本不用 IDE。微软内部程序员最喜欢的编辑器其实是 VIM，用 VIM 的微软程序员上次向乌干达的可怜儿童捐助了1000多美元，这是值得称赞的。 <BR><BR>有一次某杂志采访一些出名的 Linux 内核程序员，包括 Linus 在内，没有一个人用IDE，有的人用 VIM，有的用 Emacs，只有 Linus 说"GNU Emacs is evil"，但是其实他用的是一种跟 Emacs 有同样键绑定功能的 MicroEmacs。大家都是用编辑器编辑了程序文件，然后用 make 这样的自动工具调用 gcc 编译器完成编译工作的。甚至高级的 Windows 程序员也不用 IDE，他们可以从命令行调用 cl，nmake 来编译自己的程序。虽然这样的 Windows 程序员很少，但是他们却是最了解 Windows，最高明的Windows 程序员。 <BR><BR>为什么 UNIX 程序员不用 IDE？明白了这个道理你就能体会到 UNIX 的设计思想了。首先，一个 IDE 集成了编辑器，编译器，汇编器，调试器，跟踪器…… 这个编辑器功能肯定比不上 VIM 或 Emacs，编译器比不上 GCC，汇编器比不上 as，调试器比不上 gdb，ddd, 跟踪器比不上 strace, ltrace, truss。你得到的是一套整合的低能的程序。如果你对调试器的功能不满意，你只好换用另外一套 IDE，但是这套 IDE 的热键，菜单，编辑器功能，按钮…… 跟原来那个有很大不同。你不得不花很多时间来熟悉新的环境，而不能保持原来的某些东西。 <BR><BR>而在 UNIX 下就不一样了。你可以用你最喜欢的 VIM 编辑程序，你在 VIM 里可以调用GNU make，make 可以调用 gcc, ld, ... make 的出错信息可以被 VIM 捕获，VIM 能帮你在源程序里定位。你如果喜欢 icc, 你可以让 make 用 icc 而不是 gcc。你如果觉得 gdb 跟踪变量时比较麻烦，你可以用 ddd 来显示各种数据结构之间的关系。你还可以在 Emacs 里调用 gdb，那样就可以同步显示源代码了。而且 VIM 和 Emacs 还可以编辑很多其它东西，比如信件，LaTeX 文档，HTML，配置文件…… 你不用另外找一个什么编辑器来干这些杂活了。很多程序比如 Mutt, tin 都可以在内部使用 VIM，这样就更方便了。实际上 make 在其它方面还能帮你很多忙，我的每一个比较大型的 LaTeX文档都是用 make 维护的。 <BR><BR>Linux 能干的高精尖的事情 Windows 都干不了 <BR><BR>当然有很多事情是Linux/UNIX的专利了。因为 Windows 只能装在 PC 机上，好像以前也有 Alpha 可以使用 Windows NT，但是就是没见到有人用。PC 机的能力是很低的，像我们编程序处理 NP-Hard 问题的人，用 Windows 的机器显然速度不够，而且有时一个问题算上几天甚至几个星期，Windows 机器是以"死机"著称的，我们怎么能放心？所以几乎所有科学计算程序，EDA 程序，高性能图像处理程序都不是 Windows 的。他们有时也会移植一些给 Windows，但是常常降低那些程序的能力。你比较过 Windows 版本的 Mathematica 和 Linux 的有什么区别吗？ <BR><BR>IBM 制造的最大的并行计算机有 8000 多个处理器，Windows 不可能有能力管理这么多处理器，它用的是什么操作系统？答案是 Linux。 <BR><BR>《泰坦尼克号》电影里的三维动画，那么细腻逼真，Windows机器能做出来吗？不行。那也是 Linux 机器做的。 <BR><BR>民航总局用来训练地情人员的虚拟现实训练设备，Windows 当然无能为力。那都是商业的 IRIX 机器。 <BR><BR>UNIX 是最早支持 TCP/IP 网络协议的系统。它上面有很多可以互相协作的网络服务程序，它们经过多年的使用和修订，已经达到比较完善的程度。而就在1997年，微软的比尔盖茨还在扬言："Internet 是没有前途的。" 微软的这个"远见卓识"大家应该都已见识，它后来加上的网络服务程序IIS漏洞之多，让公安部都频频发出警报，大家也是见识了的。 <BR><BR>其实你知道了，Windows 没有一样有用的事情能比 UNIX 干的更好。 <BR><BR>Linux 干不了的有用的事情 Windows 照样干不了<BR>当然 Linux 不是万能的。它也有不能干的事情，电脑也有干不了的事情。但是 Linux干不了的事情，Windows 肯定也干不了。这些事情就是我们需要探索，需要努力的事情了。在你探索的过程中，Linux 必定是你的好伙伴。 <BR><BR>不要把Linux和Xwindow掩盖起来！不要把我们的用户当成傻瓜。 <BR><BR>什么？你早就知道 Windows 是垃圾？噢！你怎么不早说呢！害我废话这么多。嘿嘿。 <BR><BR>"好了。你知道 Windows 是垃圾，你现在用什么?quot; <BR><BR>"Linux + Xwindow" <BR><BR>"那我问你，Xwindow 是什么样的？" <BR><BR>"不就是跟 Windows 差不多吗？只不过 'Start' 按钮比较方，而且上面不是一个Windows 标志，而是一个脚丫子。点击一下居然还有很漂亮的中文菜单。我喜欢！" <BR><BR>"你知道什么是'根窗口'吗？" <BR><BR>"不知道。从来没听说过呢？" <BR><BR>"根窗口就是遮盖整个屏幕的那个最大的窗口。" <BR><BR>"哪儿有什么窗口啊！我没有看到呢？" <BR><BR>你发现了问题吗？这些 Linux 用户说是在用 Linux 和 Xwindow，但是他们对 Linux和 Xwindow 几乎完全不了解。很多人用了那么久 Xwindow 都不知道根窗口是什么东西，不知道其实按钮也是窗口，不知道窗口管理器和其它程序有什么关系，大家都以为窗口上面的按钮是程序自己放上去的，不知道窗口?quot;class name"，"resource name"是什么东西。他们也不知道 .Xdefaults 是用来干什么的。特别是他们很多人都不知道 Xwindow 的字体是如何命名的，什么是 fontset，有了一个新的字体也不知道怎么安装。 <BR><BR>他们被遮在 Linux 之上的一层一层的包装迷惑了，他们等待有图形界面的工具来帮助完成一切事情，他们认为 Linux 跟 Windows 一样，只是麻烦一点。他们知道 Linux内核很好，但是他们感觉不到 Linux 和 Xwindow 在操作层面的天生的先进性，随后不久就把 Linux 完全删除掉了。你发现没有，要用户理解 UNIX 和 Xwindow 的操作层面的先进性，才是留住用户的最好办法。如果用户体会不到操作时的方便和高效，内核再好他们也不会理会。 <BR><BR>但是用摹仿 Windows 的作法来吸引用户，永远会失败的。因为 Linux 如果摹仿Windows那一套低效率的方式，那么 Linux 的这套"低效率方式"永远比不上Windows 的那一套"低效率方式"。那么用户就会说："这个 Linux，没有一样比的上 Windows。" <BR><BR>Linux 天生就是继承了 UNIX 的高效的工作方式，为什么我们要把它掩盖起来？我们为什么只告诉用户 KDE 的菜单怎么用？我们为什么不能像早期的 Xwindow 书籍那样第一节就告诉用户什么是 X server, 什么是 X client，什么是 Window Manager, 什么是根窗口。第二章就告诉用户窗口有哪些属性，什么是 classname, resource name, hint，怎样使用 .Xdefaults, xrdb …… <BR><BR>在这里我又不得不说一下那些 Linux 的发行公司和写书的人，他们把 Linux 和Xwindow 包装起来，却没有从基本上告诉用户 Xwindow 的工作原理。很多书籍讲授的层次就是在Gnome, KDE 的菜单操作的层次，靠大量抓图来占篇幅，"繁荣"Linux 书籍市场。 <BR><BR>现在很多人已经把能够利用别人的库写出一个好看的程序作为自己编程水平的象征。在这?quot;图形化"，"可视化" 的年代，你如果还在用 troff, LaTeX 写文档，你还在用VIM 自己编辑 HTML，用 Mutt 处理邮件，你还在用文本模式的 gdb 调试程序，你还在用Xlib 写程序, 你还在用 tin 上 USENET，你还在自己写 Makefile，写机器代码，你还在玩 Clossal Cave 这样的字符模式冒险游戏，那你就是老古董。 <BR><BR>其实这种思想是错误的。虽然你是一个坚决的 Linux 支持者，但是你的思想是 Windows的思想。你认为图形界面，菜单，按钮就可以解决一切问题，就可以给你高效方便。你还是没能摆脱微软给你的潜移默化的东西。你其实离不开 Windows 那样的环境，你迟早会删掉自己的 Linux。 <BR><BR>GUI vs. CLI <BR>做一个坚定不移的"两面派" <BR><BR>大家看到这个标题是不是热血沸腾？两派大虾都可以围攻我了： <BR><BR>GUI派用户："哇！我一看你这小子就是 CLI 的。要不然自己写什么 Makefile？用什么Mutt？" <BR><BR>CLI派用户："切～ 你还用 X！高手都不用 X。你是 GUI 那边的。" <BR><BR>可怜的我："555～～ 你们都不要我～～ GUI 和 CLI 就那么水火不容吗？" <BR><BR>计算机界这样的门派之分还很多。很有特点的就是 CLI 和 GUI 了。CLI (Command LIne)的狂热份子声称永远不用 X。我上次在实验室看到一个同学用一个 SecureCRT 登录到Sun 机器，然后用一个 vanilla vi 编辑程序，我建议他启动一个 GVIM 过来显示在Exceed 上可以有语法加亮。但是他坚决反对，说："高手不用X。你想想，要是我在一个很慢的网络连接怎么用 X？而且好多服务器没有装 X 程序。" <BR><BR>但是我们实验室的网速可够快，Windows 机器都有 Exceed 啊，而且 Sun 机器有全套X 客户程序包括 GVIM。他说他是 CLI 的坚决拥护者，但是他却在用 Windows，他后来打开了好几个 SecureCRT，每次从文本框输入地址，用户名和密码，从下拉菜单选择"SSH2"，然后点击"Connnect"。他还不断的夸SecureCRT是"网络管理员投票选出的最受欢迎的登录方式"。老天，SecureCRT 本身就是个 GUI 啊，他其实没有明白Xwindow 的好处。 <BR><BR>你说我是 GUI 的？我虽然很少在 console 下工作。但是我对 bash, VIM 很熟悉，我可以让 bash 按照我的键绑定方式来工作。我可以在 rxvt 里使用 Mutt 来收发 email。我的每个桌面上都常常堆放着一打不同大小的 rxvt。我用 VIM 编辑 LaTeX。我自己写Makefile 来维护 LaTeX 文档。我有时用 mpg321 来放 mp3。我上BBS用的我自己写的expect 脚本。 好了，CLI 派的朋友可以收我做盟友了 <BR><BR>你说我是 CLI 的老古董？我的 FVWM 被我配置为可以"手写操作"，我只要画一个"r"就可以启动 rxvt，我只要画一个 "U" 就可以启动 GVIM，…… 我用 GVIM 语法加亮模式编辑程序，我用 Mozilla 浏览网页，…… GUI 派的现在好像认我做朋友了 <BR><BR>好了。CLI 派的朋友，虽然我很喜欢命令行，但是我有时在屏幕上左右画一下就可以执行: <BR><BR>Module FvwmConsole -terminal rxvt -geometry 45x5-0+0 -bg gold -fg midnightblue -fn "-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-*" <BR>你是不是现在又想把我逐出师门？ <BR><BR>GUI 派的朋友，虽然我很喜欢窗口。但是我可以在 FvwmConsole 里输入： <BR><BR>All (rxvt) MoveToDesk <BR>把我所有的 rxvt 移动到我现在工作的桌面。"这家伙，怎么这么快就叛变了！" <BR><BR>其实何必分什么 GUI 和 CLI，UNIX 和 Xwindow 都是工业标准，它们从设计那天开始就有非常灵活的用法，各个程序，不管是 GUI 还是命令行的都可以互相协作。UNIX 和X 是一家，何必搞的那么偏激，非此即彼？你从我上面的行为可以看出 GUI 和 CLI的模糊界线吗？我就是坚定不移的"两面派"。 <BR><BR>UNIX 是简单的-- <BR>"我相信简单就是最好，如果太复杂，我是不能理解的。" -Seymour Cray <BR><BR>很多第一次用 Linux 的人会惊奇的发现，Linux 的程序居然不?quot;安装"就可以运行，程序拷贝到随便那个目录都可以用，而不是一定要占用你第一个分区的空间。程序的设置只是一些简简单单的文本文件。你根本不需要什么"注册表修改器" 就可以改变系统的设置。这就叫做简单，但是简单就是美。虽然这只是 UNIX 简单性的一个肤浅的认识，你已经体会到了某些东西。 <BR><BR>但是简单并不意味着功能弱，并不意味着落后。相反，简单意味着强大，意味着生命力。 <BR><BR>我不会再继续阐述我理解到的"UNIX 的简单"，因为这个需要自己去体会。 <BR><BR>UNIX 是永恒的 <BR>有人说："Plan9 会取代 UNIX，Mach 会取代 Linux 内核。" <BR><BR>但是你如果是一个深入体会了 UNIX 的人，你就会知道：UNIX 的思想是永恒的，不管时过境迁，Plan9 是否代替 UNIX，UNIX 的灵魂都会在 Plan9 身上现形！ <BR><BR>我为同一个设备写过 Linux 内核和 Windows VxD 驱动程序。写 Linux 驱动程序时，我对 UNIX 设计的完美的一致性，远见性所折服。UNIX 用同样界面的 read(), write()系统调用就可以对不同的对象：普通文件，设备文件，管道，管道文件，socket，……进行统一的读写操作。我跟本不需要写一个测试用的应用程序就可以对我的设备驱动进行测试，因为 cat, cp, dd, 它们也使用了同样的 read(), write()，设备和普通文件在应用程序眼里没有区别。在那个还没有 Smalltalk, 没有 C++ 的年代，UNIX 的设计者已经使用了所谓的 "面向对象方法"。对，C 语言也可以实现面向对象。 <BR><BR>UNIX 的系统调用几十年都没有很大变化，这非但不是顽固，不进步的象征，反而是UNIX 的远见卓识的体现！这就跟 TeX 程序几十年都不变的情况差不多。这些才是真正的永恒的 master piece! 你应该改变所有软件都必需从 0.1, 1.0, 1.1, 1.2, 2.0,..., 3.0, 3.1, 95, 98, 2000, XP, ... 不断升级的想法。 <BR><BR>Windows 就不同了，它在最开头只是一个 DOS 之上的图形包装而已。后来为了兼容以前的糟糕设计，不得不加上很多累赘。我写 VxD 驱动程序的时候就深有体会，Windows 95 程序对设备的操作只有用 DeviceIoControl，我不得不写了两个应用程序来对设备驱动进行测试。Windows 内核的不一致性和隐密性使我非常恼火。不过 Windows WDM驱动程序现在也有了 ReadFile, WriteFile，…… 那说明什么？那说明 Windows 在向UNIX 学习，或者有可能是某个 UNIX 设计人员在微软打了几天临工，顺手加了几个UNIX 的东西进去。这样做是没有用的，Windows 从一开始就是非常糟糕的设计，它的历史的包袱太沉重了，缝缝补补有什么用？它只能永远的被 UNIX 甩在身后！ <BR><BR>UNIX 是强大的 <BR>让聪明人干任何他们想干的事情。 <BR><BR>UNIX 的一个特点就是非常高的灵活性，Xwindow 也具有这种灵活性。这种灵活性体现在哪里呢？ <BR><BR>UNIX 的程序一般都有很多参数，不管你现在用的着用不着，总有人需要某些参数。它们的行为很多都可以用配置文件来改变。比如 GNU bash, 通常缺省的命令行输入方式是 Emacs 方式，但是只要我编辑一个 .inputrc 文件，就可以把它变成 vi 的输入方式，而且我还可以自己绑定键序列到某些操作。我可以用 shopt 来设置它的很多特点，比如是否进行通配符扩展，是否可以把一个变量当作一个目录来cd，是否可以自动纠正某些明显的目录名打字错误 …… <BR><BR>UNIX 程序设计的思想是提供给用户"机制"，而不限制用户制定"政策"。这是一个重要的尊重用户的作法。 <BR><BR>我们再来看看 Xwindow。Xwindow 是一个出色的设计，它把显示服务器和客户程序分开。一个显示上既可以显示本机上的程序，也可以显示别的机器上的 X 程序，而它们都遵守你的窗口管理器的统一指挥，它们之间可以方便的传送剪贴版数据，各种事件 …… 比如有时我的 XFree86 上会出现四个不同机器上的 XTerm，两个不同机器上的 GVIM，…… 它们统一受本机上的 FVWM 指挥。 <BR><BR>Xwindow 程序都具有很多很多命令行参数和 resource 参数。你可以随意的在命令行或者 .Xdefaults 文件设置所有的颜色，字体，尺寸…… 而且如果你用 xrdb 把 .Xdefaults 导入到根窗口，那么其它机器上没有经过配置的同样的程序，显示到你的机器上的时候也会遵守同样的外观规定。 <BR><BR>Xwindow 的窗口具有 Property, 也就是一些可以自己定义的共享数据(原子)。正是因为这些 Property 的存在，使得 Xwindow 具有无比强大的生命力。X 的窗口管理器和其它客户程序之间并没有统一的协议，但是后来出现了 ICCCM(客户程序间通信规范)，这个规范就是通过 property 定义的。现在又有人定义了一套"扩展的窗口协议(EWM Hints)"，使得Xwindow 可以具有某些 Windows 的特征，比如一个工具条程序可以告诉窗口管理器："这个屏幕下面被我占据了24个像素的空间，你最大化程序的时候不要越过这个界线。" <BR><BR>一个强大的窗口管理程序比如 FVWM，它收到这样的提示时，可以答应工具条程序的这个要求，也可以不答应。一切选择的权力在于谁？当然是用户了！ <BR><BR>你想想，是不是有些 Windows 程序常常弹出一个窗口要你选择 "Yes or No"？你不点击它它就不下去。你觉不觉得你的程序在侵犯你的尊严？你是一个人，一个智慧的生物，怎能受到一个程序如此的待遇？ <BR><BR>还有就是很多 Windows 程序把人当成傻瓜，而它是"智能程序"。比如，有一个程序就是喜欢把你的每句话第一个字母都变成大写，我不说它是谁了，你遇到的时候就知道了。 <BR><BR>如果连"一句话开头一个字母要大写"这么明显的问题都需要程序帮你纠正的话，人脑还用来干什么？况且如果你故意想要不大写的话，那就更麻烦了，我楞是没有从它那一大堆菜单里找到怎么关闭这个愚蠢的选项。 <BR><BR>只有符号才能完全操纵计算机。 <BR><BR>我们来说说很多初学 Linux 的用户。虽然他们在用 Linux，但是他们打心眼儿里是觉得Windows 的工作方式好，他们希望 Linux 有一天能"像Windows那样"。你说："我的鼠标一点，我菜单一拉，…… 就可以完成我的操作。" 但是我要告诉你："Linux 从来没有摹仿 Windows，将来也不会。Linux 从诞生之日起，它的工作方式就比 Windows 的先进。 <BR><BR>Linux 属于能勇敢面对符号的人。只有符号才能完全操纵计算机。" <BR><BR>看看优秀的 UNIX 程序，XFree86, FVWM, VIM, Emacs, proftpd, Mutt, wget, tin, ... 没有一个不是用配置文件来设置选项的。为什么这些程序没有方便的菜单可以用来配置？难道它们的设计者就那么低能，连个图形配置界面也写不出来？ <BR><BR>当然不是。因为图形界面配置方式的能力是极其有限的，而配置文件和程序语言的表达能力却是无限的。用图形界面配置这些程序的话，如果你想达到配置文件的效果，你需要成百上千的菜单，checkbox, radio button, ... 到时候你根本没办法找到你需要修改的地方了！而各个程序的配置文件的语法都有很多相似之处，一般就是一些命令，设置一些变量，参数，…… 一旦用会了一个，其它的也就容易理解了。如果你用惯了 awk, sed, Perl，你会觉得那才是真正的自动化啊。 <BR><BR>鼠标虽然是很好的工具，但是它的表达能力是有限的。你不可能光用鼠标就让电脑完全明白你的意思，它毕竟只有3个按钮。看看我的MetaPost页你就能体会到鼠标的这一弱点。所以我们虽然很喜欢鼠标，但是却不能完全依赖它。 <BR><BR>各个小程序的完美配合 <BR><BR>这就是UNIX最重要的特点了，它就是UNIX设计的思想。让每个程序只具有一项专门的能力，然后让它们合作。Xwindow也继承了这种好传统。这恐怕就是Windows和其它操作系统望尘末及的地方了。UNIX 程序设计之统一，配合之完美，真使我难以置信！shell, grep, find, awk, sed, make, Perl, Emacs, vi, tin, Mutt, ... 它们是那么的具有一致性！你一旦学会了 sed 的正则表达式，其它程序基本上都能用了。你一旦学会了vi 和 VIM, 你会发现它的操作是那么的有规律性，似乎vi的设计者在几十年前就已经设计好了 VIM 在今天的完美而统一的操作方式！而且vi的操作还体现在 Mutt, tin 等很多程序中。你甚至可以把 bash 设置为 vi 的输入方式来输入命令行，我就是这么做的。一个程序可以调用另外一个程序来得到数据，可以把数据交给它处理后返回来，可以在自己的窗口里"嵌入"另外一个程序。 <BR><BR>在 Windows 和其它非 UNIX 操作系统中，这种合作是非常困难的。我曾经在Windows下使用 Perl来进行一些自动工作。但是 Windows 的文件操作，管道是如此的不稳定，程序之间基本不能合作。你别想在 Visual Studio 窗口里面嵌入 UltraEdit 编辑器，你别想用一个 expect 脚本来控制 telnet 到水木清华BBS。 <BR><BR>Windows 的程序都是大而全，大而杂，所有的电子邮件程序都需要自己提供编辑器，自己发送和收取邮件，自己显示邮件的附件。每一个BBS程序都提供自己的Virtual Terminal, 自己的通讯代码。每一个 IDE 都自己提供编辑器，编译器，汇编器，调试器。人们为了使用一种新的程序，需要适应所有这些它提供的界面，而不能使用自己喜欢的编辑器的键绑定，菜单组织…… 不能 DIY！ <BR><BR>你要知道，最高级的电脑是定做的，自己想要什么什么CPU，什么主板，多少内存，什么硬盘，键盘，鼠标，显示器都是自己选择的。最高级的滑板，自己想要什么牌子的版面，什么牌子的沙，什么桥，什么轮子，什么轴承，也都是自己选的。最高级的古球拍，木板，胶皮，海绵，胶水都是可以自己选择…… 而用 Windows 程序，你得到的是大杂烩，就像你去买"品牌机"，只有那么几种配置，而且附带很多你不需要的软件和服务；就像你去买组装好的滑板，你想要大一点的轮子和窄一点的板子，但是你没有这种选择余地！Windows 程序就相当于最廉价，最次的滑板。但是它却会花你更多的钱，因为一旦一个部件坏了，或者你不喜欢了，你不能另外找一个好的换掉它，你必需重新买全套配件！ <BR><BR>而 UNIX 和 Xwindow 就是高档的"组装货"。比如我用 Mutt 的时候，我可以用 VIM也可以用 pico 来编辑邮件，我可以用 ImageMagick 也可以用 xv 来显示附件里的图片，我可以用 lynx 把 HTML 附件转成文本嵌入窗口中，我也可以把 HTML 附件交给Mozilla 图形显示。我可以让 GnuPG 帮我把邮件进行数字签名和加密，我也可以用其它 PGP 程序。 <BR><BR>我想让 Postfix 而不是 sendmail 帮我发出邮件，我想让 fetchmail 帮我收邮件，转发给 postfix，然后被我自己写的Perl过滤器处理…… 这一切我都可以办到！我可以选择我最喜欢的专门的程序来完成专门的工作，然后把它们结合在一起，我也可以分别得到它们的好处。 <BR><BR>学 UNIX 绝对不是浪费时间 <BR>有人告诉我："你看我用 Windows 什么都不用学。而用 Linux，光是安装就花了我一个星期！" <BR><BR>首先，我要告诉你的是，你装 Linux 花了一个星期，不是因为 Linux 不好装，而是因为你已经习惯了 Windows，对 Linux 最初难以理解而已。你想一想你最初安装Windows的时候呢？你花了多少时间搞明白什么是硬盘分区？什么是盘符？什么是目录？你认为Windows 就是那么容易可以学会的吗？虽然你觉得没花时间学，但是你以前在用别人的机器的时候已经耳濡目染，自然就了解了。而且由于你想要 Linux 和 Windows 并存于硬盘上，又增加了安装难度。而且你肯定没有得到有经验的 Linux 用户的帮助，否则他们会在20分种之内帮你搞定。一个星期也太夸张了. <BR><BR>如果一开始用的就是Linux就没有这个问题。你想想如果你没有用过 windows，你肯定会很习惯 /etc, /usr, /usr/local ,... 而不是 C:, D:, E:, ... 是不是？如果你只用过Linux，你第一次用 windows 时恐怕也会问："/bin 目录哪里去了啊？" <BR><BR>最重要的是，你用惯了的UNIX工具，它们可以伴随你一生，而不会那么容易变化或消失。你可以永远不用再换另外的工具了。除非那个工具比你这个好的太多，而且可以完全模拟你现在的工具。 <BR><BR>我们实验室一个60多岁的老师，用vi, cc, make, ...都几十年了，他以前的经验绝对没有白费，而且教会了我们一批又一批的学生。vi 伴随着 UNIX 的最初发行而诞生，直到今天还是世界上头两号编辑器之一！有些人的 FVWM 配置文件已经用了 10 多年，现在完全不经修改还可以用。 <BR><BR>看看 Windows 的工具，你从 Borland C++ 换到 VC, 就必需适应新的环境：菜单不同了，颜色不同了，按钮不同了，帮助信息不同了，热键不同了，编译器参数，调试器功能也不同了，…… 那个时候恐怕花要花你很多时间去适应。当你刚刚适应了 VC, 你又要换成VJ, PowerBuilder, C++Builder, ... <BR><BR>很多windows程序员都是这样，开头在dos下用Turbo C, 然后是 Borland C, VC, C++ Builder, ......不断追赶微软的潮流。而且微软的SDK, MFC, .NET …… 什么都在不断变化，不断出问题，又不断的在修改…… Windows 程序员不得不买又厚又重的 Microsoft Press 的书籍，看了才一个月，又过时了。今天你才学会了写 VxD，明天你就必须用WDM 了。你不得不注册 MSDN 才能赶上 Microsoft 的步伐。很多人说："计算机是贵族的专业。" 这就是微软一手造成的。 <BR><BR>这些东西才是没完没了的浪费大家的时间和金钱的。这是是浪费生命！我们为什么不使用从诞生就那么一致和完美的 UNIX？你需要理解先进工具的设计理念。UNIX 的工具就像我们用的汽车，它的离合器，油门，刹车，方向盘，后视镜，永远都在同样的位置。用惯了的话，你对你的汽车的每一个部件都会了如指掌，甚至你自己都可以修车了。这难道不好吗？ <BR><BR>有人说："你说我们需要了解 UNIX，难道你要开车还必须了解汽车的结构吗？" 你去问问开车的司机，哪一个不了解汽车的结构的，那他的驾照就是混来的。你难道想要傻瓜型的"微软牌汽车"吗？我们来看看： <BR><BR>你买的微软牌汽车最开头只有一个座位，每加一个座位你得向汽车公司付钱。车上的防撞气囊不时会冒出来，说是为了你的安全。每开100英里要大修一次，每过一年要换一次引擎。附带的，你还必须换用由微软汽车公司指定的石油公司提供的新型号的机油。你的车出了问题，但是法律规定，你不准私自拆开你的汽车来修理，你必需到微软汽车公司指定的维修点去，需要付相当多的钱才能修好一个小毛病。 <BR><BR>最可气的是，你每换一个型号的微软牌汽车，它的刹车和离合器都在不同的位置，你需要重新去考驾驶执照。如果这辆汽车在途中刹车失灵，你受了重伤，你也不能状告微软汽车公司，因为你买来汽车之后必须签一个合同，说"由于微软牌汽车对你和家人造成的一切死伤，微软概不负责。" <BR><BR>怎样完全用 GNU/Linux 工作 <BR><BR>说了这么多 Windows 的不好。我还没有告诉你我怎么用 Linux 处理有些必要的事情。半年以前我由于中文老是配置不好，一直是双系统，不时需要重起到 Win2k 来处理汉字。后来我找到了 miniChinput, XSIM 和 SCIM 输入法。这下可以处理汉字了。而且 VIM 和Emacs 对汉字支持越来越好。我的大部分文本是用 VIM 编辑的，包括程序，信件，网页，LaTeX 论文，MetaPost 绘图语言。 <BR><BR>我不用 Word 这样的程序写论文，而是用 LaTeX，因为这是世界上效果最好，最方便的论文工具，是大多数学术杂志要求的格式。幻灯都是用 ConTeXt 做的，用起来很简单，而且效果非常漂亮。你可以看看我的TeX介绍。 <BR><BR>至于绘图，你可以用很多可视化的工具，比如 xfig，dia。但是对于我来说，任何可视化的工具都不能完成某些任务，我需要一种可以精确描述图形的语言。我找到了MetaPost。它简单又好用，而且效果是世界一流的。我的插图，如果不是图像，都是MetaPost 画出来的。 <BR><BR>我曾经抱怨 mozilla-mail 经常突然消失，损坏我好几封快要完成的信件。后来我发现mozilla 的邮件处理程序确实是不稳定的，功能又弱，有经验的 UNIX 用户都不用这样的程序。Mutt 是一个非常稳定可靠的 UNIX 邮件处理程序，而且功能非常强大。我曾经为 Gnome 和 KDE 的不稳定而烦恼。现在我找到了非常强大的 FVWM。KDE，Gnome也能和 FVWM 一起工作。虽然 Gnome 和 KDE 总体不稳定，但是某些部件程序还不错，很多 gtk, Qt 的程序也很不错，它们很多都是可以独立于这些桌面环境运行的。 <BR><BR>Linux 有很多强大方便的工作方式是 Windows 没有的，或者有类似的东西，但是很差劲或者用起来不方便。比如 ssh 服务，rsync，cvs，expect …… <BR><BR>结论 <BR><BR>我写这么多的目的是什么？我希望喜欢 Linux 的朋友，完全清除微软和 Windows 灌输在你脑子里的谬论，别再相信它们所谓的"新技术"，别再追赶 Windows，因为追赶Windows ＝ 倒退。马克思有一个思想很重要，"新生事物并不一定是在最近出现的。" <BR><BR>UNIX，Xwindow, TeX 虽然都比 Windows 先出现，但是它们才是先进生产力的代表。我们要清楚的认识到什么才是真正的现代化，什么才是真正的自动化。 <BR><BR>消除学计算机很难的幻觉，勇敢的拿起像 bash, FVWM, TeX, VIM, Emacs, Mutt ……这样强大的程序，勇敢的面对符号。不要再埋怨"Linux 为什么不能像 Windows 那样"，不要再浪费时间试用这样那样的程序，不要再忙着升级。你需要理解 UNIX 的工作方式，因为那是大多数科学家的工作方式。Linux 可以成为你的好朋友，你需要认识它，了解它，信任它，才能完全的靠它来高效的工作。当然，在游戏机，手机，掌上电脑里，或者在用电脑来娱乐的时候，用一些"傻瓜软件"还是不错的. <BR><BR>我希望小学，中学的计算机老师能够提高自己的素质，在孩子们的启蒙教育中充分利用Linux 神秘的特点，引起孩子们对数学，对符号的好奇心。诱导他们用计算机来解决世界上的有趣问题，而不要把教学的范围局限于计算机的操作和它自身的问题。 <BR><BR>附录: 我用来处理日常事务的 Linux 程序 <BR>好了好了。我知道你发现自己应该转向 Linux，你很后悔当初为什么中了微软的邪。但是不要着急。因为这些东西本来只是工具，它们是用来完成你的主要任务的辅助而已。你以前选错了工具，这不要紧。你还是拥有你自己原来的专业技能，那才是最重要的。工具的东西只有慢慢适应转换，不能一蹴而就，否则你会感到非常没意思，甚至放弃。 <BR><BR>如果你只想做一个像我这样的普通用户，主要目的是用 Linux 来完成自己的任务，那就可以不用系统管理员或者网络管理员的标准来要求自己，因为当一个系统和网络管理员确实很辛苦。这里我对实验室的网管同学鞠一躬，谢谢你的指点和帮助. 不用把你的机器当成网络服务器，不用开放没有必要的服务，设置好 ssh, ftp 已经足够了。这样会省去了解很多没必要了解的东西的时间。不用过度考虑"安全"，因为 Linux 缺省已经很安全了。不过你有兴趣了解更多那也无妨。 <BR><BR>下面给出一些推荐使用的可以处理一般事情的程序。至于你的专业上要用到的科学和工程软件比如 Matlab, Mathematica, Maple, HSpice, Design Compiler, …… 还有其它物理上的，化学上的，生物上的 …… 都必然有 Linux 和 UNIX 的版本。当然他们很多不是免费的，不要总是觉得什么都应该免费，自由不等于免费。它们是经过很多人辛勤劳动的产物，是可靠的程序，它们物有所值。 <BR><BR>下面列出我常用的一些 Linux 程序。一个列表里可能有很多，那是为了方便你来选择，我列出了比较信得过的。但其实很多只有第一个是我真正在用的，我不喜欢试用程序。我不是一个合格的网络管理员，我的服务器都只设置了我自己需要的功能，那样可以省去我很多麻烦。<BR><BR>Shell: bash。它结合了 csh 和 ksh 的优点，并且有 readline 功能，你可以随意绑定自己的键盘。 <BR>编辑器： VIM, Emacs。 <BR>程序开发： GCC, make, ld, Scheme48, j2sdk, Perl, Python, Tcl/Tk ... <BR>论文，幻灯工具：LaTeX, ConTeXt <BR>绘图工具：MetaPost。这个语言太强了，以至于我只用它了。你不熟悉的话可以用xfig, dia 来画一些流程图之类的图片。 <BR>图像处理：ImageMagick。其中的 import 程序可以屏幕抓图，convert 程序可以转换图像格式，display 可以显示图片和简单编辑(缩放，换质量，转格式，简单绘图，简单虑镜)。通常我就这么点需要。如果你要更强大的图像工具可以用 Gimp, 它几乎和Photoshop差不多。 <BR>自动管理工具：make。我可以用make来自动编译程序，自动编译文档，自动更新插图…… 全自动，而且不会重复劳动。 <BR>数值计算程序：SciLab。这个程序基本上可以代替 Matlab。 <BR>代数计算程序：MAXIMA。这个程序基于世界上最老的计算机代数系统之一: 由美国能源部(DOE)发行的 MIT Macsyma 系统。它是用 Common Lisp 实现的。很多现在的符号计算程序比如 Maple 都从 MAXIMA 身上学到很多东西。它现在经过 DOE 批准以GPL发行，永远是一个自由软件。 <BR>加密程序：GnuPG。我的 PGP 密钥就是它搞出来的。 <BR>打包，压缩程序。什么都有: tar, gzip, bzip2, zip, rar, ... <BR>虚拟光驱程序。Linux 不需要虚拟光驱程序，直接 mount 就行了。 <BR>ftp 服务器：proftpd, vsftpd。proftpd 功能很强，但是我只用了最简单的一种设置。 <BR>WWW 服务器：apache。(我一般没有开) <BR>ftp 客户程序：lftp，ncftp。它们都是文本方式操作的，但是比起图形界面的方便的多。比如 lftp 几乎具有 bash 的所有方便功能，Tab 补全，bookmark, queue, 后台下载，镜像…… Linux 也有图形界面的 ftp 客户程序，但是大多不稳定，有很多问题。这就是很多人抱怨 Linux 不如 Windows 的一个小原因。还有很多人用 Wine 模拟 Windows 的leapftp，其实 lftp 比 leapftp 好很多，你需要的只是适应一下。 <BR>自动下载工具：wget。它非常稳定，有一次我下载一个程序，用 IE 和 Mozilla 下载回来的文件都是坏的，最后还是 wget 可靠的传输了数据。用它甚至可以镜像整个网站，比起WebZip 这样的 Windows 程序强多了，而且不会因为你不付钱就在下载回来的网页里强制插入广告。 <BR>虚拟终端：rxvt, xterm, gnome-terminal, mlterm, ... <BR>X server: XFree86 <BR>窗口管理器：FVWM。编译加入了 libstroke。 <BR>中文输入：XSIM。被我修改过以适应 FVWM 的需要。另外推荐你还可以用 SCIM。 <BR>email 处理：Mutt + Postfix + fetchmail <BR>看 PDF, PS, DJVU 文件：Acrobat Reader, xpdf, GhostScript, gv, djvu工具包和netscape 插件。 <BR>看CAJ文档。我从来不看CAJ之类的文档，如果找不到PDF或PS，直接去图书馆借最好。<BR>看网页：Mozilla, Phoenix, lynx。Mozilla-Xft 的显示效果比IE 好很多。 <BR>英汉字典：IBM智能词典，星际译王。 <BR>编辑网页：我用VIM 直接写 HTML。你如果想要图形方式的可以用其它的比如screem, BlueFish。 <BR>登录其它 UNIX, Linux 机器：openSSH, telnet。 我喜欢用 openSSH 把其它机器的X 程序通过 ssh 加密的隧道传到我机器上显示。 <BR>登录 Windows2000 server 的 display service: rdesktop，...我有一天试了一下，不错。后来就没有用过了。 <BR>同步程序：rsync。我用 rsync 通过 ssh 来跟某些机器同步数据，或者做自己机器上不同目录间的同步。 <BR>上BBS：rxvt(或任何一种终端) + telnet + chatbot(helloooo 机器人的程序) <BR>QQ, ICQ: 我没有 QQ 或 ICQ。不过你可以用 Gaim, 它同时支持 QQ, ICQ 和很多其它的即时通信方式。ICQ 用户也可以用 Licq。 <BR>放录像：MPlayer, RealPlayer。MPlayer 太好了，直接就可以放 VCD, DVD, divx, wma, wmv ... 用 Windows 的同学都很羡慕我，说 Windows 要放这个需要大堆插件。rm 最好还是用 realplayer 放，它也是免费的。 <BR>放音乐： xmms(mp3,ogg都可以), mpg321(放mp3), ogg123(放ogg)。mpg321 不如xmms管理音乐文件那么方便，但是有时我还是用 mpg321 放 mp3 作为背景音乐，因为懒得开一个xmms窗口:-)<BR>游戏：我觉得 KDE 的那个 ksokoban(推箱子)，很好玩 :-) <BR>看 Word 文档。请 Word 用户把文档全部转为 PDF 或 PS 再给我，文档里没有特殊的格式干脆就用文本吧，何必那么麻烦。以前很奇怪的是，通知里本来没有什么特殊的格式居然还要发doc附件的email。现在好了，我们系发通知都用文本，PDF，甚至图片了。<BR>其它程序：还有很多我需要用而你不一定用得着的。比如，Doctor Scheme, <BR>Scheme48, Scsh, kawa...这些程序只有 Doctor Scheme 有Windows版本。还有很多幕后工作但是你一般不察觉的：xinetd, telnetd, sshd, crond, atd, lpd, ... 他们都比 Windows 的对应者强的多，或者根本没有对应者。<BR><BR>附:<BR><BR>写给支持和反对《完全用Linux工作》的人们<BR>作者：王垠<BR><BR>在一阵阵唾骂和欢呼声中，《完全用linux工作》被转载到了天涯海角。很多人支持我，也有很多人唾骂我。我不知道它是怎样流传到那么多地方，其实我不知道它都被转到哪里去了…… 我知道现在这篇文章又会罗里罗索写很长（因为我计划写这样一个东西已经很久了，坐在Emacs前面总是有一种巫师在炼丹的感觉……），所以先提出中心思想吧。中心思想就是： <BR><BR>我只是一个傻瓜。看《完全用Linux 工作》的时候请用你们自己的判断力。 <BR><BR>几乎所有人都承认，那篇文章很偏激。当时的情况是这样，我用 Linux 的时候被一个同学鄙视了，说："你怎么用像 DOS 一样落后的东西，真土！看我漂亮的 Win2000..." 这跟当面嘲笑别人老婆或者妈妈有什么区别？我义愤填膺啊，就几乎跟他吵起来。然后就写出了这篇文章放在主页上，叫了几个人来看。接着我珍爱的 TeX 又受到众人鄙视，于是我又写了一篇文章打击 Word，然后把 TeX 捧上了天。道理很简单，鄙视我喜欢的东西的人就是敌人 --邪教徒或者恐怖分子--他支持的我就反对，他反对的我就支持。为了使人信服，举例必用大科学家，世界一流大学，一流实验室的名号，虽然我不跟其中任何一种沾边。还好那时候我还不认识上帝，要不就打他的名字了。论据不管是实际经历还是自己推测的，先写上去再说。扬眉吐气啊！隔壁微软研究院的哥们居然都被我打动了，开始写 Linux 程序，学用 LaTeX 和 Emacs。不过几天之后我就把它删掉了，因为我自己都感觉到偏激。 <BR><BR>于是就没管那篇文章了。可是没想到它竟然已经被转载到那么多地方，似乎引起不小的波澜。有段时间每天都收到十几封email，国内的，国外的，问技术问题的，夸我的，骂我的，讲道理的，鄙视我的，想交朋友的，语重心长的，号称要删掉机器上的 Windows 的…… 我的主页居然也占据了"王垠"在 Google 上的首选位置，把那个日本的什么王公贵族"李王垠殿下"都挤下去了。大家似乎都知道我天花乱坠的本事了，有人就想找我写文章向别人推荐商业软件，我很后悔没有趁机狠狠赚一笔。走到图书馆，亮出借书证，管理员张大了嘴说："哇！你就是那个 Linux 牛人啊！"，也不知道他是褒是贬。甚至有人把他的 BBS 昵称都改成了"坚决拥护精神领袖花生" （花生是我的外号）。为此还骗到了好几顿报告?quot;报告"是清华专用动词，意思是请客吃饭）。虽然我觉得自己身上没有什么值得自豪的东西，但是又有点为自己兴风作浪的本事感到惊讶。虽然我一再告诫自己要谦虚，但是不由的有一种毛泽东，甘地，甚至摩西的感觉。我更加体会到"网络上没有人知道你是一头猪"的真理性。其实，不但网络上没有人知道我是一头猪，实际生活中也没有人知道，其实我是一头笨猪。 <BR><BR>这么长的时间之后，还有人写信给我说"深受鼓舞"，"提壶灌顶"，"对不起我还在用 Windows 给你写信"，"真想删掉Windows 啊" …… 我很好奇，我的文章真的有那么大的威力？我再看这篇文章，觉得有点惨不忍睹，看了开头就不忍心再看下去。我告诉同学我很后悔写了一篇这么偏激的文章，可是他?quot;徼枉必须过正，你没有错"，所以我也搞不清楚自己这样写对不对，这样自责对不对。就像我从来不敢看自己照片，却有时被人称为帅哥，就让我无法判断自己是否帅一样。所以现在我就开始怀疑我自己是否真是一头笨猪。也许多年以后，我会正确的评价我的想法。就像我现在觉得我15岁的照片挺养眼一样，也许我会发现自己其实是一头聪明猪？ <BR><BR>写这篇文章不是为了让自己免得被骂，也不是为了显示高深的猪的哲理。只是因为我深深的感到人应该有自己的判断力，不要简单的接受别人说的 DO's 和 DONT's。怀疑一切，同时又敞开心扉去了解一切。 <BR><BR>看过《完全用Linux工作》的朋友，请仔细检查里面的 DO's 和 DONT's。 <BR></P><img src ="http://www.blogjava.net/uiiang/aggbug/18225.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/uiiang/" target="_blank">小强</a> 2005-11-04 23:53 <a href="http://www.blogjava.net/uiiang/articles/18225.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows 到 Linux 之旅: 第 9 部分. 安装软件</title><link>http://www.blogjava.net/uiiang/articles/16955.html</link><dc:creator>小强</dc:creator><author>小强</author><pubDate>Thu, 27 Oct 2005 01:31:00 GMT</pubDate><guid>http://www.blogjava.net/uiiang/articles/16955.html</guid><wfw:comment>http://www.blogjava.net/uiiang/comments/16955.html</wfw:comment><comments>http://www.blogjava.net/uiiang/articles/16955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/uiiang/comments/commentRss/16955.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/uiiang/services/trackbacks/16955.html</trackback:ping><description><![CDATA[<SPAN class=atitle2>使用预编译的 RPM 以及从源代码编译应用程序</SPAN><BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR vAlign=top align=left>
<TD>
<P>级别: 初级</P></TD></TR></TBODY></TABLE>
<P><A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part9/index.html#author1"><NAME>Chris Walden</NAME></A><BR>电子商务架构师, IBM Developer Relations<BR>2004 年 1 月 </P>
<BLOCKQUOTE><IMG height=38 alt="Column icon" src="http://www-128.ibm.com/developerworks/cn/i//developerworks/cn/i/c-roadmap.gif" width=38 align=left border=0>IBM 电子商务架构师 Chris Walden 将通过他在 developerWorks 上发表的九篇系列文章来指导您如何在 Linux 环境中运用您的 Windows 操作技巧。在这最后一部分中，我们将下载和编译一个软件包，讨论自动化包管理的优点和缺点，同时了解 RPM 系统。</BLOCKQUOTE>
<P>安装 Linux 时首先注意到的事情之一，就是 Linux 发行版本中有如此多可用的包。大多数发行版本都附带了 Linux 操作系统、安装工具和管理工具。它们还包括 Internet 工具、开发工具、办公工具、游戏，以及一些您不曾听说过的程序。Linux 发行版本附带 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">数千个</I>可用包的情况并不鲜见。如果您没有选择“完整安装”，则只会安装这些包的一个子集。 </P>
<P>现在您可能想知道“如何删除不想要的包？如何安装遗漏了的包？是否能够使用不是该发行版本附带的软件？”</P>
<P><A name=IDAWTUGJ><SPAN class=atitle2>RPM</SPAN></A><BR>在安装 Linux 时，您或许会注意到关于正在安装的 RPM 的许多信息。 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">RPM</I> 代表 Redhat Package Manager（Redhat 包管理器），这是 Redhat 的贡献，现在已成为管理 Redhat 和 UnitedLinux 以及其他许多发行版本上的软件的标准。 </P>
<P>RPM 本质上就是一个包，包含可以立即在特定机器体系结构上安装和运行的 Linux 软件。例如，在“ <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part3/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">第 3 部分. Webmin 简介</A>”中，我们通过一个 RPM 安装了 Webmin 包。最初加载到发行版本中的所有软件都是通过一个 RPM 来安装的。 </P>
<P><A name=IDAHUUGJ><SPAN class=atitle3>RPM 剖析</SPAN></A><BR>RPM 是文件包。它包括的 .spec 文件提供了关于包及其功能和依赖关系（即在该包能够运行之前必须安装其他哪些包）的信息。.spec 还包含包中的文件清单，指定这些文件必须加载到系统中的何处，以及它们的初始权限如何。RPM 还包含安装前脚本，这是由包开发人员编写的。RPM 其次还包含已编译的二进制文件。最后，RPM 包含了安装后脚本。</P>
<P><A name=table1><SPAN class=atitle3>RPM 结构</SPAN></A><BR>
<TABLE cellSpacing=0 cellPadding=3 width="60%" border=1>
<TBODY>
<TR>
<TD>.spec</TD>
<TD>安装前脚本</TD>
<TD>二进制文件</TD>
<TD>二进制文件</TD>
<TD>...</TD>
<TD>二进制文件</TD>
<TD>安装后脚本</TD></TR></TBODY></TABLE></P>
<P>在安装 RPM 时，系统首先检查该包的依赖关系是否得到满足。如果不满足， 安装过程就会终止，除非您指定了迫使安装无论如何都要继续的选项。</P>
<P>如果一切顺利，安装前脚本就会运行。这个脚本可以做任何事情。它通常创建用户和目录。然而，它可以做许多类型的动态配置，甚至以自定义的方式编译运行系统的源代码。</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDAFVUGJ><B>了解 RPM 来自何处</B></A><BR>RPM 在安装时将文件复制到您的系统上，并执行脚本。由于 RPM 是以 root 身份运行的，因此所有这些功能都以 root 身份执行。因而在将某个 RPM 安装到系统之前，知道它的由来是很重要的。就像许多 Windows 软件一样，恶意的代码可以像包含在其他包中一样容易地包含在 RPM 中。来自厂商的 RPM 一般都是安全的，但是要对从未知来源随机下载和安装的内容保持警惕。</P></TD></TR></TBODY></TABLE></P>
<P>如果安装前脚本成功完成，二进制文件将依照清单被复制到系统上。在复制完所有的文件和设置了它们的权限之后，安装后脚本就会运行。同样，这个脚本几乎能够做任何事情。</P>
<P>一旦完成所有这些步骤，关于包的信息就被添加到 RPM 数据库，安装过程就完成了。使用这种简单的机制，您能够执行通过更完善的商业安装程序所能执行的所有功能。 </P>
<P><A name=IDAPVUGJ><SPAN class=atitle3>RPM 数据库</SPAN></A><BR>RPM 的优雅之处是 RPM 数据库。这个数据库通常位于 /var/lib/rpm 目录，它包含关于系统上已安装的每个 RPM 的信息。这个数据库知道包之间的依赖关系，当删除某个包将导致其他包无法工作时，它将发出警告。这个数据库知道最初随某个包安装的每个文件以及这些文件在系统上的最初状态。它还知道每个包的文档和配置文件的位置。这听起来好像是大量的信息，事实上确实如此。但它并不是过多而庞大的。在一个包含 1,066 个包、由 203,272 个文件组成的系统上，数据库文件仅有 45 MB！在加载和卸载包时，RPM 使用这个数据库来检查依赖关系。用户还可以在这个数据库中查询关于包的信息。 </P>
<P><A name=IDAXVUGJ><SPAN class=atitle2>使用 RPM</SPAN></A><BR>配合 RPM 包使用的程序被相应地命名为 <CODE>rpm</CODE> 。 <CODE>rpm</CODE> 以多种不同的模式运行，不过最常见的任务是安装、升级、查询、验证和删除。 </P>
<P><A name=IDAIWUGJ><SPAN class=atitle3>rpm -i （装）</SPAN></A><BR>在第一次安装某个包时，您要使用 <CODE>-i</CODE> 或安装模式。只需将 rpm 指向某个二进制包并执行它， rpm 就会把该包安装到您的系统上。安装过程一般只需几秒钟。我经常会在安装包时使用 <CODE>-v</CODE> （详细）开关来提供关于该过程的更多信息，以及使用 <CODE>-h</CODE> （哈希线）开关来通过输出在控制台上的哈希（#）符号提供安装进度更新。下面是安装某个包的例子： </P><A name=IDA3WUGJ><B>清单 1. 安装 MyPackage</B></A><BR>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
$ rpm -ivh MyPackage-1.0.0.i386.rpm
Preparing...                ########################################### [100%]
   1:MyPackage              ########################################### [100%]
</CODE></PRE></TD></TR></TBODY></TABLE>
<P>就是这个样子！MyPackage 现在已经安装完成，可供使用了。</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDAJXUGJ><B>rpm 必须以 root 身份运行</B></A><BR>必须以 root 身份执行 <CODE>rpm</CODE> 安装和删除，因为需要访问文件系统和 rpm 数据库。 </P></TD></TR></TBODY></TABLE></P>
<P><A name=IDAVXUGJ><SPAN class=atitle3>rpm -e （删除）</SPAN></A><BR>要删除已安装的包，可使用 <CODE>-e</CODE> 开关。 <CODE>rpm</CODE> 将使用数据库来删除该包的所有文件。如果有已安装的其他包依赖正在删除的包， <CODE>rpm</CODE> 将会异常退出。您必须使用 <CODE>nodeps</CODE> 开关来执行强制删除（ <CODE>nodeps</CODE> 还可以用于强制安装）。在使用这个开关来强制安装或删除时，务必 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">非常</I> 小心。删除其他包所依赖的包，可能会导致灾难性的结果。下面这个命令删除我们在上面安装的包： </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
$ rpm -e MyPackage
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>注意，包的删除并不一定需要它的完整名称（包括版本号）。安装时需要完整名称，因为我们是在引用一个文件名称。已安装的包仅通过它们的名称来引用。包的名称是版本号之前的所有内容。 </P>
<P><A name=IDA2QG5J><SPAN class=atitle3>rpm -V（验证）</SPAN></A><BR>验证开关非常有用。它将包文件的当前状态与它们在安装时的原始状态作比较。两种状态之间的区别将用一个代码来显示：</P>
<P><A name=table1><SPAN class=atitle3>文件验证结果</SPAN></A><BR></P>
<TABLE cellSpacing=0 cellPadding=3 width="85%" border=1>
<TBODY>
<TR vAlign=bottom>
<TD width="15%"><CODE>S</CODE> </TD>
<TD>文件大小不一致</TD></TR>
<TR vAlign=bottom>
<TD><CODE>M</CODE> </TD>
<TD>模式不一致（包括权限和文件类型）</TD></TR>
<TR vAlign=bottom>
<TD><CODE>5</CODE> </TD>
<TD>MD5 校验和不一致</TD></TR>
<TR vAlign=bottom>
<TD><CODE>D</CODE> </TD>
<TD>设备主要/次要编号不匹配</TD></TR>
<TR vAlign=bottom>
<TD><CODE>L</CODE> </TD>
<TD>readLink(2) 路径不匹配</TD></TR>
<TR vAlign=bottom>
<TD><CODE>U</CODE> </TD>
<TD>用户拥有关系不一致</TD></TR>
<TR vAlign=bottom>
<TD><CODE>G</CODE> </TD>
<TD>群组拥有关系不一致</TD></TR>
<TR vAlign=bottom>
<TD><CODE>T</CODE> </TD>
<TD>mTime 不一致</TD></TR></TBODY></TABLE>
<P>如果您对某个包运行 <CODE>rpm -V</CODE> ，并且发现某个可执行文件的大小发生了变化，那可能就是安全漏洞的征兆。 </P>
<P><A name=IDAOTG5J><SPAN class=atitle3>rpm -U（升级）</SPAN></A><BR>一旦某个包已经安装，尝试安装具有相同名称的包将产生一条消息，指出该包已经安装。 如果想要将某个包升级到更新的版本，可使用 <CODE>-U</CODE> 开关来升级。升级还具有另一个影响。当对多个包名称运行升级时，它将设法按依赖关系的顺序放置包。换句话说，必需的包将首先安装。不管某个包是否已经安装，都可以对它使用升级开关，许多人使用它而不是使用 <CODE>-i</CODE> 开关来执行安装和升级。下面是使用升级开关来加载多个 rpm 包的例子： </P><A name=IDA5TG5J><B>清单 2. 交互式升级</B></A><BR>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
$ rpm -Uvh My*.rpm
Preparing...                ########################################### [100%]
   1:bMyPackageDep          ########################################### [ 50%]
   1:aMyPackageNew          ########################################### [100%]
</CODE></PRE></TD></TR></TBODY></TABLE>
<P>在上面的例子中，bMyPackageDep 是 aMyPackageNew 的前提条件，因此尽管文件名称以相反的顺序排列， <CODE>rpm</CODE> 也会对它们正确排序。 </P>
<P><A name=IDAPUG5J><SPAN class=atitle3>rpm -q（查询）</SPAN></A><BR>可以从 rpm 数据库中查询多种有用的信息。对 rpm 数据库拥有读访问权限的任何用户都能够运行查询。默认情况下，全部用户都拥有读访问权限。要运行一个查询，可使用 <CODE>-q</CODE> 开关带上要查询的包的名称。这样将返回该包的版本。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
$ rpm -q MyPackage
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
MyPackage-1.0.0

        </CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>包的名称必须精确匹配，不允许使用通配符。然而，如果记不住包的完整名称，您可以使用 <CODE>grep</CODE> 工具来帮助找到它。可以使用 <CODE>-qa</CODE> 开关来查询所有已安装的包，并用 <CODE>grep</CODE> 来管道输出您能记住的信息。例如： </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDARVG5J><B>grep 之乐</B></A><BR><CODE>grep</CODE> 是一个具有广泛用途的文本搜索工具。默认情况下， <CODE>grep</CODE> 将搜索文件以显示您指定的行。在这里的例子中，它搜索单词“IBM”。 <CODE>grep</CODE> 是脚本编写和控制台工作方面的一个强大工具。 </P></TD></TR></TBODY></TABLE></P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
$ rpm -qa | grep IBM
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
IBMWSAppDev-Product-5.0-0
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
IBMWSSiteDevExp-Core-5.0-0
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
IBMWSSiteDev-Core-5.0-0
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
IBMWSTools-WAS-BASE-V5-5.0-0
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
IBMJava118-SDK-1.1.8-5.0
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
IBMWSWB-samples-5.0-0
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
IBMWSWB-5.0-0
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
IBMWSAppDev-Core-5.0-0
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
IBMWSAppDev-5.0-0
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
IBMWSTools-5.0-0

        </CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>除了版本号外， <CODE>rpm -q</CODE> 还可以提供关于包的其他有用信息。下面就是这样一些例子： </P>
<P><A name=table1><SPAN class=atitle3>使用 rpm 查询获取信息</SPAN></A><BR>
<TABLE cellSpacing=0 cellPadding=3 width="85%" border=1>
<TBODY>
<TR vAlign=bottom>
<TD width="15%"><CODE>rpm -q changelog</CODE> </TD>
<TD>显示包的开发变更历史记录</TD></TR>
<TR vAlign=bottom>
<TD><CODE>rpm -qc</CODE> </TD>
<TD>显示包的配置文件</TD></TR>
<TR vAlign=bottom>
<TD><CODE>rpm -qd</CODE> </TD>
<TD>显示包的文档文件 </TD></TR>
<TR vAlign=bottom>
<TD><CODE>rpm -qi</CODE> </TD>
<TD>显示包描述</TD></TR>
<TR vAlign=bottom>
<TD><CODE>rpm -ql</CODE> </TD>
<TD>显示包的文件的列表</TD></TR>
<TR vAlign=bottom>
<TD><CODE>rpm -qR</CODE> </TD>
<TD>显示包的依赖关系</TD></TR></TBODY></TABLE></P>
<P>还有另一个有趣的查询命令，它针对文件而不是针对包运行。</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
rpm -q whatprovides &lt;filename&gt;
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>上面这个命令将识别与给定的 filename（文件名）相关联的包。filename 必须包括文件的绝对路径，因为信息就是以这种方式存储在 rpm 数据库中的。</P>
<P><A name=IDADZG5J><SPAN class=atitle2>RPM 前端</SPAN></A><BR>从控制台操作 <CODE>rpm</CODE> 很容易，但有时使用图形用户界面会更方便。在典型的 Linux 风格中，有一些前端程序为 rpm 程序提供界面。每种发行版本都有一个前端，但是它们各不相同。请参考您的发行版本文挡，以了解关于所提供的包管理工具的信息。 </P>
<P><A name=IDAQZG5J><SPAN class=atitle2>Webmin 软件包</SPAN></A><BR>Webmin 也为处理 RPM 包提供了一个基于 Web 的简单前端。</P>
<P><A name=IDAZZG5J><B>图 1. Webmin RPM 界面</B></A><BR><IMG height=454 alt="图 1. Webmin RPM 界面" src="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part9/webminrpm.jpg" width=534 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P>软件可以从这个界面容易地安装、删除和查询。还可以直接从 URL 站点安装软件。如果安装了诸如 <CODE>apt</CODE> 或 Redhat Network 之类的 rpm 增强工具，Webmin 将识别它们并为它们提供一个界面。 </P>
<P><A name=IDAL0G5J><SPAN class=atitle2>源代码</SPAN></A><BR>由于 Linux 是开放源代码的操作系统，它附带了编译软件所需的所有开发工具。虽然您使用的大多数包将以二进制 RPM 的形式提供，但是您并不仅限于使用那些包。如果愿意，您可以为您的系统下载原始源代码，并以自定义的方式进行编译。</P>
<P>应该对在生产系统上编译源代码保持谨慎，因为这样可能导致问题，或者不再支持系统上正在使用的商业软件（比如 IBM DB2）。然而，熟悉从源代码编译软件的过程将使您能够对软件应用补丁，以及使用从其他环境移植过来的包。一旦成功地编译代码，创建您自己的 RPM 也是可以做到的！</P>
<P><A name=IDAU0G5J><SPAN class=atitle2>Corewars 源代码演示</SPAN></A><BR>为演示从源代码编译软件有多简单，我们将编译一个名为 Corewars 的模拟游戏（请参阅 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part9/index.html#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">参考资料</A>）。下面是来自他们 Web 站点的关于 Corewars 的说明：“Corewars 是一款模拟游戏，其中许多武士在虚拟的计算机中奔跑时竭力相互攻击对方。可以采用两种类似汇编程序的语言中的一种来编写武士程序，这两种语言分别叫做 Corewars 和 Redcode。Corewars 是默认语言，更易于学习和理解。Redcode 提供更高级和更强大的指令，但是需要更多的时间来学习。” </P>
<P>编译源代码的第一步是从 Web 站点下载源代码包：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
<LI><A href="http://download.sourceforge.net/corewars/corewars-0.9.13.tar.gz">http://download.sourceforge.net/corewars/corewars-0.9.13.tar.gz</A> </LI></UL>
<P>在代码下载完成之后，需要展开这个包。</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
tar -xvzf corewars-0.9.13.tar.gz
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>文件将展开到当前目录。标准的做法是将源代码包含在一个与产品名称匹配的目录中。在此例中，源代码位于一个名为 corewars-0.9.13 的目录。</P>
<P>首先进入该目录，找到源代码和一些文档、配置脚本和 README 文件。大多数源代码包都带有一个名为 INSTALL 和一个名为 README 的文件。您应该在编译软件之前首先阅读这些材料。它们在问题出现之前识别问题，并为您建议正确的编译和安装步骤，这样通常可以让您少走许多弯路。我在编译源代码时遇到的大多数问题都是因为我没有遵循那些指导。</P>
<P>通常执行的下一步是运行 <CODE>configure</CODE> 脚本。 <CODE>configure</CODE> 是 Autoconf 包的一部分，包括在 Linux 发行版本的开发工具中。这里引用一段 Autoconf 的包描述：“GNU 的 Autoconf 是一个用于配置源代码和 Makefile 的工具。通过使用 Autoconf，程序员能够创建可移植和可配置的包，因为建立包的人可以指定各种配置选项。” </P>
<P><CODE>configure</CODE> 脚本在系统上运行一系列测试，以确定为您的发行版本和系统体系结构编译包的最佳方式。然后它为您的系统创建一个定制的 Makefile。如果在您的系统上编译时遇到问题， <CODE>configure</CODE> 将会告诉您。 <CODE>configure</CODE> 通常允许您自定义将要在编译中包括的特性，或允许您提供关于库或者其他必需文件的位置参数，以便能够成功地编译包。下面我们将不带参数执行 <CODE>configure</CODE> ： </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
./configure
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>在系统上多执行几次测试，最终就会编译成功。下面使用如下命令来生成程序：</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
make
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>如果编译有错误，就需要确定问题并修复它们。这可能是一件繁琐的任务，也许需要关于环境和程序设计的大量一般知识。如果一切顺利，我们一般会使用以下命令来安装软件：</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
make install
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>文件将被复制到系统中的正确位置，文件权限会被更新，配置文件将被复制，文档也会被添加到手册页。</P>
<P>现在通过执行该程序来测试我们的劳动成果。它是一个图形化的程序，因此要在启动它前运行 X 系统。上面执行的 <CODE>make install</CODE> 命令应该已将程序放到了可执行文件路径中。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
corewars
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>作为对我们的奖赏，一个图形化的屏幕应该会出现。</P>
<P><A name=IDAF3G5J><B>图 2. 大功告成!</B></A><BR><IMG height=306 alt="图 2. Corewars 游戏" src="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part9/corewars.jpg" width=290 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P>corewars 规则的主题超出了本文的讨论范围，不过您会在手册页（ <CODE>man corewars</CODE> ）中找到关于这款有趣的模拟游戏的文档。 </P>
<P>corewars 的编译是一个典型的场景。可能会有其他许多种变化形式，包括在 <CODE>configure</CODE> 脚本上使用开关来调整要编译到程序中的特性，以及从 Makefile 使用不同的命令来调整编译方式，等等。 </P>
<P>由于这个程序不是使用 rpm 来安装的，因此 rpm 数据库中没有相应的条目。如果某个程序在安装后没有按预期运行，大多数 Makefile 都包括了一个卸载参数来删除软件：</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
make uninstall
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>务必牢记，使用原始源代码不会在 RPM 数据库中添加任何内容。以这种方式安装的软件是非托管的（unmanaged），因此应该小心进行。</P>
<P><A name=IDAD4G5J><SPAN class=atitle3>源代码 RPM</SPAN></A><BR>当 RPM 被创建时，还有一个称作源代码 RPM 的产物。这是一个与源代码组合在一起的 SPEC 文件，设计它的目的是为了在一个或多个体系结构上生成程序。这对源代码和二进制这两个世界来说是最佳的！对于源代码 RPM，您可以在系统上定制编译软件，但是完成的产品将是一个可安装的 RPM，而不是原始的二进制。以预编译 RPM 的形式可用的大多数包还以 SRPM 的形式可用。这也许是在 Linux 中软件跨平台转移的简单途径。当您在一个不同的平台上成功地重新编译时，可考虑与整个开发社区共享完成的 RPM。 </P>
<P><A name=IDAL4G5J><SPAN class=atitle2>也许源代码更适合您</SPAN></A><BR>如果您是 Linux 新手，安装软件的方法与您过去习惯使用的方法不同。然而，RPM 安装方法是优雅的，同时提供了您很快就会欣赏的新能力。</P>
<P>您应该熟悉从控制台使用 rpm 的选项，不过对于日常使用，有一些前端界面选项使得 rpm 更易于管理。您的发行版本提供了这样一个界面，也有其他类似的界面可供使用，比如 Webmin 中的那一个界面。 </P>
<P>您并不仅限于使用预编译的 rpm，还可以利用 Linux 的开放源代码性质，直接从源代码编译应用程序。对于成熟的项目，编译通常是很容易的。记住，从源代码安装的代码在 rpm 数据库中没有相应的条目。在使用源代码时，可考虑使用源代码 rpm，它组合了已编译源代码的强大能力和 rpm 的可管理性。</P>
<P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
<UL>
<LI>阅读 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Windows 到 Linux 之旅系列文章</A>的其他部分（ <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>，2003 年 11 月）。 <BR>
<LI>IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> 教程 <A href="http://www.ibm.com/developerworks/edu/l-dw-linux-lpir25-i.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">LPI certification 102 exam prep, Part 1: Compiling sources and managing packages</A>介绍了 Red Hat 和 Debian 包管理器，以及从源代码编译程序和管理共享库。 <BR>
<LI>IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> 教程 <A href="http://www.ibm.com/developerworks/edu/os-dw-linuxcompiling-i.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Compiling and installing software from sources</A>深入讨论了解包、检查、配置和从源代码安装软件包。 <BR>
<LI>IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> 教程 <A href="http://www-900.ibm.com/developerworks/cn/cnedu.nsf/linux-onlinecourse-bytitle/EC89D85D1232614F48256BEA002252EC?OpenDocument" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">LPI证书102考试准备，第 2 部分：配置与编译内核</A> 介绍了重要的内核配置和内核中的 PCI 和 USB 支持。 <BR>
<LI>通过 IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> 特辑 <A href="http://www.ibm.com/developerworks/edu/os-dw-linuxcompiling-i.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Compiling and installing software from sources</A>，学习关于 Linux 上的源代码编译和安装的更多知识。 <BR>
<LI>通过 IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> 特辑 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-debpkg/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">创建 Debian Linux 软件包</A>和 <A href="http://www-128.ibm.com/developerworks/cn/linux/management/package/rpm/part1/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">用 RPM 打包软件</A>学习如何创建您自己的包。 <BR>
<LI>在 IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> 特辑 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-stow/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">使用 Stow 管理软件包</A>中了解 RPM 和 Debian 的包管理解决方案的替代方案。 <BR>
<LI>经常升级软件是保证安全的重要部分。通过 IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> 关于 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-tip-prompt/tip03/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">技巧：从源代码开始升级应用程序</A>的技巧，了解如何方便快捷地保持系统处于最新。 <BR>
<LI>在此 IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> 特辑中了解关于 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-united/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">United Linux</A>的更多信息。 <BR>
<LI><A href="http://www.sourceforge.net/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">SourceForge</A>是开放源代码项目的优秀参考资料；您也可以添加自己的项目。 <BR>
<LI><A href="http://corewars.sourceforge.net/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Corewars project</A> 只是 SourceForge 上公布的许多项目中的一个。 <BR>
<LI><A href="http://www.ibm.com/developerworks/oss/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><I>developerWorks</I> 开放源代码专区 </A>托管了 IBM 的一个开放源代码项目。 <BR>
<LI>IBM 的 <A href="http://www.alphaworks.ibm.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">alphaWorks</A> 允许方便地访问新兴的 IBM 技术，包括诸如 Web 服务和网格工具箱之类的内容。 <BR>
<LI>IBM 提供 <A href="http://www.ibm.com/developerworks/toolbox/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Toolbox 订阅</A>，突出了访问核心 IBM 工具、中间件和技术的单用户、低成本许可证特色。<BR>
<LI>IBM <A href="http://www-128.ibm.com/developerworks/cn/linux/linux-speed-start/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为您的 Linux 应用开发加油提速</A> 计划提供免费的 Linux 软件评估包（SEK），其中包括 DB2 Universal Database、WebSphere Application Server、WebSphere Studio Site Developer、WebSphere MQ、Lotus Domino、Tivoli Access Manager……，等等！ </LI></UL>
<P></P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>Chris Walden 是位于德克萨斯州奥斯汀的 IBM Developer Relations Technical Consulting（也称为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><A href="http://www.ibm.com/developerworks/linux/library/i-slayers.html">dragonslayers</A> </I>）的一名电子商务架构师，该公司为 IBM 商业伙伴提供教育、实现和咨询。他致力于 Linux 相关工作，一有机会就向身边的人宣传 Linux 的种种好处。除了完成他的架构师的职责之外，他还精通 Linux 基础设施服务器的各个领域，包括混合平台用户环境下的文件、打印以及其他应用服务等。Chris 有 10 年的计算机行业经验，从现场支持到 Web 应用开发和顾问，各个领域他都曾涉足。您可以通过 <A href="mailto:cmwalden@us.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">cmwalden@us.ibm.com</A> 与 Chris 联系。 </TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/uiiang/aggbug/16955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/uiiang/" target="_blank">小强</a> 2005-10-27 09:31 <a href="http://www.blogjava.net/uiiang/articles/16955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows 到 Linux 之旅: 第 7 部分. 网络</title><link>http://www.blogjava.net/uiiang/articles/16953.html</link><dc:creator>小强</dc:creator><author>小强</author><pubDate>Thu, 27 Oct 2005 01:29:00 GMT</pubDate><guid>http://www.blogjava.net/uiiang/articles/16953.html</guid><wfw:comment>http://www.blogjava.net/uiiang/comments/16953.html</wfw:comment><comments>http://www.blogjava.net/uiiang/articles/16953.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/uiiang/comments/commentRss/16953.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/uiiang/services/trackbacks/16953.html</trackback:ping><description><![CDATA[<SPAN class=atitle2>Linux 网络速成指南</SPAN><BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR vAlign=top align=left>
<TD>
<P>级别: 初级</P></TD></TR></TBODY></TABLE>
<P><A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part7/index.html#author1"><NAME>Chris Walden</NAME></A><BR>电子商务架构师, IBM Developer Relations<BR>2003 年 3 月 </P>
<BLOCKQUOTE><IMG height=38 alt="Column icon" src="http://www-128.ibm.com/developerworks/cn/i//developerworks/cn/i/c-roadmap.gif" width=38 align=left border=0>IBM 电子商务架构师 Chris Walden 将通过他在 developerWorks 上发表的九篇系列文章来指导您如何在 Linux 环境中运用您的 Windows 操作技巧。本部分将探讨网络，这是 Linux 做得最好的方面之一。</BLOCKQUOTE>
<P>在如今这个时代，运行一台没有连接到网络的计算机几乎是难以想像的。电子邮件、Web 浏览和文件共享像打印和查看屏幕上的信息一样，都是用户所期待的。</P>
<P>幸运的是，Liunx 从一开始就是为网络而开发的。事实上，网络是 Linux 做得最好的事情之一。Linux 支持诸如TCP/IP 和 SMB（NetBIOS）等流行的网络协议。Linux 还具有用于监控和过滤网络流量的成熟工具。诸如 FTP、Windows 文件和打印共享以及 Web 托管等服务也是可用的。Linux 甚至还提供了用于集中目录服务、虚拟专用网（VPN）和远程过程调用的工具。</P>
<P><A name=IDATDAHC><SPAN class=atitle2>网络硬件</SPAN></A><BR>Linux 能够使用具有驱动程序的任何网络硬件。Linux 驱动程序单独地或以可加载模块的形式编译到内核中。Linux 内核默认支持许多流行的网卡。在选择网络硬件时，最好总是使用“硬件兼容性列表”（参见 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part7/index.html#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">参考资料</A>中的链接）中列出的设备。另外还要使用最新的 Linux 发行版本。 </P>
<P>一般情况下，如果使用的是兼容的网络硬件，安装系统时网卡会自动得到识别。可以使用 <CODE>ifconfig</CODE> 命令来检查系统上的网络硬件。默认情况下， <CODE>ifconfig</CODE> 显示活动的网络设备。给这个命令添加一个 <CODE>-a</CODE> 开关就能看到所有设备。 </P><A name=IDAOEAHC><B>清单 1. 使用 ifconfig</B></A><BR>
<TABLE cellSpacing=0 cellPadding=5 width=600 bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>refname: ifconfig-a

[root@cmw-t30 root]#  ifconfig -a 
eth0      Link encap:Ethernet  HWaddr 00:09:6B:60:8B:1E
          inet addr:9.41.209.160  Bcast:9.41.209.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:47255 errors:0 dropped:0 overruns:0 frame:0
          TX packets:32949 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:22140365 (21.1 Mb)  TX bytes:13519623 (12.8 Mb)
          Interrupt:11 Base address:0xf000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1308081 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1308081 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:183376967 (174.8 Mb)  TX bytes:183376967 (174.8 Mb)
</CODE></PRE></TD></TR></TBODY></TABLE>
<P>在上面的清单中，系统中只有一块网卡，标识为 eth0。 <CODE>lo</CODE> 适配器是一个回环（lookback），由 Linux 用来与它自身通信。后面还会进一步讨论 <CODE>ifconfig</CODE> 命令。 </P>
<P><A name=IDACFAHC><SPAN class=atitle3>网络设备名称</SPAN></A><BR>Linux 网络设备在配置时被赋予别名，该别名由一个描述性的缩略词和一个编号组成。某种类型的第一个设备的编号为 0，其他设备依次被编号为 1、2、3，等等。在给设备命名时将使用下面的约定。本信息摘自 Linux Network Administrator's Guide（参见本文结尾处 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part7/index.html#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">参考资料</A> 中的链接）。 </P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
<LI><B>eth0, eth1 ...</B> <BR>这些是以太网卡接口。它们用于大多数的以太网卡，包括许多并行端口以太网卡。 
<LI><B>tr0, tr1 ...</B> <BR>这些是令牌环网卡接口。它们用于大多数的令牌环网卡，包括非 IBM 生产的网卡。 
<LI><B>s10, s11 ...</B> <BR>这些是 SLIP 接口 。SLIP 接口与串行线关联，关联顺序就是它们被分配给 SLIP 的顺序。 
<LI><B>ppp0, ppp1 ...</B> <BR>这些是 PPP 接口。就像 SLIP 接口一样，PPP 接口一旦被转换到 PPP 模式，它就与串行线关联。 
<LI><B>plip0. plip1 ...</B> <BR>这些是 PLIP 接口。PLIP 接口通过并行线传输 IP 数据报。这些接口在系统启动时由 PLIP 驱动程序分配，并被映射到并行端口。在 <I>2.0.x</I>内核中，设备名称和并行端口的 I/O 端口之间存在直接的关系，但是在更新版本的内核中，设备名称是顺序分配的，就像 SLIP 和 PPP 设备一样。 
<LI><B>ax0, ax1 ...</B> <BR>这些是 AX.25 接口。AX.25 是业余无线电操作人员使用的主要协议。AX.25 接口的分配和映射方式与 SLIP 设备类似。 </LI></UL>
<P>还有其他许多可用于其他网络驱动程序的接口类型。我们仅列出了一些最常见的。</P>
<P>既然以太网是最常见的配置，下面就重点来讨论它。欲了解关于其他种类的连接的更多信息，请参见本文结尾处的 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part7/index.html#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">参考资料</A>。 </P>
<P><A name=IDARGAHC><SPAN class=atitle2>网络配置</SPAN></A><BR>在安装 Linux 发行版本时，就得配置网络。您或许已经有一个来自初始配置的活动 eth0。这个配置对于当前的使用也许足够，但是您可能需要随着时间的推移做出更改。下面将介绍与 IP 网络相关的不同配置项，以及用于使用这些配置项的文件和工具。</P>
<P><A name=IDAZGAHC><SPAN class=atitle3>Webmin</SPAN></A><BR>Webmin 在 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Networking</B> 下的 Network Configuration 中提供一组优秀的网络配置工具。您可以配置单独的接口并调整它们的当前设置或已保存的设置。还可以配置路由和网关、DNS 客户端设置以及本地主机地址。在编辑好所有的配置之后，可以单击 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Apply Configuration</B>来应用它们，不必重新启动系统。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=N100F2><B>Localhost</B></A><BR>本地主机地址包含在/etc/hosts 中。这个文件和 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">C:\winnt\system32\drivers\etc\hosts</B> 文件等价。其中的条目显示 IP 地址的别名，用于在不必查询 DNS 的情况下指派名称。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
127.0.0.1       localhost.localdomain   localhost
            <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
10.10.10.10     cmw-t30

          </CODE></PRE></TD></TR></TBODY></TABLE></P></TD></TR></TBODY></TABLE></P>
<P><A name=IDA0HAHC><SPAN class=atitle3>不同发行版本中的工具</SPAN></A><BR>每个发行版本都有它自己用于配置网络设置的工具。 应该参考特定发行版本的文档来确定要使用的工具。每种工具提供与 Webmin 工具基本上相同的配置选项。其中有些版本可能提供特定于该发行版本的选项。</P>
<P><A name=IDAGQMAC><B>图 1. Red Hat 8.x 和 9.x 使用 redhat-config-network 工具</B></A><BR><IMG height=553 alt="图 1. Red Hat 8.x 和 9.x 使用 redhat-config-network 工具" src="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part7/redhatconfnet.jpg" width=518 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P><A name=IDATQMAC><B>图 2. SuSE 和 United Linux 使用 YAST 工具</B></A><BR><IMG height=375 alt="图 2. SuSE 和 United Linux 使用 YAST 工具" src="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part7/yast2_network2.jpg" width=500 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P>手动配置也是可能的，不过这是一个非常深奥的主题。请参考您的发行版本文档和本文结尾处的 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part7/index.html#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">参考资料</A>，以了解关于手动网络配置的更多信息。 </P>
<P><A name=IDAFRMAC><SPAN class=atitle2>分析和监控工具</SPAN></A><BR>Linux 附带了许多工具来监控网络任务。</P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">ifconfig</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">我们在上面使用过 <CODE>ifconfig</CODE> 命令来查看以太网卡的状态。然而， <CODE>ifconfig</CODE> 还可以配置设备并报告关于设备的情况。假设您要建立一个临时的网络配置以供测试。您可以使用发行版本中的工具来编辑配置，但是需要注意在完成测试之后，将所有设置恢复回去。通过使用 <CODE>ifconfig</CODE> ，我们无需影响已保存的设置，就能够快速地配置网卡： </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
ipconfig eth0 192.168.13.13 netmask 255.255.255.0 up
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>上面这条命令使用一个 C 类 IP 地址将 eth0 设置到地址 192.168.13.13，并确保它正常运行。</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
ipconfig eth0 down
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>上面这条命令将关闭 eth0 设备。关于使用 <CODE>ifconfig</CODE> 的完整细节，请参见 <CODE>info ifconfig</CODE> 页面。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">ifup/ifdown</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">要使用已保存的配置来激活和禁用网络设备，请分别使用 <CODE>ifup</CODE> 和 <CODE>ifdown</CODE> 。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
# Bring up eth0 using the saved configuration
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
ifup eth0
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
					
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">

# Shut down eth0
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
ifdown eth0

        </CODE></PRE></TD></TR></TBODY></TABLE></P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">netstat</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">使用 <CODE>netstat</CODE> 控制台命令来输出网络连接、路由表、接口统计、伪装连接和组播成员。 <CODE>netstat</CODE> 具有多个命令行开关来控制其功能。下面是其中一些常用的开关： </P>
<P><A name=table1><SPAN class=atitle3>输出网络状态</SPAN></A><BR>
<TABLE cellSpacing=0 cellPadding=3 width="85%" border=1>
<TBODY>
<TR vAlign=bottom>
<TD width="20%"><CODE>netstat -p</CODE> </TD>
<TD>显示每个套接字所属的程序的 PID 或名称</TD></TR>
<TR vAlign=bottom>
<TD><CODE>netstat -a</CODE> </TD>
<TD>同时显示侦听和非侦听套接字</TD></TR>
<TR vAlign=bottom>
<TD><CODE>netstat -t</CODE> </TD>
<TD>显示 TCP 连接</TD></TR>
<TR vAlign=bottom>
<TD><CODE>netstat -u</CODE> </TD>
<TD>显示 UDP 连接</TD></TR>
<TR vAlign=bottom>
<TD><CODE>netstat -e</CODE> </TD>
<TD>显示附加信息；使用这个选项两次，可以获得最详细的信息</TD></TR></TBODY></TABLE></P>
<P>下面是 <CODE>netstat -tp</CODE> 的一个例子： </P><A name=IDAIVMAC><B>清单 2. 使用 netstat</B></A><BR>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
[root@cmw-t30 root]# netstat -tp
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
PID/Program name
tcp        0      0 localhost.localdo:29000 *:*                     LISTEN
2389/attvpnctl
tcp        0      0 *:10000                 *:*                     LISTEN
5945/perl
tcp        0      0 *:x11                   *:*                     LISTEN
1120/X
tcp        0      0 *:ftp                   *:*                     LISTEN
724/xinetd
tcp        0      0 *:ssh                   *:*                     LISTEN
710/sshd
tcp        0      0 *:ipp                   *:*                     LISTEN
797/cupsd
tcp        0      0 *:505                   *:*                     LISTEN
1043/rcd
tcp        0      0 localhost.localdoma:ipp localhost.localdo:32772 ESTABLISHED
797/cupsd
tcp        0      0 sig-9-65-39-140.m:44916 sdoprods2.austin.i:1352 TIME_WAIT
-
tcp        0      0 10.100.100.101:33020    64.12.29.100:5190       ESTABLISHED
1433/gaim
tcp        0      0 localhost.localdo:44954 localhost.localdoma:ipp TIME_WAIT
-
tcp        0      0 localhost.localdo:44955 localhost.localdoma:ipp TIME_WAIT
-
tcp        0      0 localhost.localdo:44897 localhost.localdoma:ipp TIME_WAIT
-
tcp        0      0 localhost.localdo:44902 localhost.localdoma:ipp TIME_WAIT
-
tcp        0      0 localhost.localdo:44903 localhost.localdoma:ipp TIME_WAIT
-
tcp        0      0 localhost.localdo:44900 localhost.localdoma:ipp TIME_WAIT
-
tcp        0      0 localhost.localdo:44901 localhost.localdoma:ipp TIME_WAIT
-
tcp        0      0 10.100.100.101:44888    cs9336-61.austin.r:pop3 TIME_WAIT
-
tcp        0      0 localhost.localdo:32772 localhost.localdoma:ipp ESTABLISHED
1246/gnome-cups-man
tcp        1      0 localhost.localdo:32774 localhost.localdoma:ipp CLOSE_WAIT
1246/gnome-cups-man
tcp        0      0 10.100.100.101:33019    cs46.msg.sc5.yahoo:5050 ESTABLISHED
1433/gaim
tcp        0      0 sig-9-65-39-140.m:35061 d03nm119.boulder.i:1352 CLOSE_WAIT
1720/wineserver
tcp        0      0 10.100.100.101:33021    64.12.30.4:5190         ESTABLISHED
1433/gaim

</CODE></PRE></TD></TR></TBODY></TABLE>
<P>我最常使用 <CODE>netstat</CODE> 命令来查看处于 LISTEN 或 ESTABLISHED 状态的连接。LISTEN 是系统上的服务，它接受来自其他机器的连接。ESTABLISHED 是您的机器和其他机器之间的活动连接。请确保您知道正在运行的所有 LISTEN 程序。如果看到某些无法识别的内容，它可能就是一个安全顾虑。 <CODE>netstat</CODE> 具有许多选项。请在命令行键入 <CODE>info netstat</CODE> 来获得该命令的细节。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">route</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><CODE>route</CODE> 控制台命令允许您显示和操作 IP 路由表。 </P><A name=IDAIWMAC><B>清单 3. 使用 route</B></A><BR>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
[root@cmw-t30 plugins]# route|grep -v ipsec
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
204.146.24.42   10.100.100.1    255.255.255.255 UGH   0      0        0 eth1
10.100.100.0    *               255.255.255.0   U     0      0        0 eth1
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         10.100.100.1    0.0.0.0         UG    0      0        0 eth1
</CODE></PRE></TD></TR></TBODY></TABLE>
<P>不带命令行开关运行 <CODE>route</CODE> 将显示当前路由表。可以使用 <CODE>route</CODE> 对该路由表进行非常精细的修改。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
route add default gw 10.10.10.1
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>上面的命令添加一个默认的路由（它将在没有其他路由匹配的情况下被使用）。使用这个路由的所有分组都将途经网关“10.10.10.1”。实际将用于该路由的设备取决于我们如何到达“10.10.10.1”——到“10.10.10.1”的静态路由必须预先设置好。</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>上面的命令添加一个通过“eth0”到网络 192.56.76.x 的路由。这里的 C 类网络掩码修饰符实际上并不是必需的，因为 192.* 就是一个 C 类 IP 地址。这里的单词“dev”也可以省略。</P>
<P>路由选择是一个非常深奥的主题。关于 <CODE>route</CODE> 选项的完整信息可通过 <CODE>info route</CODE> 命令获得。 </P>
<P><A name=IDAQXMAC><SPAN class=atitle2>结束语</SPAN></A><BR>Linux 从一开始就是为网络而设计的。它内置了以前仅在高端企业产品中才可见到的成熟功能。然而，尽管拥有所有这些强大的能力，Linux 网络的配置却远没有 Windows 网络的配置复杂。诸如 Webmin、redhat-config-network 和 YAST这样的工具允许执行图形化的配置。诸如 <CODE>ifconfig</CODE> 和 <CODE>route</CODE> 这样的工具允许通过控制台或脚本查看和修改网络参数。诸如 <CODE>netstat</CODE> 这样的工具允许查看单独的网络连接，并显示它们与运行着的进程的关系。 </P>
<P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
<UL>
<LI>您可以参阅本文在 developerWorks 全球站点上的 <A href="http://www.ibm.com/developerworks/library/l-roadmap7/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">英文原文</A>. <BR>
<LI>阅读 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Windows 到 Linux 之旅系列文章</A>的其他部分（ <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>， 2003 年 11 月）。 <BR>
<LI>在线的 <A href="http://www.tldp.org/LDP/nag2/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux Network Administrator's Guide, Second Edition</A> 是在 Liunx 环境中进行网络管理的通用参考指南。初学者和有经验的用户，都能够从中找到关于几乎每个重要管理活动的信息，这些活动是管理 Linux 网络配置所必需的。 <BR>
<LI><A href="http://www.tldp.org/HOWTO/Ethernet-HOWTO.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux Ethernet HOWTO</A>包含了关于哪些以太网设备可用于 Linux，以及如何设置它们的信息（重点放在硬件和以太网卡的低级驱动程序方面）。 <BR>
<LI>“Linux 文档计划”也有一个 <A href="http://tldp.org/HOWTO/HOWTO-INDEX/categories.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">分类 HOWTO 列表</A>，帮助您容易地查找相关文档。 <BR>
<LI>“硬件控制列表”包括 <A href="http://www.hardware.redhat.com/hcl/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Red Hat 硬件搜索页面</A>、 <A href="http://hardwaredb.suse.de/index.php?LANG=en_UK" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">SuSE Linux 组件数据库</A>和 <A href="http://wdb1.sco.com/chwp/owa/unitedlinux" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">UnitedLinux 认证和兼容的硬件</A>。 <BR>
<LI>在 IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>教程“ <A href="http://www.ibm.com/developerworks/edu/l-dw-linux-lpir27-i.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">LPI certification 102 exam prep, Part 3: Networking</A>”中，您会找到关于网络基础的更多信息。 <BR>
<LI>IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>教程“ <A href="http://www.ibm.com/developerworks/edu/l-dw-linux-lpir28-i.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">LPI certification 102 exam prep, Part 4: Secure shell and file sharing</A>”介绍了文件共享和安全。 <BR>
<LI>系统安全是一个广博而复杂的主题，但是在互连的世界中，它影响着每个人。幸运的是，现在开始着手加强系统安全还不算太早也不算太迟。文档 <A href="http://tldp.org/linuxfocus/English/July1998/article60.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Adding Security to Common Linux Distributions</A>和 <A href="http://tldp.org/LDP/lame/LAME/linux-admin-made-easy/security.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Strategies for Keeping a Secure Server</A>（这是前面提到过的 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux Administration Made Easy</I>guide 一书的第 12 章 ）将帮助您加强系统安全。 <BR>
<LI>IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>文章“ <A href="http://www-128.ibm.com/developerworks/cn/linux/hardware/stability/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux 硬件稳定性指南</A>”展示了如何诊断和修复许多潜在的硬件问题。 <BR>
<LI>在 IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>文章“ <A href="http://www-128.ibm.com/developerworks/cn/linux/network/share/part1/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">在 Linux（或异构）网络上共享计算机</A>”中学习更多关于网络的知识。 <BR>
<LI>遵循 IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>文章“ <A href="http://www-128.ibm.com/developerworks/cn/linux/l-emu/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">在 Linux 上构建网络路由器</A>”的指导来模拟 Cisco 路由器的行为。 <BR>
<LI>采用更好的安全性 —— IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>文章“ <A href="http://www-128.ibm.com/developerworks/cn/linux/l-sc15/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">使用 ssh 进行安全的连接</A>”展示了如何实现这一点。 <BR>
<LI>对那些从 Windows 转向 Linux 的读者来说，另一个重要的参考资料是 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-faq/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux 用户技术 FAQ</A>。 <BR>
<LI>要开始在 Linux 上使用 IBM 的软件产品， <A href="http://www-128.ibm.com/developerworks/cn/linux/linux-speed-start/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为您的 Linux 应用开发加油提速</A> 将为您提供最好的参考资料。您可以找到关于 DB2、Lotus Domino、WebSphere Application Server、WebSphere Studio 等多种应用软件的安装提示和参考资料。您还可以登录获得免费的 Linux Software Evaluation Kit，里面有试用软件和培训资料。 <BR>
<LI>在 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>Linux 专区可以找到更多 <A href="http://www-128.ibm.com/developerworks/cn/linux/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为 Linux 开发者准备的参考资料</A>。 </LI></UL>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>Chris Walden 是位于德克萨斯州奥斯汀的 IBM Developer Relations Technical Consulting（也称为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><A href="http://www.ibm.com/developerworks/linux/library/i-slayers.html">dragonslayers</A> </I>）的一名电子商务架构师，该公司为 IBM 商业伙伴提供教育、实现和咨询。他致力于 Linux 相关工作，一有机会就向身边的人宣传 Linux 的种种好处。除了完成他的架构师的职责之外，他还精通Linux 基础设施服务器的各个领域，包括混合平台用户环境下的文件、打印以及其他应用服务等。Chris 有 10 年的计算机行业经验，从现场支持到 Web 应用开发和顾问，各个领域他都曾涉足。您可以通过 <A href="mailto:cmwalden@us.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">cmwalden@us.ibm.com</A>与 Chris 联系。 </TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/uiiang/aggbug/16953.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/uiiang/" target="_blank">小强</a> 2005-10-27 09:29 <a href="http://www.blogjava.net/uiiang/articles/16953.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows 到 Linux 之旅: 第 8 部分. 备份与恢复</title><link>http://www.blogjava.net/uiiang/articles/16954.html</link><dc:creator>小强</dc:creator><author>小强</author><pubDate>Thu, 27 Oct 2005 01:29:00 GMT</pubDate><guid>http://www.blogjava.net/uiiang/articles/16954.html</guid><wfw:comment>http://www.blogjava.net/uiiang/comments/16954.html</wfw:comment><comments>http://www.blogjava.net/uiiang/articles/16954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/uiiang/comments/commentRss/16954.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/uiiang/services/trackbacks/16954.html</trackback:ping><description><![CDATA[<SPAN class=atitle2>Linux 备份与恢复速成指南</SPAN><BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR vAlign=top align=left>
<TD>
<P>级别: 初级</P></TD></TR></TBODY></TABLE>
<P><A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part8/index.html#author1"><NAME>Chris Walden</NAME></A><BR>电子商务架构师, IBM Developer Relations<BR>2004 年 1 月 </P>
<BLOCKQUOTE><IMG height=38 alt="Column icon" src="http://www-128.ibm.com/developerworks/cn/i//developerworks/cn/i/c-roadmap.gif" width=38 align=left border=0>IBM 电子商务架构师 Chris Walden 将通过他在 developerWorks 上发表的九篇系列文章来指导您如何在 Linux 环境中运用您的 Windows 操作技巧。本部分将考察 Linux 系统上的内容，同时在考虑到恢复和安全的情况下，计划并实现常规备份。</BLOCKQUOTE>
<P>Linux 是一个稳定而可靠的环境。但是任何计算系统都有无法预料的事件，比如硬件故障。拥有关键配置信息的可靠备份是任何负责任的管理计划的组成部分。在 Linux 中可以通过各种各样的方法来执行备份。所涉及的技术从非常简单的脚本驱动的方法，到精心设计的商业化软件。备份可以保存到远程网络设备、磁带驱动器和其他可移动媒体上。备份可以是基于文件的或基于驱动器映像的。可用的选项很多，您可以混合搭配这些技术，为您的环境设计理想的备份计划。</P>
<P><A name=IDAULSY><SPAN class=atitle2>确定策略</SPAN></A><BR>可以采用许多不同的方法来备份系统。欲了解关于这方面的一些信息，您可以阅读本文结尾处 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part8/index.html#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">参考资料</A> 中列出的“Introduction to Backing Up and Restoring Data”一文。 </P>
<P>所备份的内容很大程度上取决于您备份它们的理由。您是否试图从严重的故障（比如硬盘驱动器问题）中恢复？您是否想归档以便能在需要时恢复旧的文件？您计划从一个冷系统和还原着手，还是从一个预加载的备用系统着手？</P>
<P><A name=IDACMSY><SPAN class=atitle2>确定要备份的内容</SPAN></A><BR>在备份和还原系统时，Linux 基于文件的性质成了一个极大的优点。在 Windows 系统中，注册表与系统是非常相关的。配置和软件安装不仅仅是将文件放到系统上。因此，还原系统就需要有能够处理 Windows 这种特性的软件。在 Linux 中，情况就不一样了。配置文件是基于文本的，并且除了直接处理硬件时以外，它们在很大程度上是与系统无关的。硬件驱动程序的现代方法是，使它们以动态加载的模块的形式可用，这样内核就变得更加与系统无关。不同于让备份必须处理操作系统如何安装到系统和硬件上的复杂细节，Linux 备份处理的是文件的打包和解包。 </P>
<P>一般情况下，以下这些目录是需要备份的：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
<LI><B>/etc</B> <BR>包含所有核心配置文件。这其中包括网络配置、系统名称、防火墙规则、用户、组，以及其他全局系统项。 
<LI><B>/var</B> <BR>包含系统守护进程（服务）所使用的信息，包括 DNS 配置、DHCP 租期、邮件缓冲文件、HTTP 服务器文件、db2 实例配置，等等。 
<LI><B>/home</B> <BR>包含所有用户的默认用户主目录。这包括他们的个人设置、已下载的文件和用户不希望失去的其他信息。 
<LI><B>/root</B> <BR>是根（root）用户的主目录。 
<LI><B>/opt</B> <BR>是安装许多非系统文件的地方。IBM 软件就安装在这里。OpenOffice、JDK 和其他软件在默认情况下也安装在这里。 </LI></UL>
<P>有些目录是应该考虑 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">不</I>备份的。 </P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
<LI><B>/proc</B> <BR>应该永远不要备份这个目录。它不是一个真实的文件系统，而是运行内核和环境的虚拟化视图。它包括诸如 /proc/kcore 这样的文件，这个文件是整个运行内存的虚拟视图。备份这些文件只是在浪费资源。 
<LI><B>/dev</B> <BR>包含硬件设备的文件表示。如果计划还原到一个空白的系统，那就可以备份 /dev。然而，如果计划还原到一个已安装的 Linux 系统，那么备份 /dev 是没有必要的。 </LI></UL>
<P>其他目录包含系统文件和已安装的包。在服务器环境中，这其中的许多信息都不是自定义的。大多数自定义都发生在 /etc 和/home 目录中。不过出于完整性的考虑，您可能希望备份它们。</P>
<P>在生产环境中，我希望确保数据不会丢失，因而我会备份除 /proc 目录之外的整个系统。如果最担心用户和配置，我会仅备份 /etc、/var、/home 和 /root 目录。</P>
<P><A name=IDAPNSY><SPAN class=atitle2>备份工具</SPAN></A><BR>正如前面提到过的， Linux 备份在很大程度上就是打包和解包文件。这允许使用现有的系统实用工具和脚本来执行备份，而不必购买商业化的软件包。在许多情况下，这类备份将是足够的，并且为管理员提供了极大的控制能力。备份脚本可以使用 <CODE>cron</CODE> 命令来自动化，这个命令控制 Linux 中预定的事件。 </P>
<P><A name=IDA2NSY><SPAN class=atitle3>tar</SPAN></A><BR><CODE>tar</CODE> 是一个已移植到 Linux 中的经典 UNIX 命令。 <CODE>tar</CODE> 是 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">t</B>ape <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">ar</B>chive（磁带归档）的缩写，最初设计用于将文件打包到磁带上。如果您下载过 Linux 源代码，或许已经碰到过 tar 文件。这是一个基于文件的命令，它本质上是连续地、首尾相连地堆放文件。 </P>
<P>使用 <CODE>tar</CODE> 可以打包整个目录树，这使得它特别适合用于备份。归档文件可以全部还原，或从中展开单独的文件和目录。备份可以保存到基于文件的设备或磁带设备上。文件可以在还原时重定向，以便将它们重新放到一个与最初保存它们的目录（或系统）不同的目录（或系统）。 <CODE>tar</CODE> 是与文件系统无关的。它可以使用在 ext2、ext3、 jfs、Reiser 和其他文件系统上。 </P>
<P>使用 <CODE>tar</CODE> 非常类似于使用诸如 PKZip 这样的文件实用工具。只需将它指向一个目的（可以是文件或设备），然后指定您想要打包的文件。您可以通过标准的压缩类型来动态压缩归档文件，或指定一个自己选择的外部压缩程序。要通过 bzip2 压缩或解压缩文件，可使用 <CODE>tar -z</CODE> 命令。 </P>
<P>要使用 <CODE>tar</CODE> 来把除 /proc 目录之外的整个文件系统备份到 SCSI 磁带设备： </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE> 
tar -cpf /dev/st0 / --exclude=/proc
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>在上面的例子中， <CODE>-c</CODE> 开关表示归档文件正在被创建。 <CODE>-p</CODE> 开关表示我们希望保留文件许可权限，这对良好的备份来说是很关键的。 <CODE>-f</CODE> 开关指向该归档文件的文件名。在本例中，我们使用的是原始磁带设备 /dev/st0。/ 表示我们想要备份的内容。既然我们想要备份整个系统，因此把这个开关指定为根（root）。当把 <CODE>tar</CODE> 指向一个目录（以 / 结尾）时，它会自动递归。最后，我们排除了 /proc 目录，因为它没有包含需要保存的任何内容。如果单盒磁带容纳不下这个备份，我们需要添加 <CODE>-M</CODE> 开关（本例中没有显示）以进行多卷备份。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDAIQOY><B>以防万一</B></A><BR>不要忘了 Linux 是区分大小写的。例如， <CODE>tar</CODE> 命令应该总是以小写的形式执行。命令行开关可以是大写、小写或大小写的混合。例如， <CODE>-t</CODE> 和 <CODE>-T</CODE> 执行不同的功能。文件或目录名称可以混合使用大小写，而且就像命令和命令行开关一样，是区分大小写的。 </P></TD></TR></TBODY></TABLE></P>
<P>要还原一个或多个文件，可以使用带提取开关（ <CODE>-x</CODE> ）的 <CODE>tar</CODE> 命令： </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
tar -xpf /dev/st0 -C /
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>这里的 <CODE>-f</CODE> 开关同样指向归档文件， <CODE>-p</CODE> 开关表明我们想要还原归档的权限。 <CODE>-x</CODE> 开关表明从归档中提取文件。 <CODE>-C /</CODE> 表明我们想要让还原从 / 开始。 <CODE>tar</CODE> 通常还原到运行这个命令的目录。 <CODE>-C</CODE> 开关使我们的当前目录不再相关。 </P>
<P>您可能会经常使用的另外两个 <CODE>tar</CODE> 命令是 <CODE>-t</CODE> 和 <CODE>-d</CODE> 开关。 <CODE>-t</CODE> 开关列出某个归档文件的内容。 <CODE>-d</CODE> 开关将归档文件的内容与系统上的当前文件作比较。 </P>
<P>为便于操作和编辑，您可以将想要归档的文件和目录放进一个文本文件中，然后在命令行通过 <CODE>-T</CODE> 开关引用这个文本文件。这些文件和目录可以与命令行上列出的其他目录结合起来。下面的命令行备份 MyFiles 中列出的所有文件和目录、/ 根目录和 /tmp 目录中的所有 iso 文件。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
tar -cpf /dev/st0 -T MyFiles /root /tmp/*.iso
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>文件列表只是一个文本文件，其中列出文件或目录。下面是一个例子：</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
/etc
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
/var
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
/home
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
/usr/local
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
/opt

        </CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>请注意 <CODE>tar -T</CODE> （或 <CODE>files-from</CODE> ）命令不能接受通配符。文件必须明确地列出。上面的例子展示了一种单独地引用文件的方法。您还可以执行脚本来搜索系统，然后建立一个列表。下面就是这样一个脚本的例子： </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
#!/bin/sh
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
cat MyFiles &gt; TempList
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
find /usr/share -iname *.png &gt;&gt; TempList
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
find /tmp -iname *.iso &gt;&gt; TempList
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
tar -cpzMf /dev/st0 -T TempList

        </CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>上面的脚本首先将 MyFiles 中的所有现有文件列表复制到 TempList。然后它执行两个 <CODE>find</CODE> 命令来搜索文件系统中匹配某个模式的文件，并将它们附加到 TempList。第一次是搜索 /usr/share 目录树中以 <CODE>.png</CODE> 结尾的所有文件。第二次是搜索 /tmp 目录树中以 <CODE>.iso</CODE> 结尾的所有文件。在建立好列表之后， <CODE>tar</CODE> 然后在文件设备 /dev/st0 （第一个 SCSI 磁带设备）上创建 一个新的归档文件，该文件使用 g <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">z</B>ip 格式来压缩，并保留所有文件权限。该归档文件将跨越多个卷。要归档的文件的名称将从 TempList 文件中提取。 </P>
<P>还可以使用脚本来执行更精细的操作，比如增量备份。Gerhard Mourani 在他的 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Securing and Optimizing Linux </I>一书中给出了一个优秀的脚本，您可在本文结尾处的 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part8/index.html#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">参考资料</A>中找到关于这本书的信息。 </P>
<P>也可以编写脚本来还原文件，虽然还原通常是手动进行的。正如上面提到过的，用于提取文件的 <CODE>-x</CODE> 开关代替了 <CODE>-c</CODE> 开关。可以还原整个归档文件，或者还原指定的个别文件或者目录。使用通配符来引用归档文件中的文件是可以的。还可以使用开关来转储和还原。 </P>
<P><A name=IDA0VOY><SPAN class=atitle2>dump 和 restore</SPAN></A><BR><CODE>dump</CODE> 可以执行类似 <CODE>tar</CODE> 的功能。然而， <CODE>dump</CODE> 倾向于考虑文件系统而不是个别的文件。下面是引自 dump 手册文件中的内容：“dump 检查 ext2 文件系统上的文件，并确定哪些文件需要备份。这些文件将出于安全保护而被复制到给定的磁盘、磁带或其他存储媒体上……大于输出媒体容量的转储将被划分到多个卷。在大多数媒体上，容量是通过一直写入直至返回一个 end-of-media 标记来确定的。” </P>
<P>配合 <CODE>dump</CODE> 的程序是 <CODE>restore</CODE> ，它用于从转储映像还原文件。 </P>
<P><CODE>restore</CODE> 命令执行转储的逆向功能。可以首先还原文件系统的完全备份，而后续的增量备份可以在已还原的完全备份之上覆盖。可以从完全或部分备份中还原单独的文件或者目录树。 </P>
<P><CODE>dump</CODE> 和 <CODE>restore</CODE> 都能在网络上运行，因此您可以通过远程设备进行备份或还原。 <CODE>dump</CODE> 和 <CODE>restore</CODE> 使用磁带驱动器和提供广泛选项的文件设备。然而，两者都仅限用于 ext2 和 ext3 文件系统。如果使用的是 JFS、Reiser 或者其他文件系统，您将需要其他的实用工具，比如 <CODE>tar</CODE> 。 </P>
<P><A name=IDAYXOY><SPAN class=atitle2>使用 dump 执行备份</SPAN></A><BR>使用 <CODE>dump</CODE> 执行备份是相当简单的。下面的命令执行一个完全 Linux 备份，它把所有 ext2 和 ext3 文件系统备份到一个 SCSI 磁带设备。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
dump 0f /dev/nst0 /boot
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
dump 0f /dev/nst0 /

        </CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>在这个例子中，系统中有两个文件系统。一个用于 /boot，另一个用于 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">/</B> ，这是常见的配置。它们必须在执行备份时单独地引用。 /dev/nst0 引用第一个 SCSI 磁带驱动器，不过是以非重绕的模式引用。这样确保各个卷在磁带上一个接一个地排列。 </P>
<P><CODE>dump</CODE> 的一个有趣特性是其内置的增量备份功能。在上面的例子中， <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">0</B> 表示 0 级或基本级备份。这是完全系统备份，您要定期执行以保存整个系统。对于后续的备份，您可以使用其他数字（1-9）来代替 0，以改变备份级别。1 级备份会保存自从执行 0 级备份以来更改过的所有文件。2 级备份会保存自从执行 1 级备份以来更改过的所有文件，以此类推。使用 <CODE>tar</CODE> 和脚本可以执行相同的功能，但要求脚本创建人员提供一种机制来确定上次备份是何时执行的。 <CODE>dump</CODE> 具有它自己的机制，即它在执行备份时会输出一个更新文件（/etc/dumpupdates）。这个更新文件将在每次执行 0 级备份时被重设。后续级别的备份会保留它们的标记，直至执行另一次 0 级备份。如果您在执行基于磁带的备份， <CODE>dump</CODE> 会自动跟踪多个卷。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDAHZOY><B>跳过文件</B></A><BR>标记将被 <CODE>dump</CODE> 跳过的文件和目录是可以做到的。实现此目的的命令是 <CODE>chattr</CODE> ，它改变 ext2 和 ext3 文件系统上的扩展属性。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
chattr +d &lt;filename&gt;
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>上面的命令向文件添加一个标记，让 <CODE>dump</CODE> 在执行备份时跳过该文件。 </P></TD></TR></TBODY></TABLE></P>
<P><A name=IDAC0OY><SPAN class=atitle2>使用 restore 来执行还原</SPAN></A><BR>要还原使用 <CODE>dump</CODE> 保存的信息，可以使用 <CODE>restore</CODE> 命令。像 <CODE>tar</CODE> 一样， <CODE>dump</CODE> 能够列出（ <CODE>-t</CODE> ）归档文件的内容，并与当前文件作比较（ <CODE>-C</CODE> ）。使用 <CODE>dump</CODE> 時必须小心的地方是还原数据。有两种非常不同的还原方法，您必须使用正确的方法才能获得可预测的结果。 </P>
<P><A name=IDAH1OY><SPAN class=atitle3>重建 (-r)</SPAN></A><BR>记住，在设计 <CODE>dump</CODE> 时考虑得更多的是文件系统，而不是单独的文件。因此，存在两种不同的文件还原风格。要重建一个文件系统，可使用 <CODE>-r</CODE> 命令行开关。设计重建的目的是为了能在空文件系统上操作，并将它还原为已保存的状态。在执行重建之前，您应该已经创建、格式化和装载（mount）了该文件系统。不应该对包含文件的文件系统执行重建。 </P>
<P>下面是使用上面执行的转储来执行完全重建的例子。</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
restore -rf /dev/nst0
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>上面这个命令需要针对要还原的每个文件系统分别执行。</P>
<P>在需要的时候，可以重复这个过程来添加增量备份。</P>
<P><A name=IDA51OY><SPAN class=atitle3>提取 (-x)</SPAN></A><BR>如果需要使用单独的文件而不是使用整个文件系统，您必须使用 <CODE>-x</CODE> 开关来提取它们。例如，要仅从我们的磁带备份中提取 /etc 目录，可使用以下命令： </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
restore -xf /dev/nst0 /etc
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P><A name=IDAQ2OY><SPAN class=atitle3>交互式还原 (-i)</SPAN></A><BR><CODE>restore</CODE> 提供的另外一个特性是交互式模式。使用命令： </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
restore -if /dev/nst0
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>将把您置于交互式 shell 中，同时还显示了包含在该归档文件中的项。键入“help”将会显示一个命令列表。然后您就可以浏览并选择希望提取的项。务必记住，您提取的任何文件都将进入当前目录。 </P>
<P><A name=IDAC3OY><SPAN class=atitle2>dump 与 tar</SPAN></A><BR><CODE>dump</CODE> 和 <CODE>tar</CODE> 都有一批拥护者。两者都各有优点和缺点。如果您运行的是除 ext2 或 ext3 之外的任何文件系统，那么 <CODE>dump</CODE> 就对您不可用。然而如果不是这种情况，那么只需最少的脚本就能运行 <CODE>dump</CODE> ，并且 <CODE>dump</CODE> 还具有可用于帮助还原的交互式模式。 </P>
<P>我倾向于使用 <CODE>tar</CODE> ，因为我喜欢编写脚本来获得额外的控制级别。此外还有用于操作 .tar 文件的多平台工具。 </P>
<P><A name=IDAB4OY><SPAN class=atitle2>其他工具</SPAN></A><BR>在 Linux 中，任何能够复制文件的程序都可以用来执行某种程度的备份。有人就使用 <CODE>cpio</CODE> 和 <CODE>dd</CODE> 来执行备份 。 <CODE>cpio</CODE> 是又一个与 <CODE>tar</CODE> 差不多的打包实用工具，但使用得不太普遍。 <CODE>dd</CODE> 是一个文件系统复制实用工具，它产生文件系统的二进制副本。 <CODE>dd </CODE>还可用于产生硬盘驱动器的映像，类似于使用诸如 Symantec 的 Ghost 这样的产品。然而， <CODE>dd</CODE> 不是基于文件的，因此您只能使用它来将数据还原到完全相同的硬盘驱动器分区。 </P>
<P><A name=IDAG5OY><SPAN class=atitle2>商业化备份产品</SPAN></A><BR>可用于 Linux 的商业化备份产品有很多。商业化产品一般提供了便利的界面和报告系统，而在使用诸如 <CODE>dump</CODE> 和 <CODE>tar</CODE> 这样的工具时，您必须自食其力。商业化产品很广泛，通常提供大量的特性。使用商业软件包的最大好处是，有一个预先建立的用于处理备份的策略，您可以立即投入工作。商业化的开发人员已经犯了您即将要犯的许多错误，他们的智慧的代价相比于丢失您的宝贵数据来说是廉价的。 </P>
<P><A name=IDAX5OY><SPAN class=atitle3>Tivoli Storage Manager</SPAN></A><BR>Tivoli Storage Manager 或许是现在可用于 Linux 的最好的商业化备份和存储管理实用工具。Tivoli Storage Manager 服务器可运行在多种平台上，包括 Linux，而客户机则可以运行在更多种类的平台上。</P>
<P>本质上，Storage Manager 服务器是通过适合于备份该环境的设备来配置的。要参与备份的任何系统都要加载一个与服务器通信的客户机。备份可以按计划执行、通过 Tivoli Storage Manager 客户机界面手动执行，或者使用基于 Web 的界面远程执行。</P>
<P>TSM 基于策略的性质意味着无需经常调整文件列表，就能够为备份行为定义中心规则。此外，IBM Tivoli Storage Resource Manager 还能够识别、评估、控制和预测企业存储资产的利用情况，能够检测潜在的问题并自动应用自修复调整。更多细节请参见 Tivoli Web 站点（参见 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part8/index.html#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">参考资料</A>中的链接）。 </P>
<P><A name=IDAKAPY><B>图 1. Tivoli Storage Manager 菜单</B></A><BR><IMG height=207 alt="图 1. Tivoli Storage Manager 菜单" src="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part8/tivsm0.jpg" width=500 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P>然后备份和还原就通过远程设备来处理 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">。</B> </P>
<P><A name=IDAYAPY><B>图 2. Tivoli Storage Manager 界面</B></A><BR><IMG height=405 alt="图 2. Tivoli Storage Manager 界面" src="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part8/tivsm1.jpg" width=600 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P><A name=IDAEBPY><SPAN class=atitle2>前瞻和回顾</SPAN></A><BR>拥有良好备份的第一步是拥有计划。首先知道您需要保存的数据以及需要什么恢复策略，然后使用最适合该策略的工具。</P>
<P>Linux 附带了一些现成的（out of the box）有用备份工具。其中两个最常用的是 <CODE>tar</CODE> 和 <CODE>dump/restore</CODE> 。两者都能执行完全系统备份。使用创造性的脚本，您能够设计一个自定义的方案来本地和远程地备份系统。 </P>
<P>然而，编写自己的备份脚本可能是一项繁重的任务，对于复杂的企业来说更是如此。诸如 Tivoli Storage Manager 这样的商业化软件降低了学习难度，并允许您立即控制自己的备份，但是您可能必须调整自己的策略来适应这些工具的功能。</P>
<P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
<UL>
<LI>您可以参阅本文在 developerWorks 全球站点上的 <A href="http://www.ibm.com/developerworks/library/l-roadmap8/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">英文原文</A>. <BR>
<LI>阅读 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Windows 到 Linux 之旅系列文章</A>的其他部分（ <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>，2003 年 11 月）。 <BR>
<LI><A href="http://www.seifried.org/lasg/backups/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux Administrator's Security Guide</A>是一个安全指南，其中有一个非常优秀的小节讨论了 Linux 备份和恢复实践。 <BR>
<LI><A href="http://www.tldp.org/REF/INTRO/Backup-INTRO/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Introduction to Backing Up and Restoring Data</A>是一篇与操作系统或系统体系结构无关的概述。作者在本文中探讨了备份技术以及如何为备份制定计划。 <BR>
<LI><A href="http://www.tldp.org/LDP/lame/LAME/linux-admin-made-easy/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux Administration Made Easy</A>是一篇较旧的参考资料，但是仍然有用，因为 Linux 的一般过程和技术仍然保持一致。 <BR>
<LI><A href="http://www.tldp.org/LDP/sag/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">The Linux System Administrator's Guide</A>为初学者介绍了 Linux 系统的系统管理。 <BR>
<LI><I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Securing and Optimizing Linux - A Hands on Guide</I> (Red Hat Edition) 一书的 <A href="http://pierre.mit.edu/compfac/linux/Securing-Optimizing-Linux-RH-Edition-v%201.3/backup-rest.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">第 7 章“备份和还原”</A>是另一份不错的指南，其中包括一个脚本，用于执行基于 <CODE>tar</CODE> 的增量备份。 <BR>
<LI><A href="http://www.taobackup.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">The TAO of Backup</A>是对备份哲学的有趣展示，以哲学的形式呈现出来。虽然它和一款商业化的产品相关，但是这段信息写得非常好。 <BR>
<LI>IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>教程“ <A href="http://www-900.ibm.com/developerworks/cn/cnedu.nsf/linux-onlinecourse-bytitle/9CA39404C5580F5548256AD200205452?OpenDocument" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux 机器备份</A>”指导您完成创建和贯彻备份策略的过程。 <BR>
<LI>在 CD 上存储数据和其他内容很容易：在 IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>文章“ <A href="http://www-128.ibm.com/developerworks/cn/linux/l-cdburn/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">在 Linux 上烧录 CD</A>”中学习如何做到这点。 <BR>
<LI>如果正在从 Windows 环境转换到 Linux 环境，您还需要阅读 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-faq/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux 用户技术 FAQ</A>。 <BR>
<LI>The Tivoli Storage Manager 被评为 <A href="http://www.linuxjournal.com/article.php?sid=6678" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">LinuxWorld 2003 最佳存储解决方案</A>。从 IBM 站点的 Linux 专区了解更多关于 <A href="http://www-1.ibm.com/linux/solutions/tivolistormanaglinuxsolution.shtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Tivoli Storage Manager for Linux</A>的信息。 <BR>
<LI><A href="http://www-3.ibm.com/software/tivoli/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Tivoli 产品页</A> 包含关于 Tivoli 的更多信息，包括安全和隐私特性。 <BR>
<LI>“Linux 文档计划”中 <A href="http://tldp.org/LDP/intro-linux/html/sect_03_04.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><I>Introduction to Linux</I>的第 3 章 </A>讨论了文件权限和安全。 <BR>
<LI>在 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>Linux 专区可以找到更多 <A href="http://www-128.ibm.com/developerworks/cn/linux/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为 Linux 开发者准备的参考资料</A>。 </LI></UL>
<P></P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>Chris Walden 是德克萨斯州奥斯汀的 IBM Developer Relations Technical Consulting（也称为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><A href="http://www.ibm.com/developerworks/linux/library/i-slayers.html">dragonslayers</A> </I>）的一名电子商务架构师，该公司为 IBM 商业伙伴提供教育、实现和咨询。他致力于 Linux 相关工作，一有机会就向身边的人宣传 Linux 的种种好处。除了完成他的架构师的职责之外，他还精通 Linux 基础设施服务器的各个领域，包括混合平台用户环境下的文件、打印以及其他应用服务等。Chris 有 10 年的计算机行业经验，从现场支持到 Web 应用开发和顾问，各个领域他都曾涉足。您可以通过电子邮件 <A href="mailto:cmwalden@us.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">cmwalden@us.ibm.com</A> 与 Chris 联系。 </TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/uiiang/aggbug/16954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/uiiang/" target="_blank">小强</a> 2005-10-27 09:29 <a href="http://www.blogjava.net/uiiang/articles/16954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows 到 Linux 之旅: 第 6 部分. 使用分区和文件系统</title><link>http://www.blogjava.net/uiiang/articles/16952.html</link><dc:creator>小强</dc:creator><author>小强</author><pubDate>Thu, 27 Oct 2005 01:27:00 GMT</pubDate><guid>http://www.blogjava.net/uiiang/articles/16952.html</guid><wfw:comment>http://www.blogjava.net/uiiang/comments/16952.html</wfw:comment><comments>http://www.blogjava.net/uiiang/articles/16952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/uiiang/comments/commentRss/16952.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/uiiang/services/trackbacks/16952.html</trackback:ping><description><![CDATA[<SPAN class=atitle2>在 Linux 中使用磁盘和设备</SPAN><BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR vAlign=top align=left>
<TD>
<P>级别: 初级</P></TD></TR></TBODY></TABLE>
<P><A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part6/index.html#author1"><NAME>Chris Walden</NAME></A><BR>电子商务架构师, IBM Developer Relations<BR>2004 年 1 月 </P>
<BLOCKQUOTE><IMG height=38 alt="Column icon" src="http://www-128.ibm.com/developerworks/cn/i/c-roadmap.gif" width=38 align=left border=0>IBM 电子商务架构师 Chris Walden 将通过他在 developerWorks 上发表的九篇系列文章来指导您如何在 Linux 环境中运用您的 Windows 操作技巧。在本部分，我们研究了 Linux 的分层目录结构，以及装载和设备。</BLOCKQUOTE>
<P>在 Linux 中文件和存储设备的使用与 Windows 中不同。虽然同样有文件和分层目录结构，但是除此以外您还需要建立一种不同的思维方式。</P><A name=IDASTAHC><B>清单 1. 目录结构</B></A><BR>
<TABLE cellSpacing=0 cellPadding=5 width="50%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
/
|-- bin
|-- boot
|-- dev
|-- etc
|-- mnt
|-- opt
|   |-- IBM
|   |   |-- WebSphereStudio
|   |   `-- db2
|   |-- IBMHttpServer
|-- root
|-- sbin
|-- tmp
|-- usr
|   |-- X11R6
|   |   |-- bin
|   |   |-- include
|   |   |-- lib
|   |   |-- man
|   |   `-- share
|   |-- bin
|   |-- dict
|   |-- doc
|   |-- etc
|   |-- include
|   |-- lib
|   |-- libexec
|   |-- local
|   |   |-- OpenOffice
|   |   |   |-- sbin

</CODE></PRE></TD></TR></TBODY></TABLE>
<P><A name=IDA3TAHC><SPAN class=atitle2>没有驱动器字母!</SPAN></A><BR>在 Linux 中没有驱动器字母，这确实相当有用。如果您曾经在复杂的网络环境中使用过 Windows 系统，并且运行这个系统的机器带有若干个设备，那么您可能会发现字母表中的字母不够用。在 Linux 中，只有一个文件结构。它以 root (/) 开始，所有的本地文件系统，所有本地设备，以及所有的远程文件系统都表示为这个结构中的子目录。</P>
<P>当 Linux 第一次引导时，它根据 /etc/fstab 文件中的信息构建这个文件结构。Windows 为硬盘驱动器分区和其他存储设备分配驱动器字母，而 Linux 在 root 文件结构中为它们分配目录。这个分层的结构是完全可配置的，并且可以动态地修改。</P>
<P><A name=IDAGUAHC><SPAN class=atitle2>装载!</SPAN></A><BR>将一个设备添加到文件系统中，术语上称为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">装载</I>。Linux 会自动装载一个 / (root) 文件系统。也可能会有一个单独的 /boot 文件系统，其中存放的是核心的内核引导文件。Linux 还将装载一些特殊的文件系统。交换分区并不表示为文件系统的一部分，但是内核会处理它。不过，其他特殊的文件系统，比如 proc，被看作是文件系统的常规部分，可以像普通文件一样对它进行处理。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDASUAHC><B>什么是 /proc?</B></A><BR>/proc 文件系统是 Windows 思想与 Linux 思想不同之处的极好示例。 /proc 存储的是对正在运行的系统各个方面的虚拟描述。在那里有 IRQ 设置、内存使用、加载的设备驱动器、网络状态等很多信息。甚至有一个叫做 /proc/kcore 的文件，是所有用到的系统内存的虚拟描述。这里的每一个文件都可以像普通文件或二进制文件一样解析。可以编写某些文件来改变运行着的内核的行为，而不用重新引导。例如，为打开系统中启用的第一个以太网设备的 IP 转发，您可以使用一个文件命令：</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
echo 1 &gt; /proc/sys/net/ipv4/conf/eth0/forwarding
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>这种系统的主要好处在于，您只需要使用简单的脚本技术，就可以对您的正在运行的系统进行深入而有效的操作。</P></TD></TR></TBODY></TABLE></P>
<P>其他文件系统，比如可移动的媒体或者远程文件系统，需要手工装载。装载一个文件系统时，您需要知道在 Linux 中对它进行引用的正确方法，还需要有一个空目录作为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">装载点</I>。对于可移动媒体，Linux 可能在安装时就为您创建了装载点。在 Red Hat Linux 中，cdrom 设备被设置装载到 /mnt/cdrom 目录。也就是说，当您将一张 CD 放入 CDROM 设备后，输入命令： </P>
<P><CODE>mount /mnt/cdrom </CODE></P>
<P>CD 就会被添加到文件系统中，CDROM 设备会被锁定以使它不会被意外弹出。只需要到 /mnt/cdrom 目录就可以访问 CD 中的内容。当不再使用 CD 时，您可以用下面的命令将它从文件系统中移除：</P>
<P><CODE>umount /mnt/cdrom </CODE></P>
<P>/mnt/cdrom 目录将变空，CDROM 设备的锁定被解除。您现在可以安全地弹出 CD。对其他可移动媒体也是如此，比如软盘驱动器 (/mnt/floppy)。</P>
<P>运行不带参数的 <CODE>mount</CODE> 命令会显示出当前已装载的文件系统。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDAWVAHC><B>为什么都需要加锁？</B></A><BR>不要忘记，Linux 不仅是多用户的，而且是多会话的。也就是说几个用户可以同时登录到系统中、运行程序、使用资源。这与 Windows 中的登录后使用共享文件不同。每一个用户都可以像自己坐在控制台前一样使用系统。为了保持稳定，Linux 不允许任意释放当前正在使用的文件系统，通过锁定 CD，在直到没有人再使用之前 CD 不会被弹出。</P></TD></TR></TBODY></TABLE></P>
<P><A name=IDA4VAHC><SPAN class=atitle2>/etc/fstab 文件</SPAN></A><BR>设备与其装载点之间的关联关系在 /etc/fstab 中配置。这个文件可以直接修改，也可以由管理工具来维护。下面是一个 /etc/fstab 示例：</P>
<P><A name=table1><SPAN class=atitle3>理解 /etc/fstab</SPAN></A><BR>
<TABLE cellSpacing=0 cellPadding=3 width="65%" border=0>
<TBODY>
<TR>
<TD>/dev/hda5</TD>
<TD></TD>
<TD>ext3</TD>
<TD>defaults</TD>
<TD>1 1</TD></TR>
<TR>
<TD>/dev/hda2</TD>
<TD>/boot</TD>
<TD>ext3</TD>
<TD>exec,dev,duid,rw</TD>
<TD>1 2</TD></TR>
<TR>
<TD>/dev/hda6</TD>
<TD>swap</TD>
<TD>swap</TD>
<TD>defaults</TD>
<TD>0 0</TD></TR>
<TR>
<TD>/dev/scd0</TD>
<TD>/mnt/cdrom</TD>
<TD>auto</TD>
<TD>ro,noauto,exec</TD>
<TD>0 0</TD></TR>
<TR>
<TD>none</TD>
<TD>/dev/pts</TD>
<TD>devpts</TD>
<TD>id=5,mode=620</TD>
<TD>0 0</TD></TR>
<TR>
<TD>none</TD>
<TD>/proc</TD>
<TD>proc</TD>
<TD>defaults</TD>
<TD>0 0</TD></TR>
<TR>
<TD>none</TD>
<TD>/dev/shm</TD>
<TD>tmpfs</TD>
<TD>defaults</TD>
<TD>0 0</TD></TR></TBODY></TABLE></P>
<P>每一行表示一个要装载的文件系统。第一列指出的是要装载的设备。第二列是装载点，也就是设备在文件系统中的位置。第三列指出了文件系统的类型。第四列是处理文件系统的选项。最后一列是文件系统的标志位。第一个数字是 1 或者 0，指定系统是否应该用 dump（系统备份的一个选项）进行复制。第二个数字是 0、1 或者 2，指定了在引导时检查文件系统的次序。0 表示完全不检查。1 表示要最先检查， root (/) 文件系统需要指定为 1。其他文件系统应该是 2。</P>
<P>在上面列出的 fstab 文件中，root 文件系统位于第一个 IDE 硬盘驱动器的第五个分区中，这个分区是扩展分区的第一个逻辑驱动器。/boot 文件系统位于第一个 IDE 硬盘驱动器的第二个主分区中，其中存放的是内核启动文件。交换分区位于第一个 IDE 硬盘驱动器的第六个分区，也就是扩展分区的第二个逻辑驱动器。列表中的其他文件系统相应的设备是“none”。我们马上就要阐述这一问题。现在我们先来关注物理磁盘。</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDACQMHB><B>什么都是文件</B></A><BR>在 Linux 中，文件系统由类似于文件的名称来表示。在 /dev 目录下的所有文件都是称为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">nodes</I> 的特殊文件，它们通过设备驱动程序链接到物理设备。这就使得您可以做一些有趣的事情。例如，为制作一张 CD 的 ISO 映像，您可以使用 <CODE>cp</CODE> (copy) 命令： </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
cp /dev/cdrecorder MyCD.iso
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>这样复制的是一个二进制映像而不是 CD 的文件结构。</P>
<P>以文件为中心的方法还允许您可以为设备名称指定有意义的别名。例如，通常有一个叫做 /dev/cdrom 的别名，指向物理 CDROM 设备，而这个设备通常是 /dev/hdc。 一旦创建了别名，您就可以通过 /dev/cdrom 访问那个设备，这样更好记。别名技术还允许您标准化脚本，使这些脚本可以在物理配置不同的系统上使用。 </P></TD></TR></TBODY></TABLE></P>
<P>第四列中的选项将随文件系统类型而不同。在上面的例子中，/ 和 /boot 的装载选项为“default”。也就是说，它们使用异步 I/O 以可读写方式自动装载。只有 root 可以装载或者缷载设备，但是用户可以执行二进制文件和使用“sticky bit”（稍后介绍）。文件系统将被作为块字符设备来处理。然而，对 /mnt/cdrom 来说，选项就不同了。它不会被自动装载，并且将会作为只读文件系统装载。用户将可以在该文件系统中执行脚本和程序。</P>
<P><A name=IDAYQMHB><SPAN class=atitle2>添加文件系统</SPAN></A><BR>在 /etc/fstab 文件中添加新的一行，您就可以将文件系统添加到 /etc/fstab。作为一个实际的例子，我有一个 RAID 设备，存储的是部门所用到的文件资源。这个设备中只有数据文件，并且保持与操作系统分离，这样在出现硬件故障时可以将它转移到另一个系统。RAID 已经配置好，在 Linux 中识别为 /dev/sdc，即第三个 SCSI 设备。在第一个分区上创建了带日志的 ext3 文件系统，这样我们通过 /dev/sdc1 就可以访问它。我希望在计算机引导时自动将这个 RAID 装载到文件系统中。</P>
<P>我在 /etc/fstab 中添加了如下一行：</P>
<P><CODE>/dev/sdc1 /data ext3 defaults 0 0 </CODE></P>
<P>这样在引导时 RAID 就会像 / 和 /boot 系统一样被装载。现在我只要再创建一个目录作为指定的装载点：</P>
<P><CODE>mkdir /data </CODE></P>
<P>一旦创建了这个空目录，我们可以将文件系统装载到它：</P>
<P><CODE>mount /data </CODE></P>
<P>RAID 现在关联到了 /data。如果系统被重新引导，/data 将自动装载。</P>
<P><A name=IDAQRMHB><SPAN class=atitle2>分区</SPAN></A><BR>在 Linux 中分区与 Windows 中本质上相同。控制台命令 <CODE>fdisk</CODE> 可以创建和管理分区。当您使用 <CODE>fdisk</CODE> 时，您必须指明它要操作哪个设备。可使用命令 <CODE>fdisk -l</CODE> 来查看可用设备。 </P><A name=IDAFSMHB><B>清单 2. 使用 fdisk</B></A><BR>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
[root@cmw-t30 root]# fdisk -l

Disk /dev/hda: 240 heads, 63 sectors, 7752 cylinders
Units = cylinders of 15120 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1             1         8     60448+  8e  Linux LVM
/dev/hda2             9        15     52920   83  Linux
/dev/hda3   *        16      1403  10493280    c  Win95 FAT32 (LBA)
/dev/hda4          1404      7751  47990880    f  Win95 Ext'd (LBA)
/dev/hda5          1404      5565  31464688+  83  Linux
/dev/hda6          5566      5635    529168+  82  Linux swap
/dev/hda7          5636      7751  15996928+   b  Win95 FAT32
</CODE></PRE></TD></TR></TBODY></TABLE>
<P>上面的清单来自于一台膝上型电脑，所以它显示的结构与服务器有些不同。它显示了一个有若干个分区的 IDE 硬盘驱动器。如果有其他设备，同样也将会被列出。例如，第二个 IDE 硬盘驱动器可能会显示为 /dev/hdb。</P>
<P>指定一个设备再次运行 <CODE>fdisk</CODE> ，您会得到一个简短的提示。 </P><A name=IDAWSMHB><B>清单 3. 对一个设备运行 fdisk</B></A><BR>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
[root@cmw-t30 root]# fdisk /dev/hda

The number of cylinders for this disk is set to 7752.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):
</CODE></PRE></TD></TR></TBODY></TABLE>
<P>输入“m”可以查看命令菜单。您可以使用“p”来显示当前的分区表。您可以创建、删除和修改现有分区的类型。“l”将为您列出可用分区类型的完全列表。用“w”将您的修改写入到分区表并退出程序，或者使用“q”不保存修改而退出。一些修改会立即生效。有一些修改需要系统重新引导方能生效。</P>
<P>Linux 下的分区规则与 Windows 中相同。您可以使用 4 个主分区，每个都可以成为扩展分区。</P>
<P><A name=IDACTMHB><SPAN class=atitle2>文件系统类型</SPAN></A><BR>Linux 可以处理内核所能识别的任何文件系统类型。相当多的类型是默认编译到内核中的，并且可以再添加新的文件系统。下面是一些重要的文件系统类型：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
<LI><B>ext2</B>：标准 Linux 文件系统 
<LI><B>ext3</B>：带日志的标准 Linux 文件系统 
<LI><B>vfat</B>：Microsoft 的 Fat32 文件系统 
<LI><B>jfs</B>：IBM 的日志文件系统 
<LI><B>reiserfs</B>：另一个流行的日志文件系统 </LI></UL>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDA3TMHB><B>日志节约时间，保全数据</B></A><BR>日志文件系统有助于在非正常关闭时保护数据。如果一个卷没有缷载就被关闭，可能还遗留下未完成的工作，以及处于 in-between 状态的文件。在典型的文件系统中，需要对这个卷进行全面的检查，对较大的卷来说这需要比较长的时间。日志文件系统会对磁盘的每一个写操作的事务记录保持一段时间（比如 5 秒）。当这个卷没有被完全地缷载时，文件系统只需要回滚到最后一个已知的正常状态。原来恢复一个卷需要 20 分钟时间，现在只需要几秒!</P></TD></TR></TBODY></TABLE></P>
<P><A name=IDAFUMHB><SPAN class=atitle2>格式化分区</SPAN></A><BR>分区创建完成后，用适当版本的 <CODE>mkfs</CODE> 命令对其进行格式化。文件系统将有其自己版本的 <CODE>mkfs</CODE> ，比如 <CODE>mkfs.ext2</CODE> 或者 <CODE>mkfs.ext3</CODE> 。这些助手脚本让您可以只需要指定分区就可以创建一个文件系统。下面是一些例子： </P><A name=IDA4UMHB><B>清单 4. 使用 mkfs</B></A><BR>
<TABLE cellSpacing=0 cellPadding=5 width="50%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
 # Create an ext2 file system on the third
 # parition of the first IDE hard drive
mkfs.ext2 /dev/hda3

 # Create an ext3 file system on the first
 # partition of the 2nd SCSI hard drivemkfs.ext2
mkfs.ext3 /dev/sdb1

 # Create a jfs file system in an extended
 # partition on the first IDE hard drive.
mkfs.jfs /dev/hda5
</CODE></PRE></TD></TR></TBODY></TABLE>
<P>有一些高级的参数会影响分区如何格式化，但是对通常的用途来说，使用默认的参数就可以了。一旦分区经过了格式化，它就可以装载到 / 文件系统中。一个文件系统必须在被缷载后才可以重新格式化。</P>
<P><A name=IDAJVMHB><SPAN class=atitle2>其他文件系统工具</SPAN></A><BR>让我们来看一看其他有用的工具。</P>
<P><A name=IDARVMHB><SPAN class=atitle3>控制台工具</SPAN></A><BR>有几个工具可以查看磁盘和文件系统的状态。</P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">df</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><CODE>df</CODE> 表示“disk free”。它会报告装载的文件系统上已用的和可用的磁盘空间的大小。有用的开关： </P>
<P><A name=table1><SPAN class=atitle3>检查磁盘空间</SPAN></A><BR>
<TABLE cellSpacing=0 cellPadding=3 width="85%" border=1>
<TBODY>
<TR vAlign=bottom>
<TD width="15%"><CODE>df -h</CODE> </TD>
<TD>人类可读的格式；以易读的 k、M、G 而不是以字节为单位来显示文件的大小</TD></TR>
<TR vAlign=bottom>
<TD><CODE>df -l</CODE> </TD>
<TD>仅列出本地文件系统；默认情况下，远程文件系统也会被列出</TD></TR></TBODY></TABLE></P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">du</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><CODE>du</CODE> 表示“disk usage”。它会报告特定的文件和每个子目录 (参数中指定的目录) 所使用的磁盘空间大小。有用的开关： </P>
<P><A name=table1><SPAN class=atitle3>检查磁盘使用情况</SPAN></A><BR>
<TABLE cellSpacing=0 cellPadding=3 width="85%" border=1>
<TBODY>
<TR vAlign=bottom>
<TD width="15%"><CODE>du -a</CODE> </TD>
<TD>列出所有文件所占的空间，而不仅是目录</TD></TR>
<TR vAlign=bottom>
<TD><CODE>du -h</CODE> </TD>
<TD>人类可读的格式；以易读的 k、M、G 而不是以字节为单位来显示文件的大小</TD></TR>
<TR vAlign=bottom>
<TD width="15%"><CODE>du -c</CODE> </TD>
<TD>在所有的参数处理完成后输出一个总计；可以用来得到给定的一组文件或目录所占的总的磁盘空间</TD></TR>
<TR vAlign=bottom>
<TD><CODE>du -s</CODE> </TD>
<TD>只显示出每个参数指定的文件大小的总和</TD></TR></TBODY></TABLE></P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">fsck</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">这个程序用来检查和修复文件系统，相当于 Windows 中的 <CODE>chkdsk</CODE> 。如同 <CODE>mkfs</CODE> 一样，对应不同的文件系统类型它有不同的版本。 <CODE>fsck</CODE> 必须运行于已缷载的卷上，虽然除非是在文件系统没有缷载完全的时候，否则很少会用到它。 <CODE>man fsck</CODE> 和 <CODE>info fsck</CODE> ，以及本文最后的 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part6/index.html#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">参考资料</A>中都提供了详细的资料。 </P>
<P><A name=IDAJZMHB><SPAN class=atitle3>Webmin</SPAN></A><BR>Webmin 有一些工具用于管理文件系统和分区。</P>
<P><A name=IDASZMHB><B>图 1. Webmin 分区工具</B></A><BR><IMG height=340 alt="图 1. Webmin 分区工具" src="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part6/webminpartitions2.jpg" width=500 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P><A name=IDA4ZMHB><SPAN class=atitle3>硬件、本地磁盘上的分区</SPAN></A><BR>每一个磁盘和分区以及它们的使用情况都被显示出来。点击一个文件系统可以查看详细信息。对于已卸载的分区，可以编辑它的类型，以及格式化它的文件系统。</P>
<P><A name=IDAG0MHB><SPAN class=atitle3>系统、磁盘和网络文件系统</SPAN></A><BR>装载的和卸载的文件系统都在 /etc/fstab 中列出。普通文件系统类型有一个用于创建条目的向导。没有识别出的文件系统类型可以在这里装载和缷载，但是只能手工编辑 /etc/fstab。大多数服务器文件系统在这里都可以很好地处理。</P>
<P><A name=IDAO0MHB><SPAN class=atitle2>完整的体系是分区的总和</SPAN></A><BR>虽然在 Linux 中对分区和文件系统的管理与 Windows 中有很多类似之处，但是从驱动器字母过渡到完全的分层树可能还需要作一些调整。因此，有一些健壮的控制台工具可以使用这些功能及 /etc 目录下的配置文件。Webmin 等基于浏览器的前端提供了一些有用的工具。</P>
<P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
<UL>
<LI>您可以参阅本文在 developerWorks 全球站点上的 <A href="http://www.ibm.com/developerworks/library/l-roadmap6/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">英文原文</A>. <BR>
<LI>阅读 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Windows 到 Linux 之旅系列文章</A>的其他部分（ <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>, 2003 年 11 月）。 <BR>
<LI><A href="http://www.tldp.org/HOWTO/mini/Partition/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux Partition HOWTO</A>深入讨论了分区的机制，并详细介绍了可用的工具。 <BR>
<LI>虽然 <A href="http://www.tldp.org/LDP/lame/LAME/linux-admin-made-easy/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux Administration Made Easy</A>是一个比较老的参考资料，不过它还是有用的，因为 Linux 通常的程序和技术仍然一致。 <BR>
<LI><A href="http://www.tldp.org/HOWTO/Multi-Disk-HOWTO.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Multi Disk System Tuning HOWTO</A>描述了 Linux 中如何最好地使用多个磁盘和分区。 <BR>
<LI>“ <A href="http://www-128.ibm.com/developerworks/cn/linux/linux-speed-start/l-ss3-sles8/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">安装和配置 SuSE Linux Enterprise Server（SLES）8</A>”介绍了如何安装和配置 SuSE Linux Enterprise Server (SLES) 8，包括使用 YaST 进行图形化配置的步骤。 <BR>
<LI><A href="http://www.tldp.org/LDP/sag/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux System Administrator's Guide</A>是为新手准备的 Linux 系统管理介绍。 <BR>
<LI><I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>教程 “ <A href="http://www.ibm.com/developerworks/edu/l-dw-linux-lpir24-i.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">LPI certification 101 exam prep, Part 4: Advanced administration</A>” 中页介绍了文件系统、quotas 等内容。 <BR>
<LI>IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>系列文章 <A href="http://www-128.ibm.com/developerworks/cn/linux/filesystem/l-fs/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">高级文件系统实现者指南</A>关注的是高级主题，不过也向您介绍了 Linux 下可用的不同文件系统。 <BR>
<LI>通过 IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>文章 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-sc12/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">使虚拟文件系统工作</A>来学习如何在您的代码中使用虚拟文件系统。 <BR>
<LI>格式化一个新系统？请首先阅读来自 IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>的两篇文章：“ <A href="http://www.ibm.com/developerworks/linux/library/l-partitiontip.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Partition planning tips</A>”和“ <A href="http://www-128.ibm.com/developerworks/cn/linux/l-tip-prompt/tip05/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">在系统工作时调整分区</A>”。 <BR>
<LI>IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>的“ <A href="http://www-128.ibm.com/developerworks/cn/linux/l-tip-prompt/tip19/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">双引导 Linux</A>”一文向您介绍了如何容易地在一台机器上同时安装 Windows 和 Linux。 <BR>
<LI>IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>文章“ <A href="http://www.ibm.com/developerworks/linux/library/l-swaptip2.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Maximum swappage</A>”可以帮助您提高 Linux 服务器的交换分区的性能。 <BR>
<LI>Linux Loader，或者说是 LILO，已经被取代了! 阅读 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>教程“ <A href="http://www-900.ibm.com/developerworks/cn/cnedu.nsf/linux-onlinecourse-bytitle/79222D17C9857CDC48256A7700352434?OpenDocument" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">GRUB 入门</A>”了解全部情况。 <BR>
<LI>当您学习了 IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>上的“ <A href="http://www-128.ibm.com/developerworks/cn/linux/l-cdburn/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">在 Linux 上烧录 CD</A>”指导文章后，就可以在 Linux 上轻松烧制光盘。 <BR>
<LI>Linux Documentation Project 的 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Introduction to Linux</I> 指导的 <A href="http://tldp.org/LDP/intro-linux/html/sect_03_04.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">第 3 章</A>讲述了文件权限和安全。 <BR>
<LI><A href="http://www-128.ibm.com/developerworks/cn/linux/l-faq/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux 用户技术 FAQ</A>也可以帮助您顺利地从 Windows 过渡到 Linux。 <BR>
<LI>要开始在 Linux 上使用 IBM 的软件产品， <A href="http://www-128.ibm.com/developerworks/cn/linux/linux-speed-start/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为您的 Linux 应用开发加油提速</A>将为您提供最好的参考资料。您可以找到关于 DB2、Lotus Domino、WebSphere Application Server、WebSphere Studio 等多种应用软件的安装提示和参考资料。您还可以登录获得免费的 Linux Software Evaluation Kit，里面有试用软件和培训资料。 <BR>
<LI>在 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>Linux 专区可以找到更多 <A href="http://www-128.ibm.com/developerworks/cn/linux/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为 Linux 开发者准备的参考资料</A>。 </LI></UL>
<P></P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>Chris Walden 是位于德克萨斯州奥斯汀的 IBM Developer Relations Technical Consulting（也称为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><A href="http://www.ibm.com/developerworks/linux/library/i-slayers.html">dragonslayers</A> </I>）的一名电子商务架构师，该公司为 IBM 商业伙伴提供教育、实现和咨询。他致力于 Linux 相关工作，一有机会就向身边的人宣传 Linux 的种种好处。除了完成他的架构师的职责之外，他还精通 Linux 基础设施服务器的各个领域，包括混合平台用户环境下的文件、打印以及其他应用服务等等。Chris 有 10 年的计算机行业经验，从现场支持到 Web 应用开发和顾问，各个领域他都曾涉足。您可以通过 <A href="mailto:cmwalden-at-us.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">cmwalden-at-us.ibm.com</A> 与 Chris 联系。 </TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/uiiang/aggbug/16952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/uiiang/" target="_blank">小强</a> 2005-10-27 09:27 <a href="http://www.blogjava.net/uiiang/articles/16952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows 到 Linux 之旅: 第 5 部分. Linux 日志</title><link>http://www.blogjava.net/uiiang/articles/16951.html</link><dc:creator>小强</dc:creator><author>小强</author><pubDate>Thu, 27 Oct 2005 01:26:00 GMT</pubDate><guid>http://www.blogjava.net/uiiang/articles/16951.html</guid><wfw:comment>http://www.blogjava.net/uiiang/comments/16951.html</wfw:comment><comments>http://www.blogjava.net/uiiang/articles/16951.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/uiiang/comments/commentRss/16951.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/uiiang/services/trackbacks/16951.html</trackback:ping><description><![CDATA[<SPAN class=atitle2>使用日志</SPAN><BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR vAlign=top align=left>
<TD>
<P>级别: 初级</P></TD></TR></TBODY></TABLE>
<P><A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part5/index.html#author1"><NAME>Chris Walden</NAME></A><BR>电子商务架构师, IBM Developer Relations<BR>2003 年 3 月 </P>
<BLOCKQUOTE><IMG height=38 alt="Column icon" src="http://www-128.ibm.com/developerworks/cn/i/c-roadmap.gif" width=38 align=left border=0>IBM 电子商务架构师 Chris Walden 将通过他在 developerWorks 上发表的九篇系列文章来指导您如何在 Linux 环境中运用您的 Windows 操作技巧。在本部分，我们追踪、处理和轮循日志，以增强系统安全，收集信息。</BLOCKQUOTE>
<P>成功地管理任何系统的关键之一,是要知道系统中正在发生什么事。Linux 中提供了异常日志，并且日志的细节是可配置的。</P>
<P>Linux 日志都以明文形式存储，所以您不需要特殊的工具就可以搜索和阅读它们。您还可以编写脚本，来扫描这些日志，并基于它们的内容去自动执行某些功能。</P>
<P>Linux 日志存储在 /var/log 目录中。这里有几个由系统维护的日志文件，但其他服务和程序也可能会把它们的日志放在这里。大多数日志只有 root 才可以读，不过只需要修改文件的访问权限就可以让其他人可读。</P>
<P><A name=IDAUT0RH><SPAN class=atitle3>/var/log/messages</SPAN></A><BR>messages 日志是核心系统日志文件。它包含了系统启动时的引导消息，以及系统运行时的其他状态消息。IO 错误、网络错误和其他系统错误都会记录到这个文件中。其他信息，比如某个人的身份切换为 root，也在这里列出。如果服务正在运行，比如 DHCP 服务器，您可以在 messages 文件中观察它的活动。通常，/var/log/messages 是您在做故障诊断时首先要查看的文件。</P>
<P><A name=IDA2T0RH><SPAN class=atitle3>/var/log/XFree86.0.log</SPAN></A><BR>这个日志记录的是 Xfree86 Xwindows 服务器最后一次执行的结果。如果您在启动到图形模式时遇到了问题，一般情况从这个文件中会找到失败的原因。</P>
<P><A name=IDAEU0RH><SPAN class=atitle3>其他日志</SPAN></A><BR>根据您的 Linux 发行版本以及您所运行的服务和应用程序的不同，/var/log 目录下还会有其他日志文件。例如，可能会有与邮件服务器、资源共享、自动任务等相关的日志。</P>
<P><A name=IDAMU0RH><SPAN class=atitle2>准备好了就开始轮循</SPAN></A><BR>您将看到，/var/log 目录下有一些文件以一个数字结尾，这些是已轮循的归档文件。日志文件会变得特别大，特别笨重。Linux 提供了一个命令来轮循这些日志，以使您的当前日志信息不会淹没在旧的无关信息之中。 <CODE>logrotate</CODE> 通常是定时自动运行的，但是也可以手工运行。当执行后，logrotate 将取得当前版本的日志文件，然后在这个文件名最后附加一个“.1”。其他更早轮循的文件为“.2”、“.3”，依次类推。文件名后的数字越大，日志就越老。 </P>
<P>您可以通过编辑 /etc/logrotate.conf 文件来配置 <CODE>logrotate</CODE> 的自动行为。通过 <CODE>man logrotate</CODE> 来学习 <CODE>logrotate</CODE> 的全部细节。 </P>
<P><A name=IDAHV0RH><SPAN class=atitle2>日志工具</SPAN></A><BR>任何文本工具都可以用来处理日志文件。下面是一些特别有用的工具。</P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">dmesg</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">使用 <CODE>dmesg</CODE> 命令可以快速查看最后一次系统引导的引导日志。通常它的内容会很多，所以您往往会希望将其通过管道传输到一个阅读器。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>dmesg | more </CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>上面的命令将以分页的方式显示引导信息。</P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">tail</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">有时，当某些行为发生时，您会希望密切关注一个日志文件。 <CODE>Tail</CODE> 命令设计用于显示文本文件的最后几行。使用 <CODE>-f</CODE> 开关，当日志增加新的内容时， <CODE>tail</CODE> 将继续显示新的输出。 </P>
<P><CODE>tail -f /var/log/messages </CODE></P>
<P>上面的命令将显示 /var/log/messages 文件的最后 10 行，然后继续监控那个文件，并输出新的行为。要停止 <CODE>tail -f</CODE> 命令，使用 Ctrl + C 来中止进程。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">more</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><CODE>More</CODE> 的工作方式与 DOS 版本相同。您可以将它指向一个文件，或者通过它以管道输出信息，以分页的方式来查看信息。例如，以分页方式显示 Xfree86 启动日志文件的内容： </P>
<P><CODE>more /var/log/XFree86.0.log </CODE></P>
<P>使用“q”或者 [Ctrl]-C 来停止查看文件。</P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">less</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Less 是另一个文本阅读器，不过它还允许在文件中滚动浏览以及检索信息。 </P>
<P><CODE>less /var/log/messages </CODE></P>
<P>上面的命令将显示 /var/log/messages 文件的内容。使用“q”来停止查看文件。使用“h”来获得 <CODE>less</CODE> 的使用帮助。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">logger</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">您可能会希望将自己的消息也记录到日志文件。您可以只是将日志消息附加到恰当的文本文件，但是您必须得套用日志信息格式。同样，如果日志系统被定制，您还将不得不修改您的代码。l <CODE>logger</CODE> 命令使您可以将自己的消息发送到日志工具。在脚本中使用它来提供关于执行和错误的消息。 </P>
<P><A name=IDAYX0RH><SPAN class=atitle2>定制的日志</SPAN></A><BR>有两个服务，或者称之为后台程序，在控制日志，分别是 <CODE>klogd</CODE> 和 <CODE>syslogd</CODE> 。 <CODE>klogd</CODE> 只处理内核消息， <CODE>syslogd</CODE> 处理其他系统消息，比如应用程序。您可以通过编辑 /et/syslog.conf 和 /etc/sysconfig/syslog 来配置它们的行为。完全定制日志超出了本文的范围，不过在本文最后的 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part5/index.html#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">参考资料</A> 列表中可以找到详细的资料。您也可以查看 /etc/syslogd.conf 的 man 页面来进一步学习。 </P>
<P>本质上，软件所产生的每一条消息都提供一些信息用于确定消息是从哪里来的以及这个消息是什么。/etc/syslog.conf 文件允许您来指定如何处理那种类型的消息。您可以将它转储到消息文件，也可以将它转储到一个定制的文件。您可以将它发送到远程的主机，由远程主机来根据其自己的 syslogd 配置来处理它。远程日志是一个非常好的安全功能。通过将您的日志放置到远程系统中，您可以防止有人通过改变日志文件来掩饰其踪迹。</P>
<P>下面是取自 <CODE>man /etc/syslog.conf</CODE> 页面中的一个定制日志的例子： </P><A name=IDA5QEUG><B></B></A><BR>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
              # Kernel messages are first, stored in the kernel
              # file, critical messages and higher ones also go
              # to another host and to the console
              #
              kern.*                       /var/adm/kernel
              kern.crit                    @finlandia
              kern.crit                    /dev/console
              kern.info;kern.!err          /var/adm/kernel-info
</CODE></PRE></TD></TR></TBODY></TABLE>
<P>第一个规则将所有内核消息定向到 /var/adm/kernel 文件。</P>
<P>第二个语句将所有优先级为 crit 或者更高的内核消息定向到一个名为 finlandia 的远程主机。这是有用的，因为如果主机崩溃以及磁盘错误无法恢复，您将无法读取存储的消息。如果那些消息同时在远程主机上也存在，您就依然可以找出崩溃的原因。</P>
<P>第三个规则将这些消息定向到实际的控制台，这样，在这台机器上工作的人也可以看到它们。</P>
<P>第四行告诉 syslogd 将所有优先级为 info 到 warning 的内核消息保存到 /var/adm/kernel-info 文件。所有优先级为 err 以及更高的消息不包括在内。</P>
<P>像这种定制日志的能力为 Linux 环境提供了极大的灵活性与可控制性。</P>
<P><A name=IDAOREUG><SPAN class=atitle2>Webmin 中的日志配置</SPAN></A><BR>Webmin 有一个用于操作日志文件的模块。</P>
<P><A name=IDAXREUG><B>图 1. Webmin 系统日志视图</B></A><BR><IMG height=293 alt="图 1. Webmin 系统日志视图" src="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part5/webminsyslogs2.jpg" width=501 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P>显示了所有配置的日志文件。点击一个日志文件来编辑它的配置。</P>
<P><A name=IDAFSEUG><B>图 2. Webmin 日志编辑屏幕</B></A><BR><IMG height=331 alt="图 2. Webmin 日志编辑屏幕" src="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part5/webminsyslogslogedit2.jpg" width=500 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P>或者您可以点击 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">View</B> 来查看日志文件的内容。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=N1017D><B>在控制台中查看日志文件</B></A><BR>由于 Linux 中的日志文件以明文的形式记录，所以不需要特殊的工具来解释它们。任何文本文件阅读器都可以显示 Linux 日志文件。浏览器，比如 Mozilla，可以显示日志文件，并且提供搜索功能。Linux 还有控制台工具可以查看文本文件。 <CODE>more</CODE> ，如同 MS DOS 版本一样以分页方式显示文件。 <CODE>less</CODE> 命令将在只读阅读器中显示文件，这个阅读器具有双向滚动和搜索的功能。现在，在命令行中输入 <CODE>less /var/log/messages</CODE> ，体会一下这个命令。 </P></TD></TR></TBODY></TABLE></P>
<P>Webmin 模块与 /etc/syslog.conf 文件相关联，因此您对其中一个所做的修改会影响另一个。</P>
<P><A name=IDANTEUG><SPAN class=atitle2>您生活中的日志</SPAN></A><BR>Linux 中的日志文件对于系统的故障诊断和维护来说至关重要。Linux 日志记录到文本文件，所以不需要专门的工具来查看这些文件。文本文件也容易用于定制脚本和程序。</P>
<P>日志被轮循，以避免变得过大，同时可以将当前信息与老的数据相分离。日志轮循是可配置的。</P>
<P>日志是高度可配置的，为了安全和备份，日志甚至可以存储到单独的系统中。您可以让自己的脚本和程序产生系统日志消息，这些消息将被 syslogd 后台进程识别出并进行处理。 </P>
<P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
<UL>
<LI>您可以参阅本文在 developerWorks 全球站点上的 <A href="http://www.ibm.com/developerworks/library/l-roadmap5/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">英文原文</A>. <BR>
<LI>阅读 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Windows 到 Linux 之旅系列文章</A>的其他部分（ <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>， 2003 年 11 月）。 <BR>
<LI>syslog.conf 的 man 页中有关于如何配置日志的极好的描述。要访问它，请输入命令 <CODE>info syslog.conf</CODE> 。 <BR>
<LI>syslogd 的 man 页很好地概括描述了 syslogd 的工作原理，包括安全的问题。请输入命令 <CODE>info syslogd</CODE> 。 <BR>
<LI>IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks </I><A href="http://www.ibm.com/developerworks/edu/l-dw-linux-lpir22-i.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">LPI certification 101 exam prep, Part 2: Basic administration</A> 介绍了 shell 管道、重定向和本文处理命令。 <BR>
<LI>IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> 教程“ <A href="http://www.ibm.com/developerworks/edu/l-dw-linux-lpir24-i.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">LPI certification 101 exam prep, Part 4: Advanced administration</A>”中也介绍了使用系统日志。 <BR>
<LI>IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> 文章“ <A href="http://www.ibm.com/developerworks/linux/library/l-sec/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Addressing security issues in Linux</A>”将帮您初步了解 Linux 安全。 <BR>
<LI>在 IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> 文章“ <A href="http://www-128.ibm.com/developerworks/cn/linux/management/configuration/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">理解 Linux 配置文件</A>”中您将发现更多关于.config 文件的资料。 <BR>
<LI>“ <A href="http://www-128.ibm.com/developerworks/cn/linux/l-faq/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux 用户技术 FAQ</A>” ( <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>, 2001 年 7 月) 也可以帮助您顺利地从 Windows 过渡到 Linux。 <BR>
<LI>要开始在 Linux 上使用 IBM 的软件产品， <A href="http://www-128.ibm.com/developerworks/cn/linux/linux-speed-start/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为您的 Linux 应用开发加油提速</A> 将为您提供最好的参考资料。您可以找到关于 DB2、Lotus Domino、WebSphere Application Server、WebSphere Studio 等多种应用软件的安装提示和参考资料。您还可以登录获得免费的 Linux Software Evaluation Kit，里面有试用软件和培训资料。 <BR>
<LI>在 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> Linux 专区可以找到更多 <A href="http://www-128.ibm.com/developerworks/cn/linux/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为 Linux 开发者准备的参考资料</A>。 </LI></UL>
<P></P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>Chris Walden 是位于德克萨斯州奥斯汀的 IBM Developer Relations Technical Consulting（也称为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><A href="http://www.ibm.com/developerworks/linux/library/i-slayers.html">dragonslayers</A> </I>）的一名电子商务架构师，该公司为 IBM 商业伙伴提供教育、实现和咨询。他致力于 Linux 相关工作，一有机会就向身边的人宣传 Linux 的种种好处。除了完成他的架构师的职责之外，他还精通 Linux 基础设施服务器的各个领域，包括混合平台用户环境下的文件、打印以及其他应用服务等。Chris 有 10 年的计算机行业经验，从现场支持到 Web 应用开发和顾问，各个领域他都曾涉足。您可以通过 <A href="mailto:cmwalden-at-us.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">cmwalden-at-us.ibm.com</A> 与 Chris 联系。 </TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/uiiang/aggbug/16951.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/uiiang/" target="_blank">小强</a> 2005-10-27 09:26 <a href="http://www.blogjava.net/uiiang/articles/16951.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows 到 Linux 之旅: 第 4 部分. 用户管理</title><link>http://www.blogjava.net/uiiang/articles/16950.html</link><dc:creator>小强</dc:creator><author>小强</author><pubDate>Thu, 27 Oct 2005 01:25:00 GMT</pubDate><guid>http://www.blogjava.net/uiiang/articles/16950.html</guid><wfw:comment>http://www.blogjava.net/uiiang/comments/16950.html</wfw:comment><comments>http://www.blogjava.net/uiiang/articles/16950.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/uiiang/comments/commentRss/16950.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/uiiang/services/trackbacks/16950.html</trackback:ping><description><![CDATA[<SPAN class=atitle2>密码、组和它们的映像</SPAN><BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR vAlign=top align=left>
<TD>
<P>级别: 初级</P></TD></TR></TBODY></TABLE>
<P><A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part4/index.html#author1"><NAME>Chris Walden</NAME></A><BR>电子商务架构师, IBM Developer Relations<BR>2004 年 1 月 </P>
<BLOCKQUOTE><IMG height=38 alt="Column icon" src="http://www-128.ibm.com/developerworks/cn/c-roadmap.gif" width=38 align=left border=0>IBM 电子商务架构师 Chris Walden 将通过他在 developerWorks 上发表的九篇系列文章来指导您如何在 Linux 环境中运用您的 Windows 操作技巧。在本部分，我们使用 Webmin 界面和命令行添加、删除用户和组，并介绍了密码和组文件的映像。</BLOCKQUOTE>
<P>Linux 中的用户管理与 Windows 中的用户管理很相似，但又很不相同。两个系统都是多用户系统，基于用户身份来控制他们对资源的访问。两个操作系统都允许将用户分组管理以简化访问控制，以避免为众多用户分别设置权限。不过，相同之处也仅此而已。</P>
<P><A name=IDASL0RH><SPAN class=atitle2>超级用户</SPAN></A><BR>在 Linux 中，超级用户称为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">root</I>。root 用户可以控制所有的程序，访问所有文件，使用系统上的所有功能。对 root 用户来说没有不可以做的事情。就管理的角度而言，root 的权限是至高无上的。所以，root 帐号一定要通过安全的密码保护起来，这一点非常重要。您不应该使用 root 身份来处理日常的事务。 </P>
<P>其他用户也可以被赋予 root 特权，但一定要谨慎行事。通常您可以配置一些特定的程序由某些用户以 root 身份去运行，而不必赋予他们 root 权限。</P>
<P><A name=IDA4L0RH><SPAN class=atitle2>创建新用户</SPAN></A><BR>可以通过命令行或者 Webmin 等工具来创建新用户。</P>
<P>添加用户的命令是 <CODE>useradd</CODE> 。例如，从控制台中创建一个新用户： </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="70%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE> useradd -c "normal user" -d /home/userid -g users\ 
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
        -G webadm,helpdesk -s\ /bin/bash userid 
        </CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>这个命令创建了一个名为“userid”（命令的最后一个参数）的新用户。“normal user”是对这个用户的注释。userid 的主目录将是“/home/userid”。userid 的主组将是 users，但他也被加入到“webadm”和“helpdesk”这两个组。userid 将使用“/bin/bash”shell 作为他的常规控制台环境。</P>
<P>使用 Webmin 创建新用户简单而且直观。使用您喜欢的浏览器登录到 Webmin，切换到 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">System</B> 窗体。选择“Users and Groups”工具，然后点击 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Create a new user</B>。 </P>
<P><A name=IDA0M0RH><B>图 1. Webmin 的 Create User 屏幕</B></A><BR><IMG height=366 alt="图 1. Webmin 的 Create User 屏幕" src="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part4/webmincreateuser2.jpg" width=500 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P>填写好用户的详细信息，然后点击 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Create</B>。用户创建完成。 </P>
<P>用 GUI 工具添加用户在“ <A href="http://www.ibm.com/developerworks/linux/library/l-ss3-basics/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Basic tasks for new Linux developers</A>”一文中也讨论了。 </P>
<P><A name=IDAQN0RH><SPAN class=atitle2>修改密码</SPAN></A><BR>可以从控制台使用 passwd 命令来修改用户的密码：</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
passwd userid
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>只有 root 用户可以用 <CODE>passwd</CODE> 修改其他用户的密码。输入完命令后，系统将提示您输入并确认您要设置的密码。如果两次输入一致，用户的标识就会更新，密码修改成功。从控制台输入 <CODE>passwd</CODE> ，用户可以修改自己的密码；在这种情况下，系统会向用户询问原来的密码，验证通过后才可以输入新密码。 </P>
<P>大多数的 Linux 发行版本安装时都会启用 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">password cracker</I> 模块，用于修改密码。这个模块将检查密码是否遵循了良好的密码设置习惯。如果用户使用了不安全的密码，它将自动警告用户。您可以将系统配置为要求用户必须使用安全的密码。root 在设置不安全的密码时也会被警告，但是仍然可以设置成功。 </P>
<P>在 Webmin 中，可以使用 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">System</B>窗体中的“Change Passwords”模块来修改密码。在列表中选择一个用户，然后在空白处输入新密码。 </P>
<P><A name=IDATO0RH><SPAN class=atitle2>删除用户</SPAN></A><BR>可以从控制台使用 <CODE>userdel</CODE> 命令来删除用户。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
userdel -r userid
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>使用可选的 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">-r</B>开关可以将用户的主目录及所有相关信息全部删除。如果想要保留用户主目录，那么不要使用 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">-r</B>开关。这个开关不会自动删除系统中所有属于这个用户的文件，只是删除他的主目录。 </P>
<P><A name=IDAKP0RH><SPAN class=atitle2>如何组织用户</SPAN></A><BR>Linux 的配置是基于文本的。Linux 中的所有用户都存放于 /etc/passwd 文件中。您可以使用 <CODE>more</CODE> 命令来分页查看这个文件： </P>
<P><CODE>more /etc/passwd </CODE></P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDA2P0RH><B>/etc 目录</B></A><BR>不要忘记，Linux 的大多数配置文件都是在 /etc 目录下。</P></TD></TR></TBODY></TABLE></P>
<P>这个文件的结构非常直观。每一行是一个新用户，参数用冒号隔开。</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
userid:x:75000:75000::/home/userid:/bin/bash
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>第一列是用户名。第二列是用户的密码。第三列是用户的数字 ID。第四列是用户的主组的 ID。第五列是用户的全名，或者是注释。第六列是用户主目录的位置，这个目录通常位于 /home 目录下，目录名与用户 ID 相同。第七列是用户的默认控制台 shell。</P>
<P><A name=table1><SPAN class=atitle3>Password 文件结构</SPAN></A><BR>
<TABLE cellSpacing=0 cellPadding=3 width="85%" border=1>
<TBODY>
<TR>
<TD>Login ID</TD>
<TD>Password</TD>
<TD>User ID</TD>
<TD>Group ID</TD>
<TD>Comment</TD>
<TD>Home directory</TD>
<TD>Default shell</TD></TR>
<TR>
<TD>userid</TD>
<TD>x</TD>
<TD>75000</TD>
<TD>75000</TD>
<TD></TD>
<TD>/home/userid</TD>
<TD>/bin/bash</TD></TR></TBODY></TABLE></P>
<P>注意上面的例子中 Password 列是一个“x”。这并不是说用户的密码是“x”。以前密码曾经是以平文本的形式存储在这个文件中。现在也还有这样的配置，但由于密码容易泄露，已经很少有人再这样做了。解决的方法是创建 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">shadow password</I>。在 /etc/passwd 文件中存放密码的位置只是存放一个“x”，而经过加密的密码存放于 /etc/shadow 文件中。这项技术通过将用户信息与密码数据分离而提高了安全性。MD5 密码加密算法支持更为可靠的密码，从而进一步提高了安全性。一个映像密码条目的样例如下所示： </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDAORISG><B>映像密码和用户权限</B></A><BR>Linux 用户管理的特点之一在于它沿袭了 UNIX 风格，使用 passwd 文件。登录的用户必须可以读取 /etc/passwd 文件，以判断他的用户名是否存在。如果将用户名和密码存放在同一个文件中，潜在的攻击者就可能获得密码；他们可以下载 /etc/passwd 文件，然后以暴力破解的方法获得密码。映像文件不必所有人都可读，这样攻击者将不能获得任何形式的密码。</P>
<P>这种方法还是不最好的，因为攻击还是可以得到 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">一些</I> 用户信息。更好的方法是将用户保存于一个单独的地方，比如使用 LDAP。 </P></TD></TR></TBODY></TABLE></P>
<P><CODE>userid:$1$z2NXZR19$PZpyL84DmPKBXMeURaXXM.:12138:0:186:7:::</CODE> </P>
<P>所有的映像密码过程都是在后台进行，您只需要启用这项功能，别的什么都不用去做。</P>
<P><A name=IDA5RISG><SPAN class=atitle2>组</SPAN></A><BR>Linux 中的组与 Windows 中的组很类似。您可以创建一个组，然后将成员添加到这个组的列表中。可以以组为单位来分配资源。隶属于同一个组的成员可以访问同一资源。</P>
<P>使用控制台命令 <CODE>groupadd</CODE> 创建组很简单： </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
groupadd mygroup
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>这将创建一个名为“newgroup”的没有任何成员的组。组存放于 /etc/group 文件中。每一个组由单独的一行列出，如下所示：</P>
<P><CODE>mygroup:x:527: </CODE></P>
<P>第一列是组的名字。第二列是一个密码。同样，“x”说明真正的密码存放在 /etc/gshadow 映像文件中。第三列是组的一个数字索引。在第三列之后将是以逗号隔开的组的成员的用户 ID。</P>
<P>可以使用 <CODE>gpasswd</CODE> 命令向组中添加成员，要使用 <CODE>-a</CODE> 开关，后面跟要添加的用户名： </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
gpasswd -a userid mygroup
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>删除组的成员还是使用这个命令，不过使用的开关是 <CODE>-d</CODE> 而不是 <CODE>-a</CODE> ： </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
gpasswd -d userid mygroup
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>也可以通过直接编辑 /etc/group 文件来对组进行修改。</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDAVTISG><B>编辑 passwd 文件时要当心</B></A><BR>直接编辑 /etc/passwd 文件和 /etc/group 文件的真正危险在于有可能偶然失误而造成 ID 编号的重复。所有的资源都通过 ID 编号而不是用户或组的名字来确定用户的身份。如果您不小心造成了 ID 编号的重复，那么可能会有一些意想不到的事情发生。例如，如果您将一个用户的 ID 编号设置为 0 （root 用户的 ID），那个用户的身份将是 root!。另外，如果您在文件中删除了用户行或者组行，那么对应的用户或组也就被删掉了。</P>
<P>这些都是人为的错误。使用工具可以避免这些错误。不过，有时直接去编辑 /etc/group 文件是解决问题最快捷的途径。您一定要记住，当您在编辑那些文件时，您管理的是实际的权力。一定要小心。</P></TD></TR></TBODY></TABLE></P>
<P>在 Webmin 中，可以使用前面用到的管理用户的工具来创建、编辑、除去组。</P>
<P><A name=IDA5TISG><SPAN class=atitle2>用户和组的关联</SPAN></A><BR>虽然在这里我们不能详尽地论述访问控制，不过您应该对用户和组对文件的访问权限有初步的了解。如果您以长格式列出一个目录下的文件，您看到的将如下显示。</P>
<P><CODE>-rw-r--r-- 1 userid mygroup 703 Jun 23 22:12 myfile </CODE></P>
<P>现在暂时忽略其他的列，只去看第三、四和最后一列。第三列是文件主人的名字，userid。第四列是关联到这个文件的组，mygroup。最后一列是文件名。每个文件只能属于一个主人和一个组。可以为不能归于这两类的其他用户（Other）设置权限。可以认为 Other 相当于 Windows 中的 Everyone 组。</P>
<P>一个文件只能属于一个主人，这在操作系统中很常见，但是，文件只能属于一个组，初次使用这一规则的管理员可能会觉得受到了限制。事实并不如此。由于用户可以同时是多个组的成员，所以只需要创建新的组就可以安全使用资源。在 Linux 中，往往是基于所需要的资源访问权限而不是根据业务单位来定义组。如果系统的资源逻辑上是有组织的，那么可以创建更多的组来更好地控制对资源的访问。</P>
<P>在本文最后的 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part4/index.html#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">参考资料</A> 部分，您可以找到关于关联用户和组的更多详细资料。查看 <CODE>man chmod</CODE> 可以获得如何改变文件权限的详细信息。 </P>
<P><A name=IDAXUISG><SPAN class=atitle2>结束语</SPAN></A><BR>在 Linux 中管理用户和组的方式与 Windows 中本质上是相同的，但是 Linux 中只能有惟一的组可以关联到一个系统资源。应该这样认识 Linux 中的组管理：不要吝惜对组的使用，在复杂的环境中，不要害怕创建很多组。应该根据资源访问权限而不是基于业务单位去创建组。</P>
<P>用户和组信息分别存储在 /etc/passwd 文件和 /etc/group 文件中。您的系统可能还会有 /etc/shadow 和 /etc/gshadow 文件，它们存储的是为了安全而经过加密的密码。直接编辑这些文件来管理用户和组不是不可以，但您一定要谨慎行事。</P>
<P>所有的用户和组的管理都可以在控制台中完成，可以写成脚本。也可以使用 Webmin 等工具以图形化的方式管理用户和组。</P>
<P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
<UL>
<LI>您可以参阅本文在 developerWorks 全球站点上的 <A href="http://www.ibm.com/developerworks/library/l-roadmap4/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">英文原文</A>. <BR>
<LI>阅读 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Windows 到 Linux 之旅系列文章</A>的其他部分（ <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>， 2003 年 11 月）。 <BR>
<LI><I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">The Linux System Administrator's Guid</I>, <A href="http://www.redhat.com/mirrors/LDP/LDP/sag/c2318.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Chapter 11. Managing user accounts</A> 虽然是一份比较老的文档，但是仍值得一读，因为管理用户和组的技术是通用的。这份指南将帮助您深入学习 Linux 中基于控制台的管理。 <BR>
<LI><A href="http://www.linuxheadquarters.com/howto/index.shtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux Headquarters</A> 站点给出了关于很多主题的基本教程和提示。那些标签往往是“我已经安装了 Linux ... 现在该怎么办？？？”您可能会对 <A href="http://www.linuxheadquarters.com/howto/index.shtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">这些教程</A> 很感兴趣。 <BR>
<LI>Linux Documentation Project 也提供了一个 <A href="http://tldp.org/HOWTO/HOWTO-INDEX/categories.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">分类的 HOWTO 列表</A>，来帮助您快速方便地找到适当的文档。 <BR>
<LI>在“ <A href="http://www-128.ibm.com/developerworks/cn/linux/linux-speed-start/l-ss3-basics/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">针对 Linux 开发新手的基本任务</A>”中也对使用 GUI 系统工具添加用户进行了介绍。 <BR>
<LI><I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> 教程“ <A href="http://www.ibm.com/developerworks/edu/l-dw-linux-lpir23-i.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">LPI certification 101 exam prep, Part 3: Intermediate administration</A>”中也涉及了用户管理方面的内容。 <BR>
<LI>IBM Directory Server 实现了轻量目录访问协议（Lightweight Directory Access Protocol , LDAP），用于访问目录服务，尤其是那些基于 X.500 的目录服务。 更多细节请阅读“ <A href="http://www-128.ibm.com/developerworks/cn/linux/l-ibmd/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">使用 IBM Directory Server 进行 Linux 用户验证</A>”。 <BR>
<LI>Linux Documentation Project 的 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Introduction to Linux</I> 指南的 <A href="http://tldp.org/LDP/intro-linux/html/sect_03_04.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">第 3 章</A>中讲述了文件权限和安全。 <BR>
<LI>阅读更多 <A href="http://prognosis.lib.ece.ntua.gr/dimitris/Linux%20Docs/Learning%20Linux%20-Collection%20of%2012%20Ebooks-/Linux%20Unleashed,%20Third%20Edition/ch35/634-636.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Users and Logins</A>资料，请参考 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux Unleashed</I>（Macmillan Computer Publishing，1998 年）的相关章节，以及 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">The Official Red Hat Linux System Administration Primer</I>（Red Hat， 2002 年）的 <A href="http://www.src.wits.ac.za/inkosi/linux/rhl-sap-en-8.0/ch-acctsgrps.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Managing Accounts and Groups</A>。 <BR>
<LI>Maryland 大学共享了他们的关于 <A href="http://internal.physics.umd.edu/pnce/passwds.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">安全密码的选择</A> 的思路与技巧。 <BR>
<LI>Red Hat Linux Manual 文档中有关于使用 <A href="http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/ref-guide/s1-users-groups-shadow-utilities.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Shadow passwd file</A>的详细资料。 <BR>
<LI><A href="http://tldp.org/HOWTO/Shadow-Password-HOWTO-2.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux Shadow Password HOWTO</A>介绍了映像系统的背景历史和相关资料，以及面向实现的循序渐进的指南。 <BR>
<LI>系统安全是一个广泛而复杂的主题，但是在互联网的世界中，它会影响到每一个人。幸运的是，只要开始意识到这个问题，就不算晚。以下两篇文章将对您有所帮助，一篇是 <A href="http://tldp.org/linuxfocus/English/July1998/article60.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Adding Security to Common Linux Distributions</A>，另一篇是 <A href="http://tldp.org/LDP/lame/LAME/linux-admin-made-easy/security.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Strategies for Keeping a Secure Server</A>（来自于以前引用过的 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux Administration Made Easy</I>指南的第 12 章）。 <BR>
<LI>IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> 文章“ <A href="http://www.ibm.com/developerworks/linux/library/l-sec/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Addressing security issues in Linux</A>”将带您开始实现初步的安全。 <BR>
<LI>“ <A href="http://www-128.ibm.com/developerworks/cn/linux/l-faq/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux 用户技术 FAQ</A>” （ <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>， 2001 年 7 月）也可以帮助您顺利地从 Windows 过渡到 Linux。 <BR>
<LI>要开始在 Linux 上使用 IBM 的软件产品， <A href="http://www-128.ibm.com/developerworks/cn/linux/linux-speed-start/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为您的 Linux 应用开发加油提速</A> 将为您提供最好的参考资料。您可以找到关于 DB2、Lotus Domino、WebSphere Application Server、WebSphere Studio 等多种应用软件的安装提示和参考资料。您还可以登录获得免费的 Linux Software Evaluation Kit，里面有试用软件和培训资料。 <BR>
<LI>在 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> Linux 专区可以找到更多 <A href="http://www-128.ibm.com/developerworks/cn/linux/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为 Linux 开发者准备的参考资料</A>。 </LI></UL>
<P></P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>Chris Walden 是位于德克萨斯州奥斯汀的 IBM Developer Relations Technical Consulting（也称为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><A href="http://www.ibm.com/developerworks/linux/library/i-slayers.html">dragonslayers</A> </I>）的一名电子商务架构师，该公司为 IBM 商业伙伴提供教育、实现和咨询。他致力于 Linux 相关工作，一有机会就向身边的人宣传 Linux 的种种好处。除了完成他的架构师的职责之外，他还精通 Linux 基础设施服务器的各个领域，包括混合平台用户环境下的文件、打印以及其他应用服务等。Chris 有 10 年的计算机行业经验，从现场支持到 Web 应用开发和顾问，各个领域他都曾涉足。您可以通过 <A href="mailto:cmwalden@us.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">cmwalden@us.ibm.com</A> 与 Chris 联系。 </TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/uiiang/aggbug/16950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/uiiang/" target="_blank">小强</a> 2005-10-27 09:25 <a href="http://www.blogjava.net/uiiang/articles/16950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows 到 Linux 之旅: 第 3 部分. Webmin 简介</title><link>http://www.blogjava.net/uiiang/articles/16949.html</link><dc:creator>小强</dc:creator><author>小强</author><pubDate>Thu, 27 Oct 2005 01:23:00 GMT</pubDate><guid>http://www.blogjava.net/uiiang/articles/16949.html</guid><wfw:comment>http://www.blogjava.net/uiiang/comments/16949.html</wfw:comment><comments>http://www.blogjava.net/uiiang/articles/16949.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/uiiang/comments/commentRss/16949.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/uiiang/services/trackbacks/16949.html</trackback:ping><description><![CDATA[<SPAN class=atitle2>一个基于浏览器的管理工具</SPAN><BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR vAlign=top align=left>
<TD>
<P>级别: 中级</P></TD></TR></TBODY></TABLE>
<P><A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part3/index.html#author1"><NAME>Chris Walden</NAME></A><BR>电子商务架构师, IBM Developer Relations<BR>2004 年 1 月 </P>
<BLOCKQUOTE><IMG height=38 alt="Column icon" src="http://www-128.ibm.com/developerworks/cn/c-roadmap.gif" width=38 align=left border=0>IBM 电子商务架构师 Chris Walden 将通过他在 developerWorks 上发表的九篇系列文章来指导您如何在 Linux 环境中运用您的 Windows 操作技巧。本部分介绍了 Webmin 的安装和使用，它是一个基于浏览器的管理工具，可以应用于 Linux 和其他一些平台，提供了可以完成很多管理和操作任务的图形化界面。</BLOCKQUOTE>
<P>从 Windows 环境的管理转到 Linux 环境的管理时所面临的挑战之一是，您需要去学习利用新的工具。作为一个管理员，您希望理解操作系统的细节以发挥它的最大功效。但是，当您还处在学习阶段时，就需要去完成具体的工作。</P>
<P>为加速您驾驭 Linux 的进度，我们将安装一个叫做 Webmin 的程序。如 Webmin.com（参阅 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part3/index.html#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">参考资料</A>中的链接）所言：“Webmin 是一个基于 Web 的 Unix 系统管理界面。借助任何支持表格和表单的浏览器（和 File Manager 模块所需要的 Java），您就可以设置用户帐号、Apache、DNS、文件共享，等等。Webmin 包括一个简单的 Web 服务器和许多 CGI 程序，这些程序可以直接修改系统文件，比如 <CODE>/etc/inetd.conf</CODE> 和 <CODE>/etc/passwd</CODE> 。Web 服务器和所有的 CGI 程序都是用 Perl 5 编写的，没有使用任何非标准 Perl 模块。” </P>
<P>Webmin 事实上可以运行于所有的类 Unix 平台，包括 Linux、AIX、HPUX、Solaris、OS X，等等。它具有一个 Web 前端，可以完成 Linux 中的诸多管理任务。它可以以本地方式或者远程方式运行于任意图形化浏览器中。Webmin 使用 SSL 来保证安全，防止侦听。当您学习 Linux 管理时，Webmin 将为您节省很多时间。Webmin 还可以帮您完成那些还不能自动执行的繁琐的任务。</P>
<P>Webmin 是可扩展的。作者提供了一个开发向导，而且已经出现了一些第三方的模块。您也可以设计您自己的模块，以使 Webmin 永远可以按您的需要进行调整。</P>
<P><A name=IDACUMSD><SPAN class=atitle2>安装 Webmin</SPAN></A><BR>使用 Webmin 的第一个步骤是安装。Webmin 在少数的发行版本中已经附带，不过从 Webmin 网站下载也很简单 （参阅 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part3/index.html#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">参考资料</A>中的链接）。 </P>
<P>写作本文时，Webmin 的最新版本是 1.90 。根据您所使用的 Linux 发行版本，正确的安装方法不尽相同。如果您使用的是 Red Hat Linux 或者是 UnitedLinux 发行版本的一种（SuSE、Turbo、Connectiva 或者 Caldear），那么最简单的是使用 RPM 安装方法。如果您用的是其他的发行版本，那么您需要去阅读您的发行版本的文档和 Webmin 安装说明来选择最好的安装方式。以下我们假定是以 RPM 方式进行安装。</P>
<P>首先检查您的系统上是否已经安装了 Webmin。在文本终端中输入：</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
rpm -q webmin
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>如果您的系统已经安装了 Webmin，您会得到它的版本号：</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
Webmin-1.090-1
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>否则您会看到没有安装 Webmin 的提示：</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
package webmin is not installed
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDADVMSD><B>安装软件包</B></A><BR>在 Linux 上大多数软件包的安装都是像本文中安装 Webmin 这样简单。要了解更多有关软件包的安装和缷载——甚至有关自源代码编译应用程序——的信息，请参阅本系列文章的 <A href="http://www.ibm.com/developerworks/linux/library/l-roadmap9/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">第 9 部分</A>。 </P></TD></TR></TBODY></TABLE></P>
<P>即便已经安装了 Webmin，它的版本也可能会低于当前可用的最新版本。在这种情况下，您可以使用下面的命令来对它进行升级或者重新安装：</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="60%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
rpm -Uvh webmin-1.090-1.noarch.rpm
</CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>在进行冗长的更新时会输出一行带有 # 标记的进度条。</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDAZVMSD><B>RPM noarch</B></A><BR>您会注意到 Webmin 被作为“noarch”软件包列出来。由于 RPM 是二进制文件，它们通常为特定的体系结构进行编译，比如 i386 或者 ppc。在错误的体系结构上安装软件包会导致错误的结果。因为 Webmin 是用 Perl 编写的，而 Perl 是体系结构无关的，所以 Webmin 被标识为“noarch”。</P></TD></TR></TBODY></TABLE></P>
<P>当 Webmin 安装后，默认是启用的。但是这样安装并没有启用 SSL。SSL 需要安装一个称为 <CODE>Net::SSLeay</CODE> 的 Perl 模块。如果不装这个模块，Webmin 只有从本地控制台运行时才是安全的。在本文的最后将简要介绍 Webmin 的安全使用。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDAKWMSD><B>Practical Extraction and Reporting Language (Perl) </B></A><BR>Perl 是 1987 年出现的一种多平台的解释性编程语言。它在多种平台都可以使用，包括 Windows，具有成熟完善的脚本功能。Perl 的强项在于文本处理，广泛应用于 Web CGI 编程。Perl 可以通过添加模块来进行扩展，这些模块实际上是函数库，也是用 Perl 编写的。大多数模块，事实上包括 Perl 本身，都可以遵循 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">The Artistic License</I>这一许可而自由获得（参阅 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part3/index.html#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">参考资料</A>中的链接）。 </P></TD></TR></TBODY></TABLE></P>
<P><A name=IDAZWMSD><SPAN class=atitle2>使用 Webmin</SPAN></A><BR>使用您喜欢的 Web 浏览器来访问 Webmin。其中文件浏览器和 telnet/ssh 客户机这两个工具是基于 applet 的，需要在您的浏览器上安装有 Java Runtime Environment。这两个工具会带来便利，但并不是不可或缺的。其余所有模块都没有特殊的要求。</P>
<P>将您的浏览器指向系统的 10000 端口，以开始使用 Webmin。在本地系统的浏览器中，您应该输入 <CODE>http://localhost.localdomain:10000/</CODE> 。首先您看到的将是一个登录界面。 </P>
<P>Webmin 的用户与操作系统的用户是分开的。这就使得您不通过常规的 Unix 验证机制就可以通过 Webmin 来设置进行管理的用户。不过，如果您想让某些用户可以使用 Webmin，您可以将他们加入 Webmin 用户列表，让 Webmin 通过 Unix 工具来对其进行验证，而不再使用 Wemin 的内部验证机制。可以控制每个用户对 Webmin 模块的访问。例如，Helpdesk 职员只可以使用密码功能，而其他职员可以访问所有的模块。</P>
<P>安装完成后，root 用户会被自动创建，密码为系统的 root 密码。Webmin 根据登录记录日志，这样，在一个多管理员的环境中，可能更应该创建一个具有 root 用户权限的管理员组，并为使用此系统的每个人分别去创建用户。您第一次必须以 root 身份登录。</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDAKXMSD><B>root 用户</B></A><BR>在 Linux 中，首要的管理员用户称为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">root</I>。root 用户对整个系统有完全的控制权。不可以滥用 root。 </P></TD></TR></TBODY></TABLE></P>
<P><A name=IDAWXMSD><SPAN class=atitle2>Webmin 窗体</SPAN></A><BR>您看到的第一个屏幕将是 Webmin Configuration Section。在这里您可以配置 Webmin 用户、配置模块和查看活动日志。顶部的图标可以在 Webmin 中不同的模块窗体间进行切换。所有的模块都是可配置的，您可以根据自己的需要对它们进行重组。</P>
<P><A name=IDACQM0E><B>图 1. Webmin 配置屏幕</B></A><BR><IMG height=465 alt="Webmin 配置屏幕" src="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part3/webminwebmin2.jpg" width=500 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDAPQM0E><B>用户也可以使用 Webmin</B></A><BR>有一个图标用来配置可选的 Usermin 软件包，这个软件包提供了一个基于 Web 的工具，用户可以借助它完成修改密码、管理系统邮件等任务。使用 Usermin 不能访问系统配置文件。Usermin 和 Webmin 都将是免费的产品。</P></TD></TR></TBODY></TABLE></P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">System</B>窗体可以进行操作系统的总体配置。在这里，您可以配置文件系统、用户、组和系统通常的引导行为。您可以控制系统中运行的服务，通过选择 Bootup 和 Shutdown 图标来决定它们是否自动启动。不过，对那些服务的具体配置是由 Servers 窗体完成的。尤其要注意“Software Package”工具，它可以方便地查看您系统中已经安装的软件包，以及到发行版本升级库和 rpmfind.net 的接口，rpmfind.net 是 Internet 上的一个公用的 RPM 库（参阅 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part3/index.html#resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">参考资料</A>中的链接）。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Servers</B> 窗体可以对您可能会在系统中运行的各个服务进行配置。BIND 和 DHCP 工具非常便捷。同时 Samba 工具也很好用，可以为 Windows 和其他客户机配置文件和打印机的共享。SMTP 服务器 Sendmail 以其极复杂的配置文件而出名。Webmin Sendmail 工具同样为您解决了这一问题。 </P>
<P><A name=IDAERM0E><B>图 2. Webmin 服务器屏幕</B></A><BR><IMG height=462 alt="Webmin 服务器屏幕" src="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/part3/webminservers2.jpg" width=500 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"> </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Networking</B> 窗体所提供的工具可以用来配置网络硬件和进行一些复杂的网络控制，比如防火墙。所有的工具都要去修改标准的配置文件，因此您在 Webmin 中所做的任何工作都可以由相对应的控制台工具来完成。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Hardware</B> 窗体用于配置物理设备，主要是打印机和存储设备。特别值得关注的是逻辑卷管理 (Logical Volume Management，LVM) 工具，它可以帮您可视化地管理您的 Linux 系统上的动态卷。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Cluster</B> 窗体中的工具用于管理集群系统。 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">集群</I>在这里指的是其配置需要同步的一组相关系统。系统可以在进行系统故障检测时同步用户、组、软件包等配置。这些工具可以帮助您构建热错误恢复系统和其他需要同步的系统。集群是一个高级的主题，可能需要安装一些您的 Linux 发行版本没有自带的软件包。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Others</B> 窗体中有各种各样的工具，您可能会发现它们很有用。“SSH/Telnet Login”和“File Manager”工具需要 applet 支持，只有在您的浏览器上安装了 JRE 以后才可以运行。“Perl Modules”工具可以使您紧跟 Perl 模块的发展，它可以直接连接到 Internet 上的 CPAN。“File Manager”工具为服务器的文件系统提供了一个像浏览器一样的视图，如果您是在远程工作，那么不通过您的工作站的内存就可以对文件进行移动和复制。“SSH/Telnet Login” 工具是一个远程 shell 控制台，使您可以通过浏览器进入控制台。 </P>
<P><A name=IDACSM0E><SPAN class=atitle2>结束语</SPAN></A><BR>Webmin 是一个用 Perl 编写的基于浏览器的管理应用程序。Webmin 是可扩展的，除了用于 Linux 之外，还可以用于其他类 Unix 操作系统。安装完成后，可以在本地或者远程浏览器通过一个特定的端口，通常是 10000，来进入 Webmin。它具有可以指向和点击的界面，可以完成各种 Linux 管理任务，包括用户管理、网络防火墙和网络设备的配置。</P>
<P>Webmin 安装和使用都是免费的，它是一个很好的管理 Linux 环境的工具，如果您以前用的是 Windows 的图形化管理工具。Webmin 工具是基于控制台的工具的前端，因此使用这两种工具进行配置效果是一致的，它们都可以可靠地完成管理任务。</P>
<P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
<UL>
<LI>您可以参阅本文在 developerWorks 全球站点上的 <A href="http://www.ibm.com/developerworks/library/l-roadmap3/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">英文原文</A>. <BR>
<LI>阅读 <A href="http://www.ibm.com/developerworks/linux/library/l-roadmap.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Windows 到 Linux 之旅系列文章</A>的其他部分（ <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>, 2003 年 11 月）。 <BR>
<LI>查看 <A href="http://www.webmin.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Webmin 主页</A>以获得此工具的总体介绍，并 <A href="http://www.webmin.com/download.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">下载 Webmin 工具</A>。 <BR>
<LI>在远程使用 Webmin 之前，您应该阅读 <A href="http://www.webmin.com/ssl.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Securing Webmin with SSL</A>。 <BR>
<LI>在 <A href="http://www.perl.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Perl.org</A>更深入地学习 Perl。 <BR>
<LI><A href="http://www.cpan.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">CPAN</A>网络中有很多有用的 Perl 模块和类似的软件。 <BR>
<LI>Perl 是遵循 <A href="http://www.perl.com/pub/a/language/misc/Artistic.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Artistic License</A>自由发行的，您可以将您对其源代码的修改公开 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">或者</I>保留为私有。 <BR>
<LI>通过 IBM <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> <A href="http://www.ibm.com/developerworks/views/linux/articles.jsp?sort_order=desc&amp;expand=&amp;sort_by=Date&amp;show_abstract=true&amp;view_by=Search&amp;search_by=cultured+perl%3A" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Cultured Perl</A>专栏您可以更深入地学习 Perl，并及时了解 Perl 的发展。 <BR>
<LI><A href="http://www.rpmfind.net/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">RPMFind</A>是一个 RPM 库，在这里您可以找到许多有用的（也有许多用处不大但是很有趣的）程序。<BR>
<LI>“ <A href="http://www-128.ibm.com/developerworks/cn/linux/management/configuration/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">理解 Linux 配置文件</A>”( <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>) 解释了用户权限、后台进程和服务，等等。 <BR>
<LI>“ <A href="http://www-128.ibm.com/developerworks/cn/linux/sdk/perl/xinetd/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">将 xinetd 程序用于系统管理</A>”和“ <A href="http://www-128.ibm.com/developerworks/cn/linux/sdk/perl/culture-5/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">使用 Perl 自动化 UNIX 系统管理</A>”介绍了简化您的系统管理的其他途径。类似的内容在“ <A href="http://www-128.ibm.com/developerworks/cn/linux/l-adfly/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">实时管理 Linux</A>”中也有涉及。 <BR>
<LI>有用的教程包括：“ <A href="http://www.ibm.com/developerworks/edu/l-dw-linux-lpir22-i.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">LPI certification 101 (release 2) exam prep, Part 2: Basic administration</A>”介绍了 shell 管道和文本处理命令；“ <A href="http://www.ibm.com/developerworks/edu/l-dw-linux-lpir23-i.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">LPI certification 101 (release 2) exam prep, Part 3: Intermediate Administration</A>”介绍了文档、用户帐号管理以及授权；“ <A href="http://www.ibm.com/developerworks/edu/l-dw-linux-lpir24-i.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">LPI certification 101 (release 2) exam prep, Part 4: Advanced administration</A>”介绍了文件系统和系统日志。 <BR>
<LI>要开始在 Linux 上使用 IBM 的软件产品， <A href="http://www-128.ibm.com/developerworks/cn/linux/linux-speed-start/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为您的 Linux 应用开发加油提速</A>将为您提供最好的参考资料。您可以找到关于 DB2、Lotus Domino、WebSphere Application Server、WebSphere Studio 等多种应用软件的安装提示和参考资料。您还可以登录获得免费的 Linux Software Evaluation Kit，里面有试用软件和培训资料。 <BR>
<LI>在 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>Linux 专区可以找到更多 <A href="http://www-128.ibm.com/developerworks/cn/linux/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为 Linux 开发者准备的参考资料</A>。 </LI></UL>
<P></P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>Chris Walden 是位于德克萨斯州奥斯汀的 IBM Developer Relations Technical Consulting（也称为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><A href="http://www.ibm.com/developerworks/linux/library/i-slayers.html">dragonslayers</A> </I>）的一名电子商务架构师，该公司为 IBM 商业伙伴提供教育、实现和咨询。他致力于 Linux 相关工作，一有机会就向身边的人宣传 Linux 的种种好处。除了完成他的架构师的职责之外，他还精通 Linux 基础设施服务器的各个领域，包括混合平台用户环境下的文件、打印以及其他应用服务等。Chris 有 10 年的计算机行业经验，从现场支持到 Web 应用开发和顾问，各个领域他都曾涉足。您可以通过 <A href="mailto:cmwalden-at-us.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">cmwalden-at-us.ibm.com</A>与 Chris 联系。 </TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/uiiang/aggbug/16949.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/uiiang/" target="_blank">小强</a> 2005-10-27 09:23 <a href="http://www.blogjava.net/uiiang/articles/16949.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows 到 Linux 之旅: 第 2 部分. 控制台速成班</title><link>http://www.blogjava.net/uiiang/articles/16948.html</link><dc:creator>小强</dc:creator><author>小强</author><pubDate>Thu, 27 Oct 2005 01:22:00 GMT</pubDate><guid>http://www.blogjava.net/uiiang/articles/16948.html</guid><wfw:comment>http://www.blogjava.net/uiiang/comments/16948.html</wfw:comment><comments>http://www.blogjava.net/uiiang/articles/16948.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/uiiang/comments/commentRss/16948.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/uiiang/services/trackbacks/16948.html</trackback:ping><description><![CDATA[<SPAN class=atitle2>Linux 控制台快速指南</SPAN><BR>
<P><A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/index2.html#author1"><NAME>Chris Walden</NAME></A><BR>电子商务架构师, IBM Developer Relations<BR>2004 年 1 月 </P>
<BLOCKQUOTE><IMG height=38 alt="Column icon" src="http://www-128.ibm.com/developerworks/cn/i/c-roadmap.gif" width=38 align=left border=0>IBM 电子商务架构师 Chris Walden 将通过他在 developerWorks 上发表的九篇系列文章来指导您如何在 Linux 环境中运用您的 Windows 操作技巧。本部分将介绍各种不同的 shell 和一些最基本的 Linux 命令。</BLOCKQUOTE>
<P>Linux 中的所有管理任务都可以在控制台中完成。许多情况下，使用控制台比使用图形化的程序更快捷，而且还可能实现额外的功能。不仅如此，所有的控制台任务都可以写到脚本中，这样就可以自动执行。为了真正地驾驭您的 Linux 环境，您将希望掌握如何在控制台中工作。如果您曾经使用过 DOS/Windows，本文将引导您开始使用 Linux 控制台。 </P>
<P><A name=IDASDWZG><SPAN class=atitle2>进入控制台</SPAN></A><BR>如果您的系统引导进入文本模式（为了降低服务开销，服务器通常是这样配置的），那么您在以文本形式登录后就已经在控制台中了。在典型的 Linux 系统中，通过组合键 Ctrl + Alt + (F1 - F6) 您可以切换到另外的控制台。每一个控制台是系统中一个完全独立的会话，不同的用户可以同时使用。</P>
<P>这一多控制台的特点与 Windows 中的多桌面不同。在 Linux 中，每一个控制台可以分别由完全不同的用户来控制。例如，您可能在控制台 1 中以 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">root</I>身份登录，而在控制台 2 中以 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">joeuser</I> 身份登录。两个控制台在各自的用户空间中运行不同的程序。与此类似，不同的用户可以远程登录到同一个 Windows 系统中。就这一点来说，Linux 更像是主机而不是简单的服务器或工作站。 </P>
<P>如果您是在图形模式下，那么您可以打开一个 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">终端 (terminal)</I>以进入控制台窗口。通常在桌面的任务条上会有终端的按钮。您也可以从上下文菜单（在桌面上单击右键）打开终端 。 </P>
<P><A name=IDAEEWZG><SPAN class=atitle2>命令</SPAN></A><BR>在控制台中可以使用的命令很多。其中有一些实际上只在编写脚本时才会用到。这里介绍一些您最可能用到的命令。不要忘记，所有的命令和选项都区分大小写。 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">-R</B> 与 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">-r</B>不同，会去执行不同的操作。控制台命令几乎全都是小写的。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">cd</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">使用我们所熟悉的 <CODE>cd</CODE> 命令可以在目录间切换。一定注意的是在 Linux 中用的是正斜杠 (/)，而不是您所熟悉的反斜杠 (\)。反斜杠也用到了，但只是用来说明命令需要换行继续，这样可以提高比较长的命令的可读性。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">ls</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><CODE>ls</CODE> 命令用于列出一个目录下的所有文件。可以使用许多不同的开关更改列表的表示形式： </P>
<P><A name=table1><SPAN class=atitle3>列出文件</SPAN></A><BR>
<TABLE cellSpacing=0 cellPadding=3 width="85%" border=1>
<TBODY>
<TR vAlign=bottom>
<TD width="15%"><CODE>ls -l</CODE> </TD>
<TD>以长格式列出文件，包括文件大小、日期和时间、属性</TD></TR>
<TR vAlign=bottom>
<TD><CODE>ls -t</CODE> </TD>
<TD>对文件以时间排序</TD></TR>
<TR vAlign=bottom>
<TD><CODE>ls -S</CODE> </TD>
<TD>对文件以大小排序</TD></TR>
<TR vAlign=bottom>
<TD><CODE>ls -r</CODE> </TD>
<TD>与一个排序开关组合起来使用，逆序排列。 <CODE>ls -t</CODE> 将最新的文件显示在列表的顶部。 <CODE>ls -t</CODE> 将最新的文件显示在底部。 </TD></TR>
<TR vAlign=bottom>
<TD><CODE>ls -h</CODE> </TD>
<TD>易读格式。使用 k、M、G 等来标识文件的大小，而不是以字节为单位。</TD></TR>
<TR vAlign=bottom>
<TD><CODE>ls -a</CODE> </TD>
<TD>显示目录中所有的文件，包括隐藏文件</TD></TR></TBODY></TABLE></P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">cp</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">使用 <CODE>cp</CODE> 命令来复制文件。这个命令与 DOS 下的 <CODE>copy</CODE> 命令基本一样。基本的开关如下： </P>
<P><A name=table1><SPAN class=atitle3>复制文件</SPAN></A><BR>
<TABLE cellSpacing=0 cellPadding=3 width="85%" border=1>
<TBODY>
<TR vAlign=bottom>
<TD width="15%"><CODE>cp -R</CODE> </TD>
<TD>递归地复制文件；当需要复制整个目录时会用到</TD></TR>
<TR vAlign=bottom>
<TD><CODE>cp -f</CODE> </TD>
<TD>强制复制并覆盖已有的文件，不询问用户</TD></TR>
<TR vAlign=bottom>
<TD><CODE>cp -l</CODE> </TD>
<TD>链接文件，而不是复制；见下面的说明</TD></TR></TBODY></TABLE></P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDATQ00G><B>使用复制命令创建链接</B></A><BR>用 <CODE>cp</CODE> 命令可以创建指向一个文件或者整个文件结构的硬链接。使用 <CODE>-l</CODE> 开关来指明操作是链接复制。所有的目录仍作为目录创建，但所有的文件会被设置为硬链接。 </P>
<P><CODE>cp -lR /data/accounting/payroll /data/management/hr </CODE></P>
<P>上面的命令将把整个目录结构及其下面的文件从 /data/accounting/payroll 复制到 /data/management/hr/payroll。目录结构下的所有文件将被设置为硬链接。这样使一个文件在同一个文件系统中可以具备不同的视图。这也是有用的安全技术，使得在不同的目录下对同一文件有不同的访问权限。</P></TD></TR></TBODY></TABLE></P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">mv</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">使用 <CODE>mv</CODE> 命令来移动和重命名文件。这个命令的工作方式基本上与 DOS 中的 <CODE>move</CODE> 命令一样，不过它可以移动整个目录结构及所有文件。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">cat</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">使用 <CODE>cat</CODE> 命令来查看文件的内容。它相当于 DOS 中的 <CODE>type</CODE> 命令。它将把文件的内容转储到另一个文件、屏幕或者其他命令。 <CODE>cat</CODE> 是concatenate 的简写，还可以将一系列的文件合并为一个大文件。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">more</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">使用命令 <CODE>more</CODE> 可以以分页的方式查看文件。它基本上与 DOS 中的 <CODE>more</CODE> 命令相同。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">less</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><CODE>less</CODE> 命令也是用来查看文件，但是它支持上下滚屏以及在文档中进行文本搜索。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">vi</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">有一些人可能会说 <CODE>vi</CODE> 表示“virtually impossible”。它是 Unix 中的一个历史悠久的文本编辑器。 <CODE>vi</CODE> 并不真正直观，但是现在几乎所有的类 Unix 环境中都有 <CODE>vi</CODE> 。对于 Linux 中安装的版本有一个内置的教程，一旦您熟悉了 <CODE>vi</CODE> ，只需几次击键就可以完成不可思议的任务。说实话，没有任何编辑器能够取代 vi 来编辑密码和配置文件。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">man</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">使用 <CODE>man</CODE> 命令来查看命令的文档。man 是 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">manual</I> 的缩写。几乎每一个命令都有相应的文档。要深入了解 <CODE>man</CODE> ，请输入以下命令： </P>
<P><CODE>man man </CODE></P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">info</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><CODE>info</CODE> 命令与 <CODE>man</CODE> 命令类似，不过它提供了超链接文本，可以更方便地浏览文档。 </P>
<P><A name=IDAGU00G><SPAN class=atitle2>哪个 shell?</SPAN></A><BR>DOS/Windows 与 Linux 的最重要的区别之一是 Linux 的命令 shell 是与操作系统相分离的一层。不同的 shell 环境影响您具备不同的功能，比如可编辑的命令行和历史命令回查等。shell 还决定了脚本中函数的语法。在 DOS/Windows 中，编写脚本程序只有一种情况，那就是使用效率低下的 .BAT 文件。它的确可以完成很多功能，但除了完成那些基本的任务，复杂些的任务就需要脚本编写者具有极强的创造性。在 Linux 中，脚本中可以有循环，不仅可以执行基本的条件语句，很多在编程语言中才有的功能它都具备。如果您擅长编写 .BAT 文件，那么 shell 脚本更会使您大展才华。</P>
<P>默认的 shell 是每个用户帐号的一个参数。Linux 中典型的默认 shell 是 /bin/bash，不过也可以用其他的 shell。每个 shell 的 <CODE>man</CODE> 文档实际上都非常好，都对各种 shell 及其使用进行了详细的说明。仅仅阅读下面的解释是不够的，应该从下面列出的 shell 中选择一个，去查看它的 man 文档。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">bash</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">bash shell 是 Bourne shell 的一个免费版本，它是最早的 Unix shell，包括许多附加的特点。Bash 有可编辑的命令行，可以回查历史命令，支持 tab 键补齐以使用户避免输入长的文件名。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">csh</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">C shell 使用的是“类C”语法，借鉴了 Bourne shell 的许多特点，只是内部 shell 命令集有所不同。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">ksh</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Korn shell 的语法与 Bourne shell 相同，同时具备了 C shell 的易用特点。许多安装脚本都使用 <CODE>ksh</CODE> ，即使您不把它作为您的主 shell，您也应该在系统中安装它。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">tcsh</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">TC shell 是 C shell 的一个增强版本，与 C shell 完全兼容。 </P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">zsh</B> <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Z shell 是 Korn shell 的一个增强版本，具备 bash shell 的许多特色。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDANV00G><B>Shell 规则</B></A><BR>您只需在控制台中执行相应的命令就可以随时切换 shell。只要在文件顶部放置一个井号 (#!) 指向需要的 shell，脚本就可以指定想要运行的 shell。当脚本运行的时候，不管用户所处的 shell 环境是什么，它都会在正确的 shell 环境中运行。下面例子中的这行代码指出脚本需要在 C shell 下运行：</P>
<P><CODE>#!/bin/csh </CODE></P></TD></TR></TBODY></TABLE></P><A name=IDAZV00G><B>给我做链接，这样就更安全!</B></A><BR>
<P>Linux 文件系统最重要的特点之一是它的文件链接。链接是对文件的引用，这样您可以让文件在文件系统中多处被看到。不过，在 Linux 中，链接可以如同原始文件一样来对待。链接可以与普通的文件一样被执行、编辑和访问。对系统中的其他应用程序而言，链接就是它所对应的原始文件。当您通过链接对文件进行编辑时，您编辑的实际上是原始文件。链接不是副本。有两种类型的链接：硬链接和符号链接。</P>
<P><I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">硬链接</I>只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引（也称为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">inode</I>）。当您移动或删除原始文件时，硬链接不会被破坏，因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限，也不会显示原始文件的位置，这样有助于文件的安全。如果您删除的文件有相应的硬链接，那么这个文件依然会保留，直到所有对它的引用都被删除。 </P>
<P><I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">符号链接</I>是一个指针，指向文件在文件系统中的位置。符号链接可以跨文件系统，甚至可以指向远程文件系统中的文件。符号链接只是指明了原始文件的位置，用户需要对原始文件的位置有访问权限才可以使用链接。如果原始文件被删除，所有指向它的符号链接也就都被破坏了。它们会指向文件系统中并不存在的一个位置。 </P>
<P>两种链接都可以通过命令 <CODE>ln &lt;source&gt; &lt;target&gt;</CODE> 来创建。 <CODE>ln</CODE> 默认创建的是硬链接。使用 <CODE>-s</CODE> 开关可以创建符号链接。 </P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc border=1>
<TBODY>
<TR>
<TD><PRE><CODE>
 # Create a hard link from MyFile in the current
          
 # directory to /YourDir/MyFile
          
ln MyFile /YourDir
       
 # Create a symbolic (soft) link from MyFile in
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
 # the current directory to /YourDir/YourFile
          <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">
ln -s MyFile /YourDir/Yourfile

        </CODE></PRE></TD></TR></TBODY></TABLE></P>
<P>在上面的例子中，MyFile、/YourDir/MyFile 和 /YourDir/Yourfile 会被看成是同一个文件。</P>
<P><A name=IDAJX00G><SPAN class=atitle2>走出您的 shell</SPAN></A><BR>对 Linux 管理来说，必须学习在控制台环境下工作。虽然有一些工具可以让您避免使用控制台，但是您会受到那些工具的很多限制。进入控制台很简单，使用 <CODE>man</CODE> 和 <CODE>info</CODE> 命令访问命令文档也很方便。 </P>
<P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
<UL>
<LI>您可以参阅本文在 developerWorks 全球站点上的 <A href="http://www.ibm.com/developerworks/library/l-roadmap2.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">英文原文</A>. <BR>
<LI>阅读 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Windows 到 Linux 之旅系列文章</A>的其他部分（ <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>， 2003 年 11 月）。 <BR>
<LI>遵循教程“ <A href="http://www-900.ibm.com/developerworks/cn/cnedu.nsf/linux-onlinecourse-bytitle/9F896668D7EB5CA948256A710030E157?OpenDocument" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">vi 入门 -- 巧表单方法</A>” ( <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> )，来开始使用 vi 编辑器。 <BR>
<LI>“ <A href="http://www-128.ibm.com/developerworks/cn/linux/linux-speed-start/l-ss3-basics/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">针对 Linux 开发新手的基本任务</A>” （ <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>， 2001 年 7 月） 深入浅出地介绍了如何在 Linux 下工作，涉及的主题包括打开 shell 窗口、添加用户和组，以及挂载和缷载 CD-ROM。 <BR>
<LI>“ <A href="http://www-128.ibm.com/developerworks/cn/linux/l-faq/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux 用户技术 FAQ</A>”（ <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>， 2001 年 7 月）也可以帮助您顺利地从 Windows 过渡到 Linux。 <BR>
<LI>“ <A href="http://www-128.ibm.com/developerworks/cn/linux/l-cli/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux 客户机有多好?</A>”讲述了作者的工作环境由 Windows 转到 Linux 时的经验。同时还有一篇文章“ <A href="http://www-128.ibm.com/developerworks/cn/linux/glossary/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为 Windows 用户准备的简明 Linux 词汇表</A>”也是有用的参考资料。 <BR>
<LI>在 <A href="http://www.gnu.org/manual/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">GNU Manuals Online</A>网页上您可以找到很多在线帮助网页。 <BR>
<LI><A href="http://www.tldp.org/HOWTO/DOS-Win-to-Linux-HOWTO.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">From DOS/Windows to Linux HOWTO</A>为那些具有 DOS 或 Windows 背景的人提供了一些快速上手的资料。 <BR>
<LI><A href="http://www.allcommands.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">AllCommands.com</A> 是一个与众不同的站点，帮助您从各种操作系统的引用和交叉引用命令。 <BR>
<LI>教程“ <A href="http://www.ibm.com/developerworks/linux/edu/l-dw-linux-lpir21-i.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">LPI certification 101 exam prep, Part 1: Linux fundamentals</A>”介绍了 bash、标准 Linux 命令，等等。<BR>
<LI>通过“ <A href="http://www-128.ibm.com/developerworks/cn/linux/shell/bash/bash-1/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Bash 实例</A>”系列文章更深入地学习 shell 脚本 ( <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> )。 <BR>
<LI>虽然是为 AIX 用户所写的，但是 <A href="http://publib16.boulder.ibm.com/pseries/en_US/aixuser/usrosdev/shells.htm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">System User's Guide: Operating System and Devices - Shells</A> 参考与书籍的章节，包括 <A href="http://publib16.boulder.ibm.com/pseries/en_US/cmds/aixcmds3/man.htm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">AIX Commands Reference - man Command</A>中的许多内容同样适用于 Linux。 <BR>
<LI>要开始在 Linux 上使用 IBM 的软件产品， <A href="http://www-128.ibm.com/developerworks/cn/linux/linux-speed-start/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为您的 Linux 应用开发加油提速</A> 将为您提供最好的参考资料。您可以找到关于 DB2、Lotus Domino、WebSphere Application Server、WebSphere Studio 等多种应用软件的安装提示和参考资料。您还可以登录获得免费的 Linux Software Evaluation Kit，里面有试用软件和培训资料。 <BR>
<LI>通过 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> 上的 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-start/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">从这里开始学习 Linux</A>一文继续学习 Linux 基本概念。 <BR>
<LI>在 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I> Linux 专区可以找到更多 <A href="http://www-128.ibm.com/developerworks/cn/linux/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为 Linux 开发者准备的参考资料</A>。 </LI></UL>
<P></P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>Chris Walden 是位于德克萨斯州奥斯汀的 IBM Developer Relations Technical Consulting（也称为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><A href="http://www.ibm.com/developerworks/linux/library/i-slayers.html">dragonslayers</A> </I>）的一名电子商务架构师，该公司为 IBM 商业伙伴提供教育、实现和咨询。他致力于 Linux 相关工作，一有机会就向身边的人宣传 Linux 的种种好处。除了完成他的架构师的职责之外，他还精通 Linux 基础设施服务器的各个领域，包括混合平台用户环境下的文件、打印以及其他应用服务等。Chris 有 10 年的计算机行业经验，从现场支持到 Web 应用开发和顾问，各个领域他都曾涉足。您可以通过 <A href="mailto:cmwalden-at-us.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">cmwalden-at-us.ibm.com</A> 与 Chris 联系。</TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/uiiang/aggbug/16948.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/uiiang/" target="_blank">小强</a> 2005-10-27 09:22 <a href="http://www.blogjava.net/uiiang/articles/16948.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows 到 Linux 之旅: 第 1 部分. Linux 思想</title><link>http://www.blogjava.net/uiiang/articles/16947.html</link><dc:creator>小强</dc:creator><author>小强</author><pubDate>Thu, 27 Oct 2005 01:18:00 GMT</pubDate><guid>http://www.blogjava.net/uiiang/articles/16947.html</guid><wfw:comment>http://www.blogjava.net/uiiang/comments/16947.html</wfw:comment><comments>http://www.blogjava.net/uiiang/articles/16947.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/uiiang/comments/commentRss/16947.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/uiiang/services/trackbacks/16947.html</trackback:ping><description><![CDATA[<SPAN class=atitle2>不同之处与相似之处</SPAN><BR>
<P><A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/index1.html#author1"><NAME>Chris Walden</NAME></A><BR>电子商务架构师, IBM Developer Relations<BR>2003 年 11 月 </P>
<BLOCKQUOTE><IMG height=38 alt="Column icon" src="http://www-128.ibm.com/developerworks/cn/i/c-roadmap.gif" width=38 align=left border=0>IBM 电子商务架构师 Chris Walden 将通过他在 developerWorks 上发表的九篇系列文章来指导您如何在 Linux 环境中运用您的 Windows 操作技巧。我们首先来认识 Linux 和 Windows 之间的不同之处与相似之处，并学会不要总是通过重新引导系统来解决问题。</BLOCKQUOTE>
<P>您已经开始从 Windows 转向 Linux，这可能是您自己的决定，也可能是“不得已而为之”。无论出于何种原因，您原来非常熟悉的工作方式和工具可能都将变得完全不同。不但如此，您可能还需要培训别人如何去轻松地管理 Linux。管理绝不是循规蹈矩，成功地管理计算环境是一项创造性的工作。实现这一转变就如同一个熟练的油画家转而去从事雕塑一样。</P>
<P>开放的标准使得 Linux 也要遵循 Windows 管理的基本模式，这对用户来说的确是好消息。虽然两者的一些术语并不相同，工具也有一些区别，但是根本的原理是一样的。更好的消息是，当您习惯 Linux 的工作方式后，您将具有更大的工具集来控制和维护您的环境。Linux 的强大之处在于它的稳定性和灵活性。一旦您领悟了 Linux 的思想，您将可以完成更多的任务，使更多的任务自动化，更多地以远程方式完成任务。</P>
<P><A name=IDATDMSD><SPAN class=atitle2>Linux 与 Windows 有一些类似</SPAN></A><BR>在讨论 Linux 与 Windows 有多大不同之前，让我们先来看看这两者有哪些相似之处。</P>
<P><A name=IDA1DMSD><SPAN class=atitle3>用户和组</SPAN></A><BR>Linux 和 Windows 都是多用户操作系统。都可以由许多不同的用户来使用，为每个用户提供单独的环境和资源。基于用户身份来控制安全性。都可以以组成员的方式来控制资源的访问权限，这样在用户数目较大时可以不必为每一个帐号设置权限。 </P>
<P>用户和组可以集中管理，让多个服务器共享相同的用户和身份验证数据。</P>
<P><A name=IDAEEMSD><SPAN class=atitle3>文件系统</SPAN></A><BR>Linux 和 Windows 都支持多种文件系统。文件资源可以通过 NetBIOS、FTP 或者其他协议与其他客户机共享。可以很灵活地对各个独立的文件系统进行组织，由管理员来决定它们在何处可以以何种方式被访问。</P>
<P><A name=IDAMEMSD><SPAN class=atitle3>端口和设备</SPAN></A><BR>两种操作系统都支持各种物理设备端口，比如并口、串口和 USB 接口。支持各种控制器，比如 IDE 和 SCSI 控制器。Linux 还支持很多“刚刚上市”的标准硬件。</P>
<P><A name=IDAUEMSD><SPAN class=atitle3>网络</SPAN></A><BR>Linux 和 Windows 都支持多种网络协议，比如 TCP/IP、NetBIOS 和 IPX。都支持多种类型的网络适配器。都具备通过网络共享资源的能力，比如共享文件和打印。都可以提供网络服务能力，比如 DHCP 和 DNS。</P>
<P><A name=IDA2EMSD><SPAN class=atitle3>服务</SPAN></A><BR>Linux 和 Windows 都提供服务。所谓服务，指的是那些在后台运行的应用程序，可以为系统和远程调用该服务的计算机提供一些功能。在系统引导的时候可以单独控制并自动启动这些程序。(注意：Linux 中沿用了 Unix 的习惯，称这种应用程序为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">daemon</I>，) </P>
<P><A name=IDAHFMSD><SPAN class=atitle2>Linux 与 Windows 的不同</SPAN></A><BR>虽然有一些类似之处 ，但 Windows 和 Linux 的工作方式还是存在一些根本的区别。这些区别只有在您对两者都很熟悉以后才能体会到，但它们却是 Linux 思想的核心。 </P>
<P><A name=IDAPFMSD><SPAN class=atitle3>Linux 的应用目标是网络而不是打印</SPAN></A><BR>Windows 最初出现的时候，这个世界还是一个纸张的世界。Windows 的伟大成就之一在于您的工作成果可以方便地看到并打印出来。这样一个开端影响了 Windows 的后期发展。</P>
<P>同样，Linux 也受到了其起源的影响。Linux 的设计定位于网络操作系统。它的设计灵感来自于 Unix 操作系统，因此它的命令的设计比较简单，或者说是比较简洁。由于纯文本可以非常好地跨网络工作，所以 Linux 配置文件和数据都以文本为基础。</P>
<P>对那些熟悉图形环境的人来说，Linux 服务器初看可能比较原始。但是 Linux 开发更多关注的是它的内在功能而不是表面上的东西。即使是在纯文本的环境中，Linux 同样拥有非常先进的网络、脚本和安全能力。执行一些任务所需的某些表面上看起来比较奇怪的步骤是令人费解的，除非您认识到 Linux 是期望在网络上与其他 Linux 系统协同执行这些任务。Linux 的自动执行能力也很强，只需要设计批处理文件就可以让系统自动完成非常详细的任务。Linux 的这种能力来自于其基于文本的本质。</P>
<P><A name=IDAZFMSD><SPAN class=atitle3>可选的 GUI</SPAN></A><BR>Linux 有图形组件。Linux 支持高端的图形适配器和显示器，完全胜任图形相关的工作。现在，许多数字效果艺术家在 Linux 工作站上来进行他们的设计工作，而以前这些工作需要使用 IRIX 系统来完成。但是，图形环境并没有集成到 Linux 中，而是运行于系统之上的单独一层。这意味着您可以只运行 GUI，或者在需要时才运行 GUI。如果您的系统主要任务是提供 Web 应用，那么您可以停掉图形界面，而将其所用的内存和 CPU 资源用于您的服务。如果您需要在 GUI 环境下做一些工作，可以再打开它，工作完成后再将其关闭。</P>
<P>Linux 有图形化的管理工具，以及日常办公的工具，比如电子邮件、网络浏览器和文档处理工具等。不过，在 Linux 中，图形化的管理工具通常是控制台 (命令行) 工具的扩展。也就是说，用图形化工具能完成的所有工作，用控制台命令同样可以完成。同样，使用图形化工具并不妨碍您对配置文件进行手工修改。其实际意义可能并不是特别显而易见，但是，如果在图形化管理工具中所做的任何工作都可以以命令行的方式完成，这就表示那些工作也可以由一个脚本来实现。脚本化的命令可以成为自动执行的任务。Linux 同时支持这两种方式，并不要求您只用文本或者只用 GUI。您可以根据您的需要选择最好的方法。</P>
<P>Linux 中的配置文件是人类可读的文本文件，这与过去的 Windows 中的 INI 文件类似，但与 Windows 的注册表机制在思路上有本质的区别。每一个应用程序都有其自己的配置文件，而且通常不与其他的配置文件放在一起。不过，大部分的配置文件都存放于一个目录树 (/etc) 下的单个地方，所以看起来它们在逻辑上是在一起。文本文件的配置方式使得不通过特殊的系统工具就可以完成配置文件的备份、检查和编辑工作。</P>
<P><A name=IDADGMSD><SPAN class=atitle3>文件名扩展</SPAN></A><BR>Linux 不使用文件名扩展来识别文件的类型。相反，Linux 根据文件的头内容来识别其类型。为了提高人类可读性您仍可以使用文件名扩展，但这对 Linux 系统来说没有任何作用。不过，有一些应用程序，比如 Web 服务器，可能使用命名约定来识别文件类型，但这只是特定的应用程序的要求而不是 Linux 系统本身的要求。</P>
<P>Linux 通过文件访问权限来判断文件是否为可执行文件。任何一个文件都可以赋予可执行权限，这样程序和脚本的创建者或管理员可以将它们识别为可执行文件。这样做有利于安全。保存到系统上的可执行的文件不能自动执行，这样就可以防止许多脚本病毒。</P>
<P>
<TABLE cellSpacing=0 cellPadding=5 width="30%" align=right border=1>
<TBODY>
<TR>
<TD background=/developerworks/cn/i/bg-gold.gif>
<P><A name=IDANGMSD><B>什么是内核？</B></A><BR>Linux 实际上只是内核；它实现了多任务和多用户功能，管理硬件，分配内存，激活应用程序的运行。</P>
<P>对初学者来说，最重要的是要明白奇数的内核版本（比如 2.3、2.5、2.7）是实验用的、正在开发的内核。 稳定的、正式发行的内核版本号是偶数的（比如 2.4、2.6、2.8）。</P></TD></TR></TBODY></TABLE></P>
<P><A name=IDAWGMSD><SPAN class=atitle3>重新引导是最后的手段</SPAN></A><BR>如果您使用 Windows 已经很长时间了，您可能已经习惯出于各种原因（从软件安装到纠正服务故障）而重新引导系统。在 Linux 思想中您的这一习惯需要改变。Linux 在本质上更遵循“牛顿运动定律”。一旦开始运行，它将保持运行状态，直到受到外来因素的影响，比如硬件的故障。实际上，Linux 系统的设计使得应用程序不会导致内核的崩溃，因此不必经常重新引导（与 Windows 系统的设计相对而言）。所以除了 Linux 内核之外，其他软件的安装、启动、停止和重新配置都不用重新引导系统。</P>
<P>如果您确实重新引导了 Linux 系统，问题很可能得不到解决，而且还会使问题更加恶化。学习并掌握 Linux 服务和运行级别是成功解决问题的关键。学习 Linux 最困难的就是克服重新引导系统的习惯。</P>
<P>另外，您可以远程地完成 Linux 中的很多工作。只要有一些基本的网络服务在运行，您就可以进入到那个系统。而且，如果系统中一个特定的服务出现了问题，您可以在进行故障诊断的同时让其他服务继续运行。当您在一个系统上同时运行多个服务的时候，这种管理方式非常重要。</P>
<P><A name=IDAAHMSD><SPAN class=atitle3>命令区分大小写</SPAN></A><BR>所有的 Linux 命令和选项都区分大小写。例如， <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">-R</B> 与 <B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">-r</B>不同，会去做不同的事情。控制台命令几乎都是小写的。我们将在“ <A href="http://www-128.ibm.com/developerworks/cn/linux/l-roadmap/index2.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">第 2 部分. 控制台速成班</A>”中对命令进行更详细的介绍。 </P>
<P><A name=IDARHMSD><SPAN class=atitle2>我应如何定位 Linux？</SPAN></A><BR>从管理 Windows 到管理 Linux 的转变是很麻烦的。不过，作为一个 Windows 管理员，您有自己的优势。您对计算的工作方式的理解依然可用。能否成为一个成功的 Linux 管理员将取决于您对两者区别的认识以及操作习惯的调整。</P>
<P>Linux 相对于 Windows 的许多变化都是有益的。空闲的 GUI 的开销被归还给服务。任务可以脚本化并可以自动执行。配置文件基于文本并且人类可读。在大多数情况下不必重新引导系统。实际上，您应该抑制重新引导系统的冲动。</P>
<P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
<UL>
<LI>您可以参阅本文在 developerWorks 全球站点上的 <A href="http://www.ibm.com/developerworks/library/l-roadmap1.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">英文原文</A>. <BR>
<LI><A href="http://www.tldp.org/HOWTO/DOS-Win-to-Linux-HOWTO.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">From DOS/Windows to Linux HOWTO</A>为那些具有 DOS 或 Windows 背景的人提供了一些快速上手的资料。 <BR>
<LI>要开始在 Linux 上使用 IBM 的软件产品， <A href="http://www-128.ibm.com/developerworks/cn/linux/linux-speed-start/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为您的 Linux 应用开发加油提速</A>将为您提供最好的参考资料。您可以找到关于 DB2、Lotus Domino、WebSphere Application Server、WebSphere Studio 等多种应用软件的安装提示和参考资料。您还可以登录获得免费的 Linux Software Evaluation Kit，里面有试用软件和培训资料。 <BR>
<LI>到 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>的 <A href="http://www-128.ibm.com/developerworks/cn/linux/l-start/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">从这里开始学习 Linux</A>页面继续学习 Linux 基本概念。 <BR>
<LI>“ <A href="http://www-128.ibm.com/developerworks/cn/linux/l-faq/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux 用户技术 FAQ</A>” ( <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>, 2001 年 7 月) 也可以帮助您顺利地从 Windows 过渡到 Linux。 <BR>
<LI><A href="http://www.tldp.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux Documentation Project</A>是一个 Linux 文档仓库，它所收集的文档包括单独的软件、HOWTO 文档、FAQ，等等。 <BR>
<LI><A href="http://www.linux.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux Online!</A>提供了无偏见的 Linux 新闻和信息。 <BR>
<LI><A href="http://www.oreilly.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">O'Reilly Network</A>是 Linux 技术书籍的极好资源。 <BR>
<LI><A href="http://www-1.ibm.com/linux/index.shtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux at IBM</A>站点提供了软件、链接、端到端的 Linux 解决方案、 用户参考、IBM Alliances/Linux 产品伙伴和 IBM 开源产品。 特别的，请参阅 Linux at IBM 页面上的 <A href="http://www-1.ibm.com/linux/linuxline/dec02/learn.shtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Learning Linux</A>和 <A href="http://www-1.ibm.com/linux/viewaudience_3261.shtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux Education</A>资料。 <BR>
<LI>IBM 提供 <A href="http://www-3.ibm.com/services/learning/us/catalog/linux/cert.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux 专业认证</A>服务以及 UNIX 和 Linux 硬件和各种软件系统 (包括 IBM 产品) 的 <A href="http://www-3.boulder.ibm.com/services/learning/us/certify/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">专业认证</A>。 <BR>
<LI><A href="http://www.ibm.com/partnerworld/software" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">IBM Partnerworld</A>为 IBM 的商务伙伴提供市场和销售支持。 <BR>
<LI><A href="http://www.ibm.com/partnerworld/linux" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">Linux lens</A>是 IBM 商务伙伴快速接触 Linux 的门户。 <BR>
<LI>在 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">developerWorks</I>Linux 专区可以找到更多 <A href="http://www-128.ibm.com/developerworks/cn/linux/index.html" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">为 Linux 开发者准备的参考资料</A>。 </LI></UL>
<P></P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>Chris Walden 是位于德克萨斯州奥斯汀的 IBM Developer Relations Technical Consulting（也称为 <I xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/"><A href="http://www.ibm.com/developerworks/linux/library/i-slayers.html">dragonslayers</A> </I>）的一名电子商务架构师，该公司为 IBM 商业伙伴提供教育、实现和咨询。他致力于 Linux 相关工作，一有机会就向身边的人宣传 Linux 的种种好处。除了完成他的架构师的职责之外，他还精通 Linux 基础设施服务器的各个领域，包括混合平台用户环境下的文件、打印以及其他应用服务等。Chris 有 10 年的计算机行业经验，从现场支持到 Web 应用开发和顾问，各个领域他都曾涉足。您可以通过 <A href="mailto:cmwalden-at-us.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dw="http://www.ibm.com/developerworks/">cmwalden-at-us.ibm.com</A>与 Chris 联系。 </TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/uiiang/aggbug/16947.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/uiiang/" target="_blank">小强</a> 2005-10-27 09:18 <a href="http://www.blogjava.net/uiiang/articles/16947.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>