You are on page 1of 124

封面

卷首语

浅谈开放标准
10 年前,全球电脑如何实现通话是困扰人们的一个主要问题,随着 IP 标准的出现,这个问题得到
了很好的解决,并主导了商业计算硬环境,推动互联网等技术抹平世界,对全球商业模式变革产生巨大
影响。今天,在我们的软件领域也有着同样的困惑,如何进一步推动企业间软件互联互通,从而让商业
价值链真正实时灵动起来已经成为一块阻碍软件领域向前发展的绊脚石。

究其原因,主要是由于软件领域标准的缺失。在商业市场,有着这么一种说法,“四流企业做产品、
三流企业卖技术、二流企业做品牌、一流企业定标准”。标准之争其实就是市场之争,谁掌握了标准,
就意味着先行拿到了进入市场的入场券,进而从中获得巨大的经济利益,甚至成为行业的定义者。如美
国高通公司,它不生产手机,但拥有 CDMA 核心技术标准,现在中国的手机厂商每生产一部 CDMA 手机,
都得向高通交纳一笔费用。

过去,在软件行业的起步阶段,私有标准很好地促进了行业的发展和成熟,使得各厂商有一个可参
考的“事实标准”,避免了厂商各自为战所带来的分化。然而,随着行业的成熟,众多的企业发展壮大
起来,围绕着标准的争夺变得不可避免,尤其是标准的“私有化”和“开放性”两方面(即私有标准和
开放标准)。

标准“私有化”的最大问题在于垄断,掌握着标准的企业获得高额垄断利润妨碍其他竞争者的发展。
标准的“私有化”和开放标准的出现都源于商业利益的博弈。事实上,任何企业或个人都希望能够拥有
标准的“产权”,因为标准的控制者可以获得极大的市场竞争优势甚至垄断地位,并主导相关技术的发
展方向。而除标准产权拥有人外的标准实现者则希望标准中没有知识产权或有少量的低付费的知识产权
在市场上能获得平等竞争的机会。用户则希望基于标准的产品和服务能在市场上充分竞争,享受价廉质
优的产品和服务。

而开放标准则在制定过程中遵循公开、透明、协商一致的原则,其执行和维持由非赢利机构负责,
标准的发展遵照一种对所有利益相关部门都有效的开放的决策过程基准下进行,标准一经公布,其详细
说明书允许所有人免费或象征性收费进行拷贝、发行和使用。

开放标准是公众可以得到和实现的标准,通过允许所有人都可以得到并实现这些标准,开放标准鼓
励不同的软硬件模块之间的兼容性,因为每个人都可以基于技术手册及相关资源建立自己的产品和其他
基于该标准的兼容工作。很类似于制造业的标准件,只要遵循同一个标准,不同厂家的配件可以选择使
用,为用户提供了选择,从而降低企业的成本。

中国软件产业一直处于世界软件产业的后来者角色,在既有平台主导的软件价值链中客观上处于劣
势地位。近年来,在长风联盟的推动下,开放标准在我国也取得了长足的发展,厂商也由过去对开放标
准的不闻不问转变到了现在的主动参与,这是对开放标准认识的提高,也是为企业更好地发展铺平道路


oss.linuxpk.com 源 2009 年第 2 期 2
卷首语
而对于 SOA 技术,由于正处于发展的初期,并且十分强调开放,强调标准,这给中国软件产业的发展带
来新的机会。

SOA 的核心价值在于将商业逻辑直接以服务的方式映射到一个服务编排中,从而真正实现商业人员
对 IT 系统的直接掌控、修改及再造,一举改变过去很长的 IT 系统建设的内部流程。基于 SOA 将企业的
内部资源以服务方式展示出来,以企业的价值观加以分析,形成全价值链优化的服务编排和应用,即企
业资源全程优化(End to End Resource Planning—EERP)是企业可以获利于 SOA 技术革命的一
个应用范例。从目前 SOA 标准的制定情况看,各标准组织还没有涉及企业资源全程优化的相关标准,长
风联盟组织众多国内企业,在 SOA 研究和发展过程通过实际应用中反复论证,发布了关于全程优化的白
皮书。

而最近成立的制定云计算标准联盟 Open Cloud Consortium (OCC)正式成立,正是这些开放联


盟的存在,在制定、规范各项标准,使得整个软件产业能连接在一起,无论是在 SOA 领域还是在近年兴
起的云计算领域。


oss.linuxpk.com 源 2009 年第 2 期 3
主办:Linux 宝库
网址:www.linuxpk.com
官方下载地址:oss.linuxpk.com

主席:陆首群
专家委员会(按姓氏拼音为序)
宫敏 毛德操 倪光南 许洪波 袁萌
顾问委员会(按姓氏拼音为序)
白剑波 曹冬 陈绪 贾栋 李科研 毛文波

主编:陈杰
副主编:陈伟
排版:邹洋
封面设计:张亚运
编辑部:高延斌 姚欣宇 顾宏军

声明 :杂志部分内容来自开源社区及互联网,目的是加强开源文
化交流和开源应用传播,如存在版权问题,敬请联系,我们将在第一
时间进行处理。
致谢:本电子杂志由 OpenOffice 制作,并直接导出 PDF
文档,在此表示感谢 。
opensource@linuxpk.com
目录

内容目录
卷首语
浅谈开放标准.............................................................................................................................2
业界动态
"2008 中国开源软件发展峰会"英特尔获殊荣.........................................................................7
微软称 Google Apps 对 Office 不构成威胁..............................................................................7
Nokia 宣布 Qt 软件以 LGPL 发布.............................................................................................8
IBM 被鼓励开源 Notes/Domino................................................................................................8
云计算标准组织正式联盟 OCC 成立.......................................................................................9
Oralce 力挺 Xen 加入 Xen 顾问委员会...................................................................................10
谷歌或推 Android 桌面系统挑战 Windows 7.........................................................................11
分析称戴尔和 Red Hat 绝配 彼此需要对方..........................................................................12
Google 携红帽 JBoss 促进网络应用发展...............................................................................13
09 年将被淘汰的 12 家科技公司............................................................................................14
Mark Shuttleworth:Windows 7“了不起”............................................................................15
2009 年开源技术六大发展趋势..............................................................................................15
2009,中国开源能不能进入加速期.......................................................................................18
经济危机下开源软件或将增长两成.......................................................................................20
开源通讯
Novell 助力汇丰银行提升系统互操作性...............................................................................23
红旗嵌入式系统应用在风电控制领域...................................................................................23
高校开源软件大赛落幕 红旗倾力开源人才培养.................................................................23
中标软件首推 58 元桌面办公套件(Linux + Office).........................................................24
中标软件联手长城打造 Linux 上网本,累计销量突破 300 万............................................24
香港开放源码考察团造访京城...............................................................................................24
首届“龙芯体验日”成功在京举行.......................................................................................24
百资科技应邀出席 Moblin 中心开幕典礼.............................................................................24
Alan Cox 脱去红帽,转投 Intel..............................................................................................25
2008 中国开源大盘点..............................................................................................................25
开源社区
中科红旗发布 Linux7.0 rc1 桌面版操作系统........................................................................30
Google Android 手机 Agora 最新谍照....................................................................................31
Google 欲推出 Mac、Linux 版 Chrome..................................................................................31
KDE 4.2 版正式发布................................................................................................................32
火狐中国版 Firefox 3.0.5 China Edition 2009.1 发布............................................................33
QQ for Linux 1.0 Beta1 发布....................................................................................................34
奥巴马的就职与开源软件.......................................................................................................35


oss.linuxpk.com 2009 年第 2 期 5

目录
英特尔中国开源技术中心系列专访之三...............................................................................37
评论:gOS3 到 CloudOS——英雄的堕落................................................................................40
知识学堂
Apache 的创始人 Brian Behlendorf.........................................................................................42
Brian Behlendorf 与他的开源人生..........................................................................................46
走进 Linux 世界:文件管理....................................................................................................49
经验技巧
Linux 一句话精彩问答............................................................................................................65
善用 GNU Make 做开发..........................................................................................................70
Autotools 快速开发..................................................................................................................75
高效使用 Linux 系统的几个习惯............................................................................................77
Linux 管理员新手易犯的十种错误........................................................................................82
简略讲解对 Linux 服务器的四种入侵级别..........................................................................84
Linux 下的飞鸽传书:信使 iptux 软件简介...........................................................................87
Linux 下时间的查看................................................................................................................88
在 Ubuntu 环境下安装 Gvim 及添加菜单项目......................................................................89
在 shell 里输入中文..................................................................................................................90
企业应用
Linux 流量控制提高网络效率................................................................................................92
用 Linux 构建最好的 FTP 服务器.........................................................................................102
嵌入式
了解硬件体系 开发嵌入式 Linux........................................................................................113
基于 uClinux 的 Web Server 的实现......................................................................................118
编读往来
Linuxpk.com 2009 年 1 月十大热门帖..................................................................................123


oss.linuxpk.com 2009 年第 2 期 6

业界动态

"2008 中国开源软件发展峰会"英特尔获殊荣

2009 年 1 月 13 日,"2008 中国开源软件发 英特尔亚太研发有限公司总经理兼中国产品开发


总经理梁兆柱博士
展峰会"在北京西苑饭店四层鸿运厅胜利召开。
英特尔公司在大会上屡获殊荣:英特尔(中
本次大会由"科技部高技术研究发展中心"和"科
国)有限公司荣获"2008 中国开源技术推广最佳
技部火炬高技术产业开发中心"主办,由"中国软
企业奖",英特尔亚太研发有限公司开源技术中
件行业协会共创软件分会(共创软件联盟)"承
心上海研发总监冯晓焰荣获"2008 中国开源推广
办。本次峰会主题为:"立足开源、面向服务、
杰出个人贡献奖",上海开源技术中心的内核小
打造软件产业链"。
组荣获"2008 中国优秀开源项目奖"(经理傅文
科学技术部副部长杜占元对大会表示祝贺,
庆)。
并做了"坚持科学发展观、促进科技创新"的演讲,
会上,英特尔亚太研发有限公司总经理兼中
工业和信息化部软件服务业司司长赵晓凡做
国产品开发总经理梁兆柱博士发表了题为"移动
了"加强两化融合、促进产业健康发展"的讲话。
计算改变未来生活"的精彩演讲,为与会者开启
来自产业界的代表,如英特尔、Sun、微软
了移动计算的大门,同时深入阐释了英特尔多年
等,围绕开源主题做了精彩演讲。来自"核高
以来在开源和移动计算方面的战略和长足进步,
基"项目专家组的魏少军、韩乃平等专家也结
以及在未来的宏伟规划,获得与会人员的热烈反
合"核高基"的评审标准和进展,做了深入讲解。
响。

微软称 Google Apps 对 Office 不构成威胁


微软 Office 团队高管亚历克斯·佩恩(AlexPayne)日前表示,GoogleApps 并不会对 Office 构


oss.linuxpk.com 2009 年第 2 期 7

业界动态
成威胁。

Google Apps 推出以来,赢得了不少用户。近日,谷歌又开始招募 GoogleApps 销售人员,对此,


佩恩认为,GoogleApps 并不会对微软 Office 构成威胁。

佩恩称,微软拥有大量的零售商支持,这是谷歌所无法匹敌的。 GoogleApps 确实赢得一些用户,


但付费用户却寥寥无几,如果云计算是 GoogleApps 卖点的话,那即将上市的 Office 14 也支持云计
算服务。

而佩恩认为,客户端软件的作用仍不可替代,软件即服务(SaaS)仅仅是企业提供的一个产品,并不
具有战略地位。而且,出于政治或法规因素,很多大一部分永远都不会使用云计算。

Nokia 宣布 Qt 软件以 LGPL 发布


近日 , Nokia 增 加了 Qt 的 LGPL LGPL 许可。 Qt 原来的许可协议是商业许可和
授权,有助于在 Nokia 的平台上 GPL 许可,因为 GPL 的许可要求 Qt 使用者开放
聚集更多的开发者。以此来展开和 出他们的源代码,而新的 LGPL 授权则更加自由,
Google 、 iphone 在 手 机 服 务 上 允许开发者在不修改 Qt 源代码的使用中,可以
的竞争。 不公开自己的代码。这大大的有利于增加 Qt 的

Nokia 宣 布 在 Qt-4.5 软 件 的 发 布 中 增 加 开发者,在和 google 和 iphone 的竞争中更具


主动性。

IBM 被鼓励开源 Notes/Domino

近 日 , 荷 兰 的 IT 顾 问 Ian Tree 发 起 了 一 项 运 动 , 试 图 说 服 蓝 色 巨 人 开 源 它 的 协 作 软 件


oss.linuxpk.com 2009 年第 2 期 8

业界动态
Notes/Domino(Notes 是电子邮件、日历和信息管理客户端,Domino 是集成的消息、协作和 Web 应
用服务器),使其转变成一个社区主导的程序开发模式。

Tree 希望能获得类似鼓动 Sun 开源 Solaris 的结果。Tree 称,最近几年企业采用 Domino 产品


的比率在下降,下降趋势也许将是不可逆转的,除非它的市场定位发生根本性的改变。

他称 IBM 开源 Notes/Domino 后,将使竞争对手(如微软的 Outlook/Exchange,Novell 的


GroupWise 等)处于“防守位置”。他相信将有更多的政府和教育部门使用 Domino,它对未来的市场
采纳也具有举足轻重的影响。

云计算标准组织正式联盟 OCC 成立
Robert Grossman 表示:“现在有太多关于
云计算的讨论,有时候很难去讨论技术细节。

举例来说,如果你正在通过一家云服务提供
商运行应用,例如 Aamzon 的 EC2 服务,现在你
希望转而选择另一家厂商。“我们的目标是,在
最近一家制定云计算标准的正式联盟 Open 你改换云服务提供商的时候不需要重新编写应用。

Cloud Consortium (OCC)宣布成立,因此, ”Grossman 这样说道。

以后每个云将不再被作为一个独立的云,而是彼 OCC 希望面向基于云的技术提供对开源软件


此之间可以进行互操作。 配置的支持,开发不同类型支持云计算的软件之
OCC 的成员包括许多大学,他们致力于提升 间可以进行互操作的标准和界面。

在地理位置上彼此独立的数据中心存储和计算云 OCC 组织的成本包括伊利诺大学、美国西北


的性能,加强开放架构让计算云通过实体的网络 大学、约翰霍普金斯大学、芝加哥大学和加州传
实现无缝互操作。 讯及信息科技研究院。思科是第一家公开加入该
云计算恐怕是目前 IT 业内最热门的词汇之 组织的 IT 厂商,预计未来还将有更多的厂商参

一了,厂商的大肆宣传有时可 加进来。
能会掩盖住云计算存在的一些 OCC 主 要 的 基 础 架 构 是 Open Cloud
技术问题,OCC 也提到了这些 Testbed,这是一个有两台位于芝加哥的机架设
问题。 备组成的测试平台,其中之一在美国巴尔的摩的
OCC 主席、同时也是伊利诺 约翰霍普金斯大学,另一个在加州传讯及信息科
大学高级计算实验室主任 技研究院,而且两台均与 10Gb 以太网相连接。


oss.linuxpk.com 2009 年第 2 期 9

业界动态
Grossman 和同事最近使用这个测试平台测 (VMware 现在正在开发一款能够处理整个数据
量了在广域网中运行计算的性能损耗。 中心的操作系统)。
Grossman 表 示 , 通 过 使 用 Sector and
创建该组织的主要目的是让大学机构和 IT
Sphere ( 一 款 由 National Center for
厂商以一种非竞争的方式来共享技术信息,让云
Data Mining 开发,用于存储和计算云的开源
计算更快、更安全以及基于开源标准和开源软件
软件),他们能够将数据传输速度提升至 向前发展。
Hadoop 的两倍。
Grossman 表示:“我并不是一位推销员,
速度提升的原因之一就是采用 UDT 协议,这 的确,解决互操作性问题很重要,而且目前这一
一协议主要是针对极高速网络和大型数据集设计 问题并不明朗化。”
的。
Grossman 希望更多的主流 IT 厂商能够加
OCC 从 2008 年年中就开始逐渐成型,还只 入到这个组织中来。他说:“目前我们先要集合
是 处 于 起 步 阶 段 。 Grossman 表 示 , 该 组 织 和 起来众多厂商,以便分享交换信息。”
VMware 等 厂 商 一 样 关 注 着 相 同 的 技 术 问 题

Oralce 力挺 Xen 加入 Xen 顾问委员会

2007 年 11 月的 Oracle Open World 上面,Oracle 公司决定进入服务器虚拟化市场,并且宣布


推出了其自已的虚拟化平台:Oracle VM,凭借着与其 Oralce Linux、数据库、应用等的整合,也获


oss.linuxpk.com 2009 年第 2 期 10

业界动态
得了市场的认可,至少是 Oralce 数据库用户的认可。

GE 医疗公司的马国超就曾经如此表示过,说 Oralce 数据库的虚拟化还是在 OVM 上面使用更为放心,


至少是一个集成平台嘛,性能优化做得也很好。

该产品是基于开源 Hypervisor Xen 的产品,Oracle 公司为其开发了自己的虚拟机管理器,称之


为 Oracle VM Manager。

到目前为止,大多数用户考虑服务器虚拟化的时候,还是采用的 VMware 公司的产品。不过由于


Oralce 在 Oracle VM 方面的努力,也已经开始收到了一定的效果。

现在,Oracle 试图在服务器虚拟化市场介入到更深层次的领域,以便向市场显示其在虚拟化市场的
决心:2008 年 12 月中旬,Oracle 公司加入了 Xen 顾问委员会。

该举措意味着双重效果,第一是表明了 Oralce 的态度,将会大力支持 Xen 产品,在另外一个角度


也表示 Oracle 将不会对 KVM(基于 Linux 内核的虚拟化,其母公司已被红帽收购)有多大的兴趣。

此前,有很多人推测 Oracle 也许会转向 KVM 平台,因为其 Unbreakable Linux 来源于红帽的


企业级 Linux,而红帽已经宣布将其服务器虚拟化重心由 Xen 转向 KVM。

加入 Xen 顾问委员会的 Oracle 专家是 Wim Coekaerts,正是在 Oracle Unbreakable Linux


项目负责人。

谷歌或推 Android 桌面系统挑战 Windows 7


尔 · 哈 特 曼 (Daniel Hartmann) 成 功 将
Android 安装在华硕易 PC 中。

在 刚 刚 结 束 的 2009 年 “ 消 费 电 子 展
” (CES) 上 , 加 州 触 摸 屏 设 备 公 司 Touch
Revolution 又展示了一款桌上型电话,同样采
据国外媒体报道,在操作系统市场,微软的
用谷歌 Android 系统。这不禁让人想起调研研
劲敌可能不是苹果,也不是 Linux,而是谷歌的
机构 Net Applications 上个月公布的一份数
Android。
据,称近 1/3 的谷歌员工屏蔽了所使用的操作系
最近 2 个月,不断有消息称,谷歌 Android
统信息。
操作系统被成功安装到上网本等设备中。本月初
Net Applications 认为,这意味着谷歌
Mobile-facts.com 网站联合创始人马特豪斯·
可 能 正 在 开 发 自 己 的 操 作 系 统 。 Net
柯 里 科 斯 基 (Matthaus Krzykowski) 和 丹 尼
Applications 营 销 副 总 裁 文 斯 · 维 扎 卡 罗


oss.linuxpk.com 2009 年第 2 期 11

业界动态
(Vince Vizzacarro)称:“如果谷歌不是在 顾名思义,“上网本”主要被用于访问互联
开发操作系统,那么我会感到很吃惊。很明显, 网和云计算服务,而谷歌又拥有众多相关服务,
谷歌希望摆脱微软束缚。” 如 Google Docs 和 GMail 等。因此,无论从技
术角度,还是商业角度而言,谷歌开发桌面操作
如果谷歌确实在开发基于 Android 的桌面
系统都合情合理。
操作系统,那么上网本应该是谷歌的目标市场,
因为上网本需要的正是 Android 这样的“轻量 因此,将来不要为谷歌推出一款桌面操作系
级”系统。此外,上网本市场发展迅速,能够迅 统而吃惊。在时间上,与微软 Windows 7 同期
速提升操作系统的市场份额。 发行也不是不可能的。如果这样,那将是令微软
最头痛的事情。

分析称戴尔和 Red Hat 绝配 彼此需要对方


据国外媒体报道,困扰戴尔的最大问题是:其过去的独门武器——低成本的硬件生产和销售,已经
被其它 PC 厂商掌握。日前有媒体报道称,戴尔的营收由 1996 年的 53 亿美元增长至 2006 年的 560 亿
美元,其增长主要来自自身。戴尔高管承认,公司需要一次巨额收购,或多次收购,进军高利润率的软
件和服务领域。戴尔首席财务官布莱恩·格莱顿(Brian T. Gladden)称,“我认为,公司面临的问题
是实现业务多元化,通过收购扩大服务器、存储系统、软件、服务业务。”

戴尔需要在硬件领域之外寻求增长机遇。对于戴尔而言,出于两个原因,没有比收购 Red Hat、


Sun 或 Novell 更好的选择了。其一,收购 Red Hat 是戴尔进军软件领域最轻松的途径。戴尔在软件领
域将面临与硬件领域相似的机遇:依赖低成本生产和销售的商品化软件业务。戴尔和 Red Hat 在许多方
面都是“绝配”。

其二,收购 Red Hat 将使戴尔具有其它软件公司无可比拟的优势:整合开放源代码产业链,向企业


首席信息官员提供巨大的价值。之前曾有分析师建议 Red Hat 整合开放源代码产业链,成为软件业界的
“ASCAP”(美国著作权人协会)。戴尔拥有比 Red Hat 更多的资源,可以做到这一点。

当然,戴尔在收购方面的经验稍显不足,在整合 Red Hat 或其它软件厂商时会遇到麻烦。Red Hat


擅长整合和发布开放源代码软件,而戴尔则擅长整合和发布廉价硬件产品;戴尔需要软件才能实现持续
增长,Red Hat 则可以借助戴尔的财力扩大业务。合并后的戴尔-Red Hat 或将提供开放源代码的客户
关系管理、企业资源规划等软件产品。


oss.linuxpk.com 2009 年第 2 期 12

业界动态

Google 携红帽 JBoss 促进网络应用发展


近日,红帽公司宣布签署了 Google 贡献者协议。此协议能令红帽公司以国际水平的开发和生产来
支援 Google 的网上工具箱(GWT)。

创办于 2006 年的 GWT 是一个帮助 Java 开发者在跨平台和友好的网络环境下利用 AJAX 的开源项目。


Google 网上工具箱的使命是为开发者使用现有的 Java 工具和运用任何流行的浏览器来建立不需协议的
AJAX 以提升网络的使用。GWT 以一个大众化的 Java 软件开发平台现出,为开发者创造尖端的,高效能
的网络应用,并提供了传统的 UI 技术不能为 JavaEE 提供的丰富体验。

除签署贡献者协议之外,红帽公司宣布公司已经完成了一些 GWT 和 JBoss 接口架构初步的整合。通


过整合,红帽公司能够利用 JBoss Seam 的开放和可插入架构使开发者能轻易地将企业级 Java 的力量
和现今的多重层面技术结合,如 GWT、RichFaces 和 Spring,来开发丰富的网络应用。

红帽公司 JBoss 中间件业务部副总裁 Craig Muzilla

红帽公司 JBoss 中间件业务部副总裁 Craig Muzilla 说:“JBoss Seam 2.0 是一个灵活的开


放架构,它使 Google 网上工具箱的整合和与 Google 合作成为可能。通过与 Google 成为合作伙伴,
JBoss 表明了我们对开发者的一贯承诺。我们相信开发者在使用 JBoss 来提供最佳可操作性和最灵活平
台时,应该能选择 GWT、Spring 框架和 Adobe Flex 等技术来跑这些应用。”

此项公告延续了红帽公司与 Google 作为合作伙伴的一系列倡议。最近, Google 从 Fedora 项目


和 JBoss 社区中选择了一个督导小组,作为一个监督 Google Summer of Code 2008 项目的组织。


oss.linuxpk.com 2009 年第 2 期 13

业界动态
Google Summer of Code 2008 提供了津贴给学生开发者为开源项目编写代码。在 2007 年,红帽公
司推介了 JBoss Portal 与 Google Gadgets 的整合方案,令开发者容易地在一个网络门户上增加预
建的 Google Gadget 组件。此外,Google 推出了开源的 Hibernate Shards,一个由 Google 软
件工程师开发的架构, 它增加了 JBoss Hibernate 架构支援。

Google 工程部经理和 Google 网上工具箱 (GWT)创造者 Bruce Johnson 说:“我们非常愉快地


通过与红帽公司合作,确保了开发者能够容易地使用 Google 网上工具箱 (GWT)和 JBoss Seam 框架,
我们希望开发者能够轻松地使用 Google 开发者产品和他们喜爱的 Java 程序设计工具,这是我们这个目
标迈进的又一步。”

在未来几个月,红帽将把为 Google 网上工具箱 (GWT)提供支援作为 JBoss 企业应用平台订阅的一


部份。

09 年将被淘汰的 12 家科技公司
据国外媒体报道,知名 IT 网站《Channel Insider》日前评出了 2009 年可能被淘汰或被并购的
12 家 IT 公司,其中包括 Novell、McAfee、CA 和 Sun 等知名科技企业。

Channel Insider 指出, Novell 被并购或出售的可能性最大,尽管与微软合作,但仍不敌红帽


等 Linux 厂商。至于 McAfee,早已传出被并购传闻,而 McAfee 似乎并不反对这样的结果。

同样,Salesforce.com 也一直是被视为并购目标,潜在并购者包括为谷歌、甲骨文和微软等。
Sun 自从互联网泡沫破灭以来就从未真正复苏过。去年,公司大幅亏损,被迫重组并裁员 6000 人。有分
析师认为,此次重组是出售公司的前兆。以下为 2009 年可能被淘汰或并购的 12 家 IT 公司:

一、 Novell

二、 NetApp

三、 Check Point

四、 McAfee

五、 Salesforce.com

六、 AMD

七、 CA

八、 Juniper Networks


oss.linuxpk.com 2009 年第 2 期 14

业界动态
九、 Sun

十、 Citrix Systems

十一、 Symantec

十二、 VmWare

Mark Shuttleworth:Windows 7“了不起”


Ubuntu 创始人 Mark Shuttleworth 近日在谈到 Windows 7
操作系统时称,“Windows 7 是一个了不起的操作系统”。

“了不起?”Mark Shuttleworth 当然没有在说反话,他表示


“我不会诋毁它”。事实上,Shuttleworth 认为 Windows 7 将终
结当前 Netbook 市场的 Windows-Linux 大战,并拉动 Netbook 市
场在功能和特性上展开竞争。

Shuttleworth 表示,实际上“我们正处于一个非常尴尬的境地
”,因为微软把“XP 扔给了 Netbook 市场”,“你甚至可以说 Linux 比 Windows XP 还贵,因为微
软给 OEM 厂商授权的时候根本不计成本”。而我们已经知道,Windows Vista 根本装不上 Netbook,
其笨重的体积是一个因素,另外价格也是让 OEM 厂商望而却步的理由之一。

“我已经试用了 Windows 7 几个小时,感觉很好”,Shuttleworth 说,“他们把注意力放在用


户体验和外观上,我认为这是一个了不起的产品”。

面对 Windows 挑战,Shuttleworth 表示 Linux 也将提高它的水平,Ubuntu 9.04(内部代号


Jaunty Jackalope)将在今年 5 月放出,至于 Ubuntu 9.10 将在界面与设计上做出改变,发布日期
定于 2009 年 10 月。

2009 年开源技术六大发展趋势
2008 年对于许多开源公司来说是一个多事之秋,但同时也是一个取得重大突破性进展的一年。
2009 年将更是如此,尤其是在企业采购模式,软件的商业模式转变,企业的软件栈的演变方面。目前的
经济环境必将促使企业更谨慎地选择 IT 解决方案,开源技术由于其自身开放性和免费等优势必将成为今
年的大赢家。


oss.linuxpk.com 2009 年第 2 期 15

业界动态
以下就是我们对于 2009 年开源市场的预测,我相信在新的一年里软件市场将会重新塑造。

一、由于全球经济的进一步恶化,开源软件的普及率将会增加
2008 年席卷全球的经济危机肯定会蔓延到 2009 年,这是无庸置疑的,经济危机也迫使企业对 IT
策略做出结构性调整以降低成本,因而软件市场也会随之出现重大变化。与私有软件相比,开源软件由
于无需前期许可费用,因而显著降低了新的 IT 项目的总费用。功能越来越强大的开源软件也给软件行业
带来了竞争,这使用户在同主导市场的私有软件厂商进行谈判的时候处于一个更加有利和主动的地位。
开源公司近几年收入增长幅度都要比私有软件厂商的要高。开源数据库提供商 Ingres 最近宣布,该公
司 2008 年收入比 2007 年增长超过百分之二十五以上,而传统软件业年收入增长率只有百分之七到八。
增长率适当的供应商将采取行动打击,尽管传统软件公司比如甲骨文为了应对经济危机而实际上采区了
提高产品价格的举措,但是私有软件厂商的收入增长仍然会受到重创。甲骨文在收购 BEA 后,将该公司
的 WebLogic 应用服务器售价提高了百分之四十五,这直接导致了很多客户迁移到 JBoss 的开源企业应
用服务器。

二、从完整的基础设施的软件堆栈到应用解决方案,开源技术全
面开花
随着越来越多的公司寻找能够少花钱多办事的创新解决方案,他们将会像 10 年前 Linux 的使用先
驱者那样开始尝试使用 Linux 操作系统,并且最近几年会在整个基础设施堆栈中一直使用开源技术。开
源技术将要普及的重大基础设施领域包括应用服务器、信息和数据库,尤其是基于 Java 应用程序的堆栈,
因为它们易于迁移到开源解决方案上。在应用层,我们将会看到开源商业智能(BI)、企业内容管理(
ECM )和企业资源管理(ERP)解决方案的普及率大大增加。

三、SaaS 和云计算解决方案高歌猛进对于开源技术的发展将起到
拉动作用
软件即服务(SaaS)和开源技术都有同样诱人的经济模式:零前期成本和运营成本,因而能够显著
降低 IT 项目的整体成本,这在经济危机的环境在对于预算紧缺的企业用户来说无疑有着巨大的吸引力。
企业用户将会继续向这种基于订阅的服务模式迁移,从而能更好地处理自己的 IT 成本。采用这种现收现
付制 (Pay-As-You-Go)的服务,企业管理人员能更好地调整 IT 技术预算以适应当前的经济条件或者
是企业不断变化的收入流。2009 年,SaaS 和开源技术的使用都会有一个显著的增长。而 SaaS 的普及
对于开源技术的普及也将起到拉动作用,后者对于 SaaS 供应商同样是一个非常经济的模式。随着越来越
多的企业在内部 IT 系统中集成 SaaS 和开源技术,我们将会看到更多的企业用户地址过去传统的专利授
权软件模式。SaaS、云计算和开源产品的不断融合也将使企业用户即使在经济衰退的条件下实施 IT 项
目,所需的成本也会大大减少。


oss.linuxpk.com 2009 年第 2 期 16

业界动态
四、开源领域的兼并和收购活动将继续下去
由于越来越多的开源厂商被私有软件厂商收购,再加上开源厂商之间的合并,并购活动将继续改变
开源领域的“景观”。反过来,这些活动也将推动投资周期不断循环,就在 2008 年底,商业智能软件企
业 JasperSoft 和存储引擎厂商 Infobright 在经济气候如此寒冷的条件下依然在资本市场上筹到了
1000 万美元。我们很可能会看到的第一个开源应用和开源商业智能(BI)公司被收购。红帽和 Sun 都
有可能参与收购活动,以进一步扩充各自的开源栈。Novell 可能会利用它从 Microsoft 许可协议中得
到的钱扩大其开源业务。与此同时,业内分析师认为此次开源领域并购活动的幅度将超过行业的平均水
平,但不会达到 2005 年那种高峰期的程度。

五、来自开源领域的竞争将推动专有软件厂商向改变商业模式迈
出第一步
受“经济休克”的影响,企业用户传统的采购习惯不得不随之改变,再加上成熟并且可靠的商业级
开源软件堆栈的出现,2009 年专有软件厂商必将由于受到来自开源领域的强大竞争压力而开始改变自己
的商业模式。过去,由于对大供应商的依赖,企业用户在谈判时处于非常不利的地位,因而不得不接受
软件成本只升不降的“棘轮模式”,而现在由于经济危机的影响,更主要的是开源软件的不但成熟,这
使得业务规模大大缩小的企业将不再接受这种不公平的模式。为了应对这种情况,专有软件厂商将开始
根据客户的喜好调整其业务模式,一开始,他们会推出自己的 SaaS 产品,但同时也会死守其摇钱树---
专有许可和支持收入。为了应对经济危机,企业用户将会更多地选择开源产品,同时在同私有软件厂商
的谈判中表明愿意将开源软件用于重要应用,有助于提高他们在谈判中的地位。

六、开源供应商之间将建立强大的市场合作伙伴关系
开源供应商将继续联手开发完整的开源堆栈,并提供认证和预配置的解决方案,这大大减少员工费
用。这种伙伴关系为开源供应商提供了一个与大型私有软件厂商竞争的有效手段,比如微软、IBM、甲骨
文。整体开源解决方案要比组合各个私有软件供应商的产品在部署、维护上更加容易。从硬件到软件基
础设施再到应用层的整个技术堆栈,企业用户能将认识和体验到整体开源解决方案成本效益。比如,红
帽-JBoss- Ingres 堆栈将会马上与 Java 应用开发人员见面,与此同时,Sun 的堆栈也将提供给 Sun
和 MySQL 客户。JasperSoft 将会与开源数据库供应商合作开发一个完整的数据集市解决方案,使商业
智能应用的总体拥有成本大大降低,这样即使在 IT 预算紧缺的条件下用户也能负担得起。依靠这种强大
的合作伙伴关系开发的开源堆栈有助于提供竞争和激励创新,并为软件市场不断带来新的重要机遇。


oss.linuxpk.com 2009 年第 2 期 17

业界动态

2009,中国开源能不能进入加速期
Cnet 邹震
进入 2009 年,我们不得不说,无论从哪一个角度来看,开源都已不再是一名弱者了。然而,国内开
源界与国际开源之间的巨大反差,还是让我们不得不开始思考一个问题:2009 年中国开源能不能进入加
速期。

国际开源界火爆异常

稍加留意,就会发现 2009 年虽然仅仅过去了几天,但这几天发生的事情,已经足以使得开源在一些


热门的 IT 领域中获取优势地位。

首先是 EMC 公司收购了开源支持公司 SourceLabs 部分业务,收购资产将被并入 EMC 旗下的


Cloud Infrastructure Business 业务部门。这使得开源技术在云存储产品中占得了一席之地。接
下来,AMD 发布了基于 Linux 代码需求的新一代开源 3D 加速驱动程序,可支持 R600 和 R700 等 ATI 图
形芯片系列。这使得开源技术在 GPU 领域一片光明。

事实上,2009 年还有一件事情值得我们关注。这就是红帽注资 BI 厂商 JasperSoft。经历了去年


的 一 轮 大 收 购 以 后 , 当 前 的 BI 争 霸 已 演 化 成 了 IBM 、 微 软 、 SAP 和 Oracle 之 间 的 竞 争 , 但
JasperSoft 的崛起显然有利于开源技术在商业软件统治的 BI 领域另创出一片天地来。

而在 2008 年,谷歌推出了完全开放的开源移动平台—— Android 移动平台,它包括操作系统、用


户界面和应用程序——移动电话工作所需的全部软件。这也使得开源软件在诸多 IT 巨头必争的领域—
—智能手机方面占得了先机。

移动电话巨头诺基亚也在 2008 年重新调整了战略,把 Symbian 平台作为开源平台推出。这样,


Symbian 将从诺基亚中解放出来,并最终按照 Eclipse 公共许可协议分发,并逐渐走向社区开发的道
路。诺基亚还在 2008 年收购了 Trolltech,于是开源 QT 工具包将成为移动桌面开发之间的桥梁。

此 前 , 开 源 内 容 管 理 软 件 厂 商 Alfresco Software 推 出 了 Alfresco Labs 3 , 对 微 软 的


SharePoint 协作软件构成了不小的冲击。稍后,Novell 发布了 Mono 2.0,应用它可以让.NET 应用
能够运行在 Linux、Solaris 和 Macintosh 产品上。

另外,提到开源,人家总会顺便联想起微软。但在以前,微软总被放在开源的对立面,但在 2008 年,
微软显然正在改变人们的这种印象。Silverlight 2 RTW 的发布肯定要算.NET 平台下的一件大事,
需要补充说明的是微软在 12 月份发布了 Silverlight Toolkit,这是一个完全开源的项目,提供了
非常多的在 Silverlight 2 中并没有内置支持的控件,并且还在不断增加中。

早在 2008 年初,微软的 Windows2008 研发团队就针对 PHP 应用做了专门的技术优化。进入 2009


oss.linuxpk.com 2009 年第 2 期 18

业界动态
年,微软中国公司与国内知名开源社区 PHPChina 联合宣布了互操作合作计划,以满足国内许多 PHP 用
户选择使用微软的 Windows 操作系统的需求。

微软此举显然是要实现互操作性,而谈到互操作性,微软在 2008 年最大的手笔莫过于和 Novell 的


一系列合作。其中最让人吃惊的莫过于微软在 8 月份居然花费 1 亿多美元用于购买 Novell SUSE
Linux Enterprise 许可。

国内开源界何时赶上

尽管关于开源的事例数不胜数,但让人遗憾的是国内开源厂商和社区还是居于绝对的弱势地位。

2008 年年初,国内开源厂商仿佛一起进入了蛰伏期。然而,就在业界人士都认为国内开源厂商会在
平淡中收场的时候,一切都发生了变化。

先是 2008 年 11 月,为了改变国产软件基础薄弱的局面,以股权变更为起点的国产基础软件新格局
逐渐形成,为我国基础软件产业的发展输入新的血液。CEC 和 CETC 系统共同向中标软件注资 2 亿元,其
目的就是要通过再次注资和配套产业链发展两种方式,将中标软件打造成为我国操作系统和办公软件“
一架式”发展的旗舰企业,并为其在数据库、中间件等方面的工作奠定了坚实的基础。

接下来只几天的功夫,中科红旗软件技术有限公司举办 Midinux 技术峰会,。利用 E-Midinux、


Midinux SDK 两款新产品,为移动互联网设备(MID)用户带来更强劲的移动互联网体验,同时也进一
步丰富了 MID 产业链,加速移动互联网时代的到来。

2008 年,“上网本”迅速成为 IT 圈内一个迅速风靡的时尚产品,而来自国外媒体的消息表明,中


标软件推出的中标普华 Linux 上网本系统,据悉销售突破 300 万套。尽管微软不断加强 Windows 与其
他操作系统的互操作性,但 Linux 与 Windows 的竞争肯定还会长期存在下去,但上网本电脑正在动摇
微软视窗操作系统的垄断地位。

尽管国内开源厂商在年末集体发力,但对比国内开源厂商和国外开源业界的发展,我们还是不难发
现其中巨大的差距。

权威机构预测在 2009 年中,开源将在商业化、多种商业模式、社区、收购、主流化等五个方面有所


发展,而其中的商业化和社区也一直是国内开源界的薄弱环节。但另一方面,正在不断扩大着的金融危
机给 CIO 们施加了太大的压力,成本已成了每个 CIO 不得不考虑的问题。因此,这又给开源软件提供了
更大的发展机会。我们不应忘记,Linux 的第一个黄金发展期,正是起源于网络泡沫破灭之时。当时,
也许没有几个人会想象得到 Linux 能真正在诸多应用中占据半壁河山,但 Linux 在今天真地做到了。

因此,我们此时也许更应该反思一下中国式的开源之路。IT 经济的发展往往以十年为一个周期,以
此来看,2009 年中国开源又回到了原点。


oss.linuxpk.com 2009 年第 2 期 19

业界动态

经济危机下开源软件或将增长两成
中国计算机报 陈畅

一、2008 年用户需求研究
赛迪顾问的调查表明,用户对开源软件的功能期望中,稳定性和安全性的需求仍是被调查用户重点
关注的方面,分别占到了 88.6%和 78.9%。此外,用户对开源软件的易用性、兼容性的要求也比较高,
占到被调查者的 48.3%和 38.3%,较去年同期都有了一定的增长。

二、开源软件逐步向核心领域渗透
经多年的市场推广,很多企业用户已经开始认识到开源软件所具有的更大生产力,他们可以通过较
低的成本利用开发者集体智慧的成果。在国家大力推行正版化政策的带动下,用户对开源软件的使用率
也进一步提高。Linux、开源数据库、开源浏览器、开源 Office、开源应用软件的用户数量和应用范围
不断拓展。赛迪顾问的调查显示,华北、华南、华东地区用户对开源软件的接受度最高,华中地区的需
求增长较快,东北、西北、西南的开源软件应用也开始起步。

在开源软件应用范围扩大的同时,开源软件的应用深度也在增加。作为开源软件中应用最为成熟的
Linux,已经获得了政府、金融、电信、邮政等大型用户更多的认可,并由一些非关键应用逐步向用户
的核心业务层面渗透,如银行支付系统、电信计费系统、证券交易系统、企业资源计划等已经开始采用
Linux 系统,并取得了一些成功部署和维护经验,为企业核心业务的大规模采用,提供了基础条件。开
源数据库也在中小企业级市场取得了更多的应用,可以完全满足中小企业数据量应用的需要,其业务系
统有一部分已经开始使用开源数据库。

在近日召开的开源世界高峰论坛上,开源软件联盟提出了从 2008~2020 年的开源软件产业发展规


划蓝图。该蓝图计划至 2020 年,使免费、自由、开源软件进入主流软件产业。绝大多数企业的 CIO 将
会选择使用 FLOSS(即自由、免费的开源软件),而 FLOSS 也将会成为绿色数据中心或者其他商业模式的
核心内容,确保企业数据可以在不同的服务系统之间进行交换。

三、用户抛弃付费软件
当前全球经济进一步恶化,企业的 IT 支出也将不同程度地陷入资金匮乏的尴尬境地,越来越多的企
业为控制成本和节约开支,将会自己研究开源软件并支持开源软件开发的相关工作。许多业内分析人士
认为,那些正在使用开源软件或准备减少成本投入的企业,将会继续推进付费或非付费开源软件的应用。

对于一些已经成功实施开源软件系统的公司而言,开源软件的益处已经大大超越了成本节约的范畴。
大型企业逐步开始利用开源软件追求 IT 系统的灵活性和经济性;中小企业也将开源软件作为引入先进技


oss.linuxpk.com 2009 年第 2 期 20

业界动态
术、实现低成本、高效建立 IT 系统的捷径。而在过去,那些先进技术往往只能通过昂贵的软件授权使用
才能获得。

在技术泡沫破灭之后,E-Trade 金融公司的副总裁兼首席技术总监 Lee Thompson 需要找到一个


高效率而低成本的运营方式。2001~2002 年,该公司在线股票交易技术预算减少了 1/3,“我们必须
行动起来,计算出我们将要花出的每一分钱,同时也要制定和选择出降低成本的解决方案。”因此,他
开始提倡使用可以通过网络下载的,几乎无需成本投入的开源软件。由于使用开源软件,到 2002 年底,
该公司一年节约了 1300 万美元的 IT 投入。

现在,类似的情况再次重现。随着经济的低迷,所有企业要再一次面临削减 IT 成本的巨大压力。
Change Wave 研究机构在 10 月份所做的调查报告也显示,2008 年末,全球经济仍将处于特别萧条的
情况,该报告同时指出企业级软件市场将面临急剧跌落。大约 1841 家接受调查的企业级软件购买者中,
40%的企业认为它们将会在未来的 90 天内减少对企业级软件的投入。

四、半数企业青睐开源
在 企 业 服 务 器 上 运 行 的 Linux , 是 应 用 于 企 业 的 最 常 见 的 开 源 软 件 之 一 。 根 据 2008 年 9 月
Gartner 针对世界范围内 274 家企业,所做的调查来看,近半数的企业已经在使用开源软件,其余大部
分企业计划在未来的 12 个月内开始使用开源软件。有大约 52%的被调查企业已经在使用服务器开源软件,
还有 32%的企业计划在未来 12 个月内开始使用服务器开源软件。调查中,39%企业表示正在使用应用于
桌面的 Linux 操作系统,另有 22%企业希望会在未来的一年内开始使用该桌面操作系统。

大约在两年前,Office Depot 开始安装在 Novell 公司服务器的 Linux 操作系统上,使该公司不


再依赖运行大型服务器时所必须使用的专利软件,比如 IBM 主机和 Sun 服务器的专利软件等。Michael
Manis 是 Office Depot 负责全球共享服务的副总裁,他说,由于专利软件平台都需要配备对其操作系
统有着深入了解的专业团队,因此,采用标准化的同一开源软件平台将会大大提高成本效益。目前,
Office Depot 运行在约 400 个服务器上,许多公司还会继续增加更多的服务器,来提升公司的运营效
率。

Michael Manis 说:开源软件给公司带来了更大的适应性,可以按需求随时建立 IT 系统,而不是


立刻去更新服务器。

在最近一次调查中,Gartner 明确指出,开源软件已经遍布在企业的每个角落。专家表示,面对全
球金融危机的冲击,低成本的开源软件无疑会更加受到用户的青睐,越来越多的中小企业将会对 Linux
以及其他开源解决方案产生了兴趣。

五、开源软件企业利润增长
对采购预算的缩减,使得一些企业越来越重视使用开源软件。“由于预算的大幅缩减,一些企业正


oss.linuxpk.com 2009 年第 2 期 21

业界动态
在寻求使用开源软件的机会。”在一个名为“ 451 集团”的咨询公司就职的分析师 Matt Aslett 说。
现在,开源软件已经广泛应用于一些企业,帮助他们运行服务器和维护数据库管理系统。与此同时,在
企业 IT 系统建设、客户关系管理、供应链管理等领域,开源软件也得到了越来越多的认同和广泛应用。

SugarCRM 创建 4 年以来,不断提供免费和可订购的开源客户关系管理软件,并在 2008 年第三季度


创造了公司最高税收记录,由于不是公开上市的交易,该公司没有透露确切的税收金额。但截至今日,
据统计该企业一共开发了 4000 个付费客户,这其中包括 H&R Block、Men's Wearhouse 和日本新生
银行等。SugarCRM 的首席执行官 John Roberts 说:“虽然我们面对全球经济衰退感到无奈和黯然,
但如果我们想要在全球范围内成功发展,我宁愿选择去做开源软件贸易公司,而不选择去做专利技术软
件公司。”他说,他看到了未来开源软件市场潜在的更大商机。

当前,最大的商业开源软件企业是 Red Hat,该企业的 2008 年第三季度财务报告中指出,其总收


入约为 1.65 亿美元,比去年同期增长了 22%。

在 Red Hat 销售的众多软件产品中,得到最广泛应用的就是 Red Hat Enterprise Linux,该


产品目前已经获得大约 250 万美元的已付定金,并且买方享有软件更新升级和技术服务的权利。


oss.linuxpk.com 2009 年第 2 期 22

开源通讯

Novell 助力汇丰银行提 红旗嵌入式系统应用在


升系统互操作性 风电控制领域
经过一系列考察、论证和测试,香港汇丰银 国内领先的操作系统发布商北京中科红旗软
行 日 前 加 入 到 日 益 庞 大 的 利 用 Microsoft 和 件技术有限公司称,目前,红旗嵌入式系统在黑
Novell 合作协议的全球化公司队伍当中,受益 龙江、甘肃、江苏的风电系统投入运行,在电网
于 Microsoft 和 Novell 的合作关系。 运行情况改变的情况下,能够及时调整风电发电
机运行指标,有效应对危机状态。稳控系统设备
同时,Novell 也成为首个担任汇丰银行顾
是风电入网运行的重要设备,红旗嵌入式系统在
问职责的供应商,为汇丰银行提供更多专业的服
风电控制领域的成功应用,标志着红旗嵌入式系
务。互操作性的增强很好的满足了汇丰银行对更
统在实时特性与稳定性方面得到了工业级应用的
高的稳定性、可靠性和安全性的要求。
认可,并达到国际领先水平。
汇丰银行与 Novell 合作的内容就是通用
Linux 服务器构件应达到的目标,在整个企业
内的 SUSE Linux 上实现标准化。未来三年中,
汇丰银行有机会非常多地接触到其每一个服务器。 高校开源软件大赛落幕
自 从 2006 年 11 月 2 日 Novell 和
Microsoft 宣布了一系列协议发布以来,根据 红旗倾力开源人才培养
该项合作协议,已有超过 40000 份 3 年优先支持 12 月 5 日(北京)“2008 红旗杯全国大学
订购 SUSE Linux Enterprise Server 的新 生开源软件技术竞赛”落下帷幕,历时半年的全
证 书 生 效 。 美 国 国 际 集 团 技 术 公 司 ( AIG 国高校开源软件竞赛在历经了全国 15 个省区高
Technologies ) 、 德 意 志 银 行 股 份 公 司 校巡讲后,回到北京,获得优异成绩的各参赛院
( Deutsche Bank AG ) 、 瑞 士 信 贷 集 团 校的老师和学生齐聚北京,经过最终团队技术与
(Credit Suisse)以及沃尔玛连锁公司(Wal- 理念的展示,激情演绎出开源文化技术的另类风
Mart Stores Inc.) 已 经 成 为 首 批 享 受 到 范。
Microsoft 与 Novell 互用性协议益处的公司。
目前,红旗教育学院在全国 40 多所高校建
立国家 Linux 技术培训与推广中心,Linux 推
广项目已经在全国 100 多所高校遍地开花。随着
Linux 教育在全国的推广和普及,会有更多的学
生在实训中掌握开源技术,并由此走上了 IT 之
路,成为开源界的栋梁。


oss.linuxpk.com 2009 年第 2 期 23

开源通讯
软件中心及 Linuxpilot 联合筹办“香港开放源
中标软件首推 58 元桌 码考察团” 访京,希望踏出重要一步,为中港开
源产业的融合奠定美好的基础。
面办公套件(Linux +
Office)
首届“龙芯体验日”成
2008 年底,针对微软“黑屏”措施,中标
软件特别推出 58 元桌面办公套件包括中标普华
功在京举行
Linux 桌面版操作系统和中标普华 office,限
时抢购价只售 58 元。所有的用户均可通过网络 2008 年 12 月 28 日下午,由龙芯俱乐部和

商城以及中标普华在线商城购买到该产品,中标 亚嵌教育发起主办的北京第一届“龙芯体验日”

软件此举旨在帮助用户能够真正使用物美价廉的 活动在北京亚嵌教育研究中心龙芯实验室成功举

正版国产软件产品,摆脱微软盗版黑屏的困扰! 行。本次活动围绕广大龙芯爱好者感兴趣的龙芯
CPU,由北京龙芯俱乐部的核心成员刘世伟工程
师、龙芯智见总经理徐光宇和中科院计算所邢明
杰工程师分别做了讲解介绍,内容包括龙芯俱乐
中标软件联手长城打造 部活动、北京龙芯俱乐部成果介绍、龙芯嵌入式
最新进展介绍以及龙芯 GCC 开发探讨。本次活
Linux 上网本,累计销 动吸引了 30 多位龙芯爱好者参加,反响良好。

量突破 300 万
2008 年中标软件联手 Intel 与长城电脑推 百资科技应邀出席
出的 Linux 上网本的销量在短期内骤增,中标普
华 Linux 上网本及 MID 系统累计销售突破 300 Moblin 中心开幕典礼
万套。
由于百资科技对于 Moblin 是一个地位重要
的 操 作 系 统 供 货 商 , 在 12 月 23 日 参 加 了
Moblin 技术发展中心在台湾台北的开幕典礼。
香港开放源码考察团造 Moblin 技术发展中心将提供技术支持的生
态系统,包含硬件外围设备和零件供货商,以帮
访京城 助确保驱动程序和应用程序的可用。

在 2008 年 11 月 24 日 至 27 日 , 香 港 自 从 宏 碁 与 百 资 合 作 推 出 畅 销 的 Aspire
Linux 商会、香港生产力促进局、香港开放源码 One Netbook 以来,百资科技一直与英特尔密


oss.linuxpk.com 2009 年第 2 期 24

开源通讯
切合作。在 Linpus Linux Lite 的下一个发 Cox 在给 LXer 网站编辑的邮件中宣布说,他已
行版本中将整合 Moblin 2.0 的众多特点,其中 经决定在 1 月中旬离开红帽。但他会继续为
包括:开机时间,clutter 使用者界面技术。这 Linux 做贡献,希望开发底层的一些程序。至今
将是最好的终极智能型手机系统。 他加入红帽公司已经 10 年了,现在有机会去研
究一些更底层的东西,如果没有什么大的变动,
他将会就去 Intel。他认为红帽的队伍现在很棒、
很稳定,是世界一流的,他的离开对他们不会有
Alan Cox 脱去红帽, 什么影响的。

转投 Intel
12 月 24 日,Linux 内核主力开发者 Alan

2008 中国开源大盘点

——把握中国开源的发展机遇
中国开源软件推进联盟主席 陆首群

一、2008 年大事记
1. 2008 年 COPU 主办或合作、参与的主要活动:

2. 2008.2 北京(与 Linux 基金会合作),举办“Linux 开发者研讨会”

3. 2008.5 广州(主办),“2008 开源中国,开源世界”高峰论坛

4. 2008.10 长江三峡(与中国可信计算联盟合作),举办“国际云计算、可信计算学术研讨会”

5. 2008.10.18-19 北京(合作),举办“2008 Gnome 理事会”(Stormy Peters 执行主席出


席)

6. 2008.11 无锡(主办),“第七届中日韩三国 IT 局长 OSS 会议与第七届东北亚开源软件推进论


坛”

7. 2008.11 北 京 ( 参 与 ) , 举 办 “ Open Office.org 年 会 , 中 国 ” ( 社 区 负 责 人 Louis


Suarez-Potts 出席)

8. 2008.11 北京(参与),举办“Linux World China 2008”


oss.linuxpk.com 2009 年第 2 期 25

开源通讯
9. 2008.11 北京(主办), “开源软件统计工作会议”

(邀请 Gartner、IDC、CCID/赛迪、CCW Research/计世资讯、CSIP 以及中科红旗、中标软件、


北京拓林思、IBM、Sun、Intel、Red Hat、Novell 等单位参加)

10. 2008.12 北京(合作),举办“北京 Apache 论坛”(Justin Erenkrantz 执行主席出席)

11. 2008.12 北京(主办),“Linux 和开源软件开发、发行商,与银行、证券、电信、铁路、能


源等大用户,以及中国计算机用户协会和系统集成商的对话会”

12. 2008.12 北京(主办),组织微软与国内 Office 开发、发行商及标准测试机构就 Office 互操


作合作开发举行协调会

二、支持开源社区成长
据初步统计,国内开源社区有 230 家,大致可分为①门户类综合社区,②技术论坛类社区,③开源
项目开发类社区,④调研分析类社区,⑤学习推广类社区,⑥社交娱乐类社区,⑦应用类社区,⑧标准
测试类社区,这充分反映了国内发展开源软件的热情,在这些社区中,除少数已与国际接轨,开始出人
才、出成果外,多数社区的机制、设施尚待完善,活动经费尚欠缺,志愿开发者尚需进行技术培训和专
业指导,与国际社区的接轨、协同工作有待进行,COPU 支持他们在自愿的基础上做好社区完善工作,帮
助他们健康成长。

三、谈几件事
摆正开源与微软的关系
发展开源软件,是为了向用户提供多一种选择,推动软件产业的发展。开源软件就是要挑战私有商
业软件,特别是微软。但我们鼓励开源与微软正常竞争,双方也要合作;我们尊重微软的成就和贡献,
但我们反对侮辱、谩骂对方。

谈到学术争论,可以有不同意见。例如,我一直认为,Windows 太胖了,需要瘦身(Vista 内核
4GB,XP 内核 2GB),Vista 是微软迄今为止 Windows 升级最失败的一次(当时微软不少人极不赞成
这个观点,并反击,今天,直到 Vista 销售低于预期,全球用户反响很大,微软才无奈地认承这个事
实),微软为此提出了 Minwin 这个项目要给下一代 Windows 瘦身,现在看来 Windows 7 还是一个胖
子,瘦不下来(我当时曾预言,微软庞大的开发团队的机制似乎需要改革)。

低价 PC 对微软的冲击
2008 年(财政年度)3 季微软营收仅上升 2%,业绩不佳,全年股票下跌 41%。国外有人认为微软遭
受了重创,出现“帝国倒塌之声”(看来有点夸大其词!)其祸根是受到预装 Linux 的低价 PC 的冲击。
其实,微软是自己打倒自己, 2008 年全球低价 PC 约 1300 万台,装 Linux 的仅约 400 万台(不足


oss.linuxpk.com 2009 年第 2 期 26

开源通讯
30%,只是“小头”),而装简化 XP 的约 900 万台(占“大头”)。问题是“小头”带动“大头”全面
压价,导致微软业绩不佳。可是微软实力尚在,如果对来年价格策略作出调整,完全有可能挽回颓势。

便携式 PC PK 桌面 PC
有人说,配 Linux 的“上网本(Netbook)”和“移动网络设备(MID)”(都是便携式 PC)是替
代桌面 PC 的亮点。我们举 Intel 的协作产品为例(当然搞上网本和 MID 的不止 Intel),关于上网
本,,Intel 与 Xandros、百姿科技、中标软件(OEM 厂商为:华硕、宏碁、长城)合作,推出 Linux
上网本;关于 MID,Intel 与中科红旗(OEM 厂商为:明基、爱国者、日立、联想等)、WindRiver、
百姿科技、Ubuntu 合作推出 MID,可能是冲击桌面 PC 的亮点,但它们均是定制的,尚难全面取代桌面
PC。另外在 Intel MID 的发布会上我也曾指出,Intel 的 MID 也有与微软 Windows 配套的计划(关
键是微软尚未首肯)。目前 Linux 桌面只有社区发行版如:Ubuntu、Slackware、Debian、Fedora
、Open SuSE、PC LinuxOS、Arch 等的社区版;中科红旗开发并推出针对个人消费类用户的最新桌
面产品:红旗桌面 6.0,有待进一步观察;当然定制的 Linux 桌面产品已有了,主要是供业务较规范或
简单的企业或单位用户使用,尚不能供应消费类用户。总之,目前全面推出 Linux 桌面的时机尚未完全
成熟,尚不构成对 Windows 桌面的严峻挑战,大幅提高 Linux 桌面市场占有率(全球约 2%)还需等待
时日。

清醒对待 Linux 的优点与不足


Linux 或开源软件具有开放性、低成本、灵活性、安全性和不完全依赖于软件提供商等五大优点。
我们也要正视并设法克服它的缺点或不足:

1. Linux 或开源软件不同版本(从发行商的发行版 Release 回溯到“官方”/Official 的主版


Version)接口不同,不能兼容;为此要加强、加快标准化(LSB)建设,解决好兼容性问题,才有利
于 Linux 的应用和发展。

2. Linux 是一个分时系统,不是实时系统,自推出 Linux Kernel 2.6 及对相应环境改进后,


Linux 已成为一个软实时系统,加上改进高可利用率性能(从 99.99%提高到 99.999%),基本上能够
满足像电信网那样的高端用户的需求,扩大 Linux 的应用领域;从分时到实时性能的改进,表现在
Linux 支持内核优先抢占(Preemptive)的性能大有改善,但对中断处理数据结构的性能尚在继续改
进中。

3. 成熟的开源产品离不开工程技术的后续开发

开源社区进行的是原创性技术开发,未考虑产品成熟化过程;它所开发的是开源项目(Open

Source Projects),不是开源产品(Open Source

Products)。开源社区的开发机制是“集体开发、合作创新、对等评估”,这个松散的创新集体用


oss.linuxpk.com 2009 年第 2 期 27

开源通讯
左版版权(Copy-left)来保护(过去著作权处于灰色地带,现在已趋明确,并可用右版版权(Copy-
right)来保护左版版权(Copy-left),即对于违反开源许可协议者,可以追究其法律责任)。开源项
目的开发成果是以社区发行版来发布的,社区版的优秀创新技术集中体现在其软件的源程序代码中,源
代码是向社会公开的,公众均可以从网上免费下载。源代码中当然拥有核心技术,但不能看成自主知识
产权。社区没有商业模式,远离用户,没有责任对用户提供任何技术支持和各种服务。公众下载的社区
版,尚未完全成熟、没有质量保证,要自己安装、配置、调试,公众可以试用,但社区并不提供经常性
的补丁支持,也不负责答复咨询。作为发行商(企业),其工作是将社区的半成品继续进行深度开发,
引入大工业开发体系,开发工程技术,催化产品成熟化过程,开发成熟的开源产品,并以产品发行版的
形式推向市场。企业继承社区的源代码,在发布产品发行版时,其源代码要遵循开源许可协议,仍将保
持其公开性,但企业开发的工程技术是不公开的。开源产品的全部技术包含源代码和工程技术,在工程
技术中也拥有核心技术,只有这部分不公开的核心技术才可能具有自主知识产权。开源发行商(企业)
推销或发行成熟的开源产品,其本质是采用低价营销战略(决不是免费战略);但他们正在摒弃传统的
基于“(专利/版权)授权软件”的销售方式,采用“软件即服务(SaaS)”的商业模式或服务模式,
即采用“软件免费,付费服务”的方式。我们必须搞清上述一系列概念,不要犯糊涂,才能推动开源软
件健康发展。

关于办公套件问题
全球办公套件的市场占有率大致为:微软的 Office 约 85%,Open Office.org 约 5%,苹果的
iwork 约 3%,Corel 的 word perfect 约 2.5%,Google 的 Docs 约 1%,其他约 3.5%,必须认承
微 软 的 Office 目 前 在 全 球 居 主 流 地 位 。 Open Office.org 社 区 负 责 人 Louis 对 我 说 , Open
Office.org 社区已与微软合作进行 OOov3 与 Office 2007 的兼容性开发与测试;英文版的 Open
Office 兼容性不错,中文版因中国增加了一些特殊功能,兼容性要差一些。 COPU 支持中方 Office 厂
商与微软一起协商,以便在 Office 兼容性合作方面(包括相互沟通接口、协议、算法以及妥善处理专
利),迈出可喜的一步。

四、把握好发展机遇
在高端应用方面
* 2008 年 12 月,我们邀请金融、电信、能源、铁路等大用户召开座谈会,据我了解,在他们那里
的高端应用过去主要采用 Unix,现在 Unix 是向 Linux 或 Windows 哪个方向迁移,还是未定之数,这
就是机遇。

* 2008 年 10 月,我们主持了一个云计算、可信计算等高端新技术应用国际研讨会,初步了解到国
内外的高端新技术应用都是以 Linux 和开源软件为导向的,但目前开源软件与私有商业软件在这方面的
竞争还是很激烈的,这就要把握好机遇。


oss.linuxpk.com 2009 年第 2 期 28

开源通讯
在核高基发展方面
核高基即核心器件、高端通用芯片和基础软件,其中基础软件即操作系统、数据库、中间件和办公
套件,这是国家十一·五期间的重大专项。专家们认为,要发展我国基础软件必须基于开源软件,这样才
能站在巨人的肩膀上跨越发展,这是机遇。

在推行现代服务和准就业模式方面
12 月 19 日国家 Linux 培训推广中心和教育部 LUPA 开源软件大学生实训基地就国家软件人才培训
模式举行启动仪式,邀请 40 个培训中心和 30 个国家经济开发区代表参加,会上提出,开源软件销售服
务不要走老路,要推行 SaaS 这样的现代服务模式,吸收接受培训的志愿者作为一支服务大军,为用户提
供解决方案,技术支持,实施指导和全面服务;并建立教学培训的“准就业”模式。在今天,特别是在
全球遭遇金融危机,国内扩大内需,发展经济,消化就业压力的时刻,这种模式也是把握机遇的一种探
索。

在发展便携式 PC 方面
在发展与 Linux 配套(Midinux 和 Moblin)的上网本 Netbook(7〞,8.9〞,10〞显示屏)和
MID(4.5〞,6〞显示屏)等便携式 PC 方面找机遇(受微软和 Intel 大力推广的超便携 MID,被英国
杂志《PC Pro》评为 2008 年全球十大失败科技产品之一,但该杂志认为上网本受到用户热捧;另悉,
配 Linux 的 MID 在国外一些地区也受到欢迎。我想,正如我在 2008 年 6 月 25 日“Intel Moblin 移
动应用开发者大会上”所说的:各种 MID 和 Netbook 可能成为亮点,最终是否形成气候,还要由全球用
户来说话,我们将拭目以待。我在会上还曾说,Intel 的 X86 架构似乎不太适应 MID 嵌入式计算,下一
步如果不将 x86 简化,恐难与 TI、Qualcomm、三星等推出的 ARM 处理器竞争,ARM 正在从智能化手机
向 Netbook、MID 扩展。当然,要形成大气候,还要进一步扩大第三方驱动和应用支持的生态系统,,
壮大业已国际化的 OEM 厂商的合作体制)。

在发展智能化手机方面
当前发展智能化手机必须拥有或利用三个资源:① 互联网资源;② 手机发展环境营造者自己拥有的
资源或其可控的本地资源(作为手机发展环境营造者可以是:手机制造商、如 NOKIA,也可以是网络平
台提供商、如 Google,或者网络运营商、如中国移动等);③ 用户或第三方的资源,这就必然导致手
机平台或手机的操作系统要开放,从而为 Linux 或开源软件提供发展机遇(微软也在向这方面变动中)。
但要注意!上述各种角色的手机发展环境营造者纷纷登台,其目的是企图利用平台建设来掌控进入新一
代移动互联网的门户。


oss.linuxpk.com 2009 年第 2 期 29

开源社区

中科红旗发布 Linux7.0 rc1 桌面版操作系统


系统亮点:

◆ LiveCD:从光盘启动即可直接使用系统
/ 支持安装到硬盘

◆ 无须刻盘——可用 ISO 文件直接引导


(Linux 或 Windows 下均支持)

◆ 可制作 LiveUSB 系统,(即通过 U 盘启


动,Linux 或 Windows 均可创建)

◆ 最新系统组件
牛年即将到来……
◆ 全新的主题风格
红旗 Linux 桌面“牵”牛版,顾名思义:牛
◆ 可以读取 Windows 系统的默认设置
年将至,在新旧年份交替之际,希望这个版本的
问世能“牵”出一个喜洋洋的牛年。 组件信息:

“牵”牛版实际对应的是红旗 Linux 桌面 ◆ Kernel:2.6.27.7


V7.0 RC1 版。作为一个研发阶段,还有一些待
◆ KDE:4.1.3
解决的问题存在;因此请各位爱护并支持红旗
◆ QT:4.4.3
Linux 的朋友能够以较包容的心态对待它。当然
我们决不会回避任何问题,也真诚的欢迎各位朋 ◆ GCC:4.3.2
友及时的给予反馈和指导。深表感谢!
◆ Glibc:2.9
另外,红旗 Linux 桌面“牵”牛版是专门针
◆ xorg-x11-server:1.5.3
对社区用户发布的一个版本,所以绝对禁止一切
与商业相关的行为。这个版本作为红旗 Linux 桌 ◆ NetworkManager:0.7.0

面团队对社区用户的答谢,既包含着每个人的心 ◆ Scim:1.4.7
血,也体现着对社区朋友的重视。——这点毋庸
◆ Firefox:3.0.5
置疑!
RC2 中我们会继续处理 bug,引入 KDE4.2
值此新年之际,再次向每一位到访的朋友问
并增强。
声“新年好”!在新的一年里,工作要努力(牛
Md5:b833c7b8df2957f2b1ff762f08cf
年精神),但绝对有丰厚的回报(新鲜、肥嫩的 8c4f
草料)。
安装提示


oss.linuxpk.com 2009 年第 2 期 30

开源社区
请确保您的硬件环境符合以下需求: ◆ 不小于 512M 的内存,当然 1G 以上会有
更好的使用感受。
◆ 4G 以上的硬盘空间;

下载地址:http://www.redflag-linux.com/download_end.php?
class1=6&class2=1&id=1000000855

Google Android 手机 Agora 最新谍照


29 日发布全球第二款基于 Google Android 的
智能手机 Agora,不久之前 Kogan 对 Agora 的
外形设计进行了修改,并宣布将在消费电子展上
发布该手机,日前 Agora 的最新照片已经被泄露
到网上。

配 置 方 面 , Agora 支 持 Google 搜 索 、
Gmail 、 YouTube 、 Google 地 图 、 Google
Talk 和 Google 日历,2.5 英寸 TFT-LCD 触摸
屏,分辨率为 320X240,200 万像素摄像头,具
备 GPS 导 航 , 支 持 谷 歌 地 图 , 支 持 蓝 牙
2.0 , IEEE 802.11b/g , 256MB+128 MB 闪
存,处理器时钟频率为 624MHz,1300mAh 可充
电锂电池,待机时间约 300 小时,通话时间约

澳大利亚手机厂商 Kogan 计划在今年 1 月 400 分钟。

Google 欲推出 Mac、Linux 版 Chrome


Google 正在努力开发 Chrome 以便它能够适应更多的操作平台,周
五,Google 表示他们将在今年上半年发布 Linux 和 Mac OS X 版本的
Chrome 浏览器,而且在周三发布的最新升级版本则为这一计划解决了最
大的问题:扩展。

Google 对 Chrome 寄予了厚望,这也难怪,要想也互联网领域取得


更大的发展,浏览器是必不可少的一个产品,在刚刚推出就取得不错的


oss.linuxpk.com 2009 年第 2 期 31

开源社区
反响后,Google 决定更上一层楼,填补 Chrome 的市场空白。

Chrome 产 品 主 管 Brian Rakowski 称 , 公 司 已 经 为 在 2009 年 上 半 年 发 布 Mac 和 Linux 版


Chrome 做了大量的准备工作。在周五接受采访时 Rakowski 说:“这是我们所希望的, Mac 版和
Linux 版的开发在同时进行,进度也差不多。”

目前这两个版本的 Chrome 已经可以打开大部分网页,但用户体验方面还处在基础阶段,Google 表


示他们并没有在增添新功能上花费太多时间,而把绝大部分精力放在了浏览器构架的正确性和稳定性方
面。相信不久 Mac 和 Linux 用户就可以使用到 Google 的浏览器了。

KDE 4.2 版正式发布

如果你一直跟踪使用 KDE 4.2 的话,那么赶紧升级到 KDE 4.2 吧。

关于 KDE 4.2 的特性,这里只作简单介绍:

* 加强了 KWin 的桌面复合特效;

* 增强了 Plasma,支持桌面中心元素(即传统桌面布局);


oss.linuxpk.com 2009 年第 2 期 32

开源社区
* 新的 Plasma applets,支持 Google Gadgets 和 Mac OS X Dashboard Widgets;

* 全面改善了主题功能,几乎所有桌面元素都将可以定制;

* 相当多应用程序得到了改善;

按照 KDE 六个月的发布规律,KDE 4.3 将于今年夏天与大家见面。事实上,开发者早已经计划好一


大堆与 KDE 4.3 相关的特性并且已经转到 KDE 4.3 的开发了。

安装和其他详情可见:http://kde.org/announcements/4.2/index.php

火狐中国版 Firefox 3.0.5


China Edition 2009.1 发布

火狐中国版专为中国用户定制,提供出色的全方位浏览体验。中国版在 firefox 的最新版本


(3.0.5)上构建。

中国版新增了“火狐魔镜”,用户可随意拖拽页面中被选中的文字,在侧栏获得搜索结果或拖拽视
频,将视频播放窗移植到右侧栏,可以边看边上网;同时,“火狐魔镜”还内置了在线音乐服务,还可
查询天气和股票走势。


oss.linuxpk.com 2009 年第 2 期 33

开源社区
更新内容:

* 1.右上角添加更多搜索选择

* 2.新增魔镜图片全选和保存

* 3.“工具”菜单增魔镜隐私数据清除

* 4.魔镜自动弹出和关闭等设置修改

* 5.内存占用优化

* 6.标签页浏览优化

* 7.其他更新和优化

下 载 :http://dl1.g-fox.cn/chinaedition/releases/zh-CN/FirefoxChinaEdition
%202009.1.exe

QQ for Linux 1.0 Beta1 发布


QQ for Linux 是腾讯公司发布的基于 Linux 平台的即时通讯软件,
为 Linux 电脑用户带来更加快捷方便的聊天体验。与 Windows 版本的
QQ2009 界面风格保持了一致,基于 GTK 编写,支持 KDE 和 Gnome 桌面
系统,支持 64 位处理器,系统要求:Linux kernel:2.6,GTK:2.10
及更高。

最新版本功能:

一、色彩丰富的界面

在 Linux 平台率先支持更换软件的色调和底纹,配套用户不同的
Linux 版本,体现不同的个性和风格。

二、丰富的聊天表情

用户可以和好友或者群进行即时的交流,收发默认表情,并且能接收
对方发出的自定义表情。

三、自定义分组的顺序

用户可以在好友列表中自由的拖拽分组,把常用的分组移动到最上端,快速选中常用好友。

四、管理多个会话窗口


oss.linuxpk.com 2009 年第 2 期 34

开源社区
用户可以用多标签的方式管理多个会话窗口,并且每个子会话窗口可以从母会话窗口中分离,成为
一个独立的聊天窗口。

五、整合 QQ 核心功能

为用户提供 QQ 最核心的聊天,查找,设置等功能,可以享受到最快捷的聊天体验,没有任何打扰。

六、丰富的新消息提示

当用户收到新消息,不仅在任务栏会有消息盒子提示,而且在聊天的窗口和标签也有丰富的动画效
果。

QQ for Linux 1.0 Beta1 主要改进:

支持好友备注功能

支持代理服务器登录

支持热键(提取消息:Ctrl+Alt+Z ;截屏:Ctrl+Alt+A)

优化皮肤的细节

优化代码运行效率,再次降低系统开销

下载:http://im.qq.com/qq/linux/download.shtml

奥巴马的就职与开源软件
袁萌

一、奥巴马的就职演说与微软的牛气冲天
1 月 20 日,奥巴马将发表就职演说,出任美国大总统。值得我们注意的是,奥巴马就职前到处鼓动
美国应该有“新的独立宣言”,而且就职演说的主题就是“自由的新生”,完全仿效当年美国大总统林
肯的说法。现今,美国广大普通民众对奥巴马给予很大的期望。这一切,与微软的牛气冲天有什么关系
呢?

大家知道,大容量流媒体播放服务器是一项尖端技术,要保证“海量”流媒体内容的发送量存在相
当的技术难度。通常,人们使用 Adobe Flash 服务器来处理在线实时(并且 on-demand)流媒体的播
放(to streaming)。2007 年 4 月,微软推出“银光”(“ Silverlight 1.0”)技术来对抗
Adobe flash,并且在北京奥运期间大获成功(注:去年 8 月,“银光”(2.0 Beta)发布,2.0 正
式版本在去年 10 月发布)。由此,微软的“银光”技术引起(全球)人们的广泛关注。


oss.linuxpk.com 2009 年第 2 期 35

开源社区
今年 1 月 16 日,微软对外宣布:奥巴马就职典礼委员会(PIC)决定采用微软“银光”技术播放奥
巴马就职典礼的现场视频实况,播放站点是:www.pic2009.org(总统就职官方网站)。届时,全球
公众将通过网络观看奥巴马就职实况。

问题出在哪里呢?根据“银光”的技术要求,用户必须在 Windows 平台上下载安装一套“银光


”2.0 客户端播放软件之后才能观看奥巴马就职典礼的视频实况,而对于 Linux 和 Mac OS X 平台的用
户,就别想(看)了,因为,“银光”技术确实太新,至今还没有相应的其他平台替代物。啊,微软真
的很“牛”!我自己都要羡慕死了。

我不清楚在 Ubuntu 8.10 上,借助 Wine 1.0 可否运行“银光”的客户端软件,也不知道是偷还


是买才能把“银光”客户端软件搞到手。偷和买,我都不想去干,只好算了。微软确实很“牛”,这次
我服了。

(这里,我顺便多说一句:近日,据反病毒公司 F-Secure 的估计,在 2008 年 10 月发现的蠕虫病


毒 Conficker,在全球范围内,现已感染了 890 万台计算机,其中以中国、巴西、俄国和印度为甚。同
时,F-Secure 声称,感染此病毒的计算机台数正在急剧上升(“Skyrocketing”),实际情况甚至比
这更糟。反病毒公司 Sophos 高级技术官员 Graham Cluley 对 BBC 说,这种病毒大规模爆发情况极为
罕见。据微软专家说,这种病毒专门感染可执行文件“services.exe”,由此衍生出许多随机文件,然
后建立起一个 HTTP 服务器,从黑客 Web 网站上下载文件(木马),但是,下载的文件被赋予的名称非
常之多(由蠕虫借助极为复杂的算法产生这些名称),要想破解清除绝非易事。实际上, Conficker 极
易借助 U 盘传播(也会感染局域网),但是,自启动 U 盘不会被感染。提醒番茄花园用户要自己想办法
搞到微软的 MS08-067 补丁才能除去此病毒。)

二、奥巴马是“开源总统”吗?
近日,在国际开源界有一个“热门话题”传播得沸沸扬扬,事情好像是真的一样。元月 21 日,
《BBC 新闻》技术记者 Maggie Shiels 发表一篇短文“Calls for open source goverment”(“
需要一个开源政府”)是这个“话题”的直接起因。事情是怎样的呢?

去年 11 月,Obama 在总统竞选时说过:“我们现在要看到的是,在美国和全球范围内,对“开源模
式”((“Open source model”)理解已经成熟。《纽约日报》Errol Louis 急忙抓住这一点,给
Obama 起了个名字“our first open source President”。不过,很明显的是,这个“开源模式
”中的“开源”两字还不是“开源软件”里面的那个“开源”的含义。可是,今年 1 月 21 日,《BBC 新
闻》说的事情可就不同了。

元月 21 日,《BBC 新闻》首次透露, Obama 政府当局要求 SUN 公司总裁 Scott McNealy 为


Obama 政府准备一份”白皮书”,阐明开源软件的各项优点。 Scott McNealy 对《BBC 新闻》声称
(contended):“(Obama)政府应该发布命令(should mandate)使用开源产品,以便改善(系


oss.linuxpk.com 2009 年第 2 期 36

开源社区
统)安全性,使用高品质软件和降低成本,获得(系统的)高可靠性,而这一切优点均来自于开源软件
”不管怎么说,这一事实是非常重要的。这意味着什么呢?

难道美国 Obama 政府也会像越南(政府)下令全国一律“开源”?很显然的事实是,这是不可能的。


我们要知道一个真相,微软对美国政府而言也是“源代码开放的”的“优秀国民”。问题在于使用开源
软件的成本很低(当然这也要看你怎么用了)。OSI(世界开源促进会)主席 Michael Tiemann(有
实际根据地)估计,全球各国政府使用私有软件(或标准)所造成的损失一年就超过一万亿美元(in
excess of $1 trillion a year)。当前,全球经济遭遇不景气,各国政府节省开支是必然的,美
国政府也不能例外。

现在谈论美国 Obama 政府是否“开源”为时尚早。当前,软件之“开源与闭源”之争,在全球范围


内,正在“战犹酣”,根本用不着政府(包括我国政府)进行干预(支持开源一方),想依靠政府力量
整死微软是不对的(也不公平)。今年元月 22 日,Ubuntu 奠基人 Mark Shuttleworth 对《路透社》
表示,微软 Windows 7 与 Linux 的健康竞争将促进 IT 技术的创新,对 Linux 而言,这是一件(大)
好事。Mark Shuttleworth 先生赞同这样一种观点:其实,Linux 的最大威胁是自身的妄自尊大
(arrogance)而不是微软。我认为,当今有人喜欢说,Linux 成熟了,这简直是瞎话。

英特尔中国开源技术中心系列专访之三
——Solaris Team

陈杰
提到英特尔,一直以来,人们的惯性思维都是一家硬件公司,他们关注的是生成芯片、销售芯片,
而软件来自于不同领域,这和英特尔是毫不相干的事情。事实上,在软件领域,尤其是开源软件领域,
英特尔做出了很多的贡献,很明显的一组数据就是在英特尔中国,专门从事开源软件研发的就有 150 个
工程师左右,这些工程师做的每一件事情都与开源软件有关,并且都回馈与开源社区。《开源》杂志将
做一系列采访,一一介绍来自英特尔开源技术中心的不同团队,介绍他们所涉及的开源项目及从事的工
作。

《开源》:首先介绍一下你们团队的历史,目前负责哪些方面的研究?

Solaris Team:2007 年 2 月 14 日,Intel 公司(下文简称 Intel)和 Sun Microsystems


(下文简称 Sun)签订了为期 3 年的深入的战略合作。Sun 将会推出基于 Intel x86 平台的服务器产品
线 , 而 Intel 会 对 Sun 的 Solaris 和 Java 进 行 全 面 的 优 化 。 作 为 此 次 合 作 的 重 要 组 成 部 分 ,
OpenSolaris 中国团队于 2007 年 4 月成立,隶属 Intel 全球开源技术中心(OTC),至今已有 14 位
工程师,分布在上海和北京。他们和另 4 位美国工程师一起,与 Sun 的工程团队保持紧密联系,对


oss.linuxpk.com 2009 年第 2 期 37

开源社区
Solaris x86 的系统进行了全面深入的优化。主要合作内容包括 Solaris 内核的最关键部分,例如内
核的中断系统、电源能耗管理调度、内存管理、输入输出、错误处理。合作同时包括桌面系统的驱动程
序(Intel 显卡、无线显卡)以及 Intel 自主创新的软件应用等。

《开源》:请简单介绍一下项目的具体情况任何,以及目前的进展情况。

Solaris Team:目前为止,Intel 在高端服务器 RISC 市场中,还有很大的发展空间。非 Intel


的 RISC 处理器仍旧在高端市场中占很大的份额。这些用户对于 UNIX 操作系统比如 Solaris 有着很强
的依赖性,同时当他们要从 Solaris 到 Linux 的转换和迁移过程中发现相当的困难。这就使得 x86 平
台上的 Solaris 全面优化成为很多电信金融用户关心的解决方案。而对于很多 Solaris 软件的开发者
来说,台式机/工作站还有笔记本电脑的 OpenSolaris 支持也是非常重要。

经过两年的努力,王子亮所在的中国 OpenSolaris 研发团队,对 OpenSolaris 在 Intel 最新平


台上进行了全面的优化,支持 Intel 最新的处理器、芯片组的最新特性和指令集,并已经集成到
OpenSolaris 和 Solaris 10 的最新发行版中。同时,对于 Intel 的桌面产品来说,其显卡和 WiFi
网卡,也都全面支持 OpenSolaris,这样用户可以在台式机和笔记本上,方便地进行软件程序的开发和
调试。

通过我们和 Sun 的共同努力,Intel 的很多以前的包括最新的台式机和笔记本电脑都能够很好支持


OpenSolaris 。 大 家 可 以 参 考 http://www.sun.com/bigadmin/hcl/data/os/ 来 寻 找 支 持 的
Intel 平台。在服务器方面,对于 Solaris 以下关键技术和创新,我们也都对其进行优化。

NUMA(Non Uniform Memory Access)进程调度

LIBC 库性能优化

Solaris 核心 (中断,内存管理,输入输出等)

Sun 的编译器优化

Sun 的 JAVA 优化

电源能耗管理调度

FMA(Fault Management Architecture)

xVM(基于 XEN 的虚拟化产品)

《开源》:从团队成立以内,取得了哪些突破性的成果,并简单介绍一下项目的远景规划。

Solaris Team:首先,基于 Intel 和 Sun 的紧密合作,带动了整个产业链的发展。如 IBM 、


DELL、Sun 等硬件厂商均推出了很多通过 Solaris 认证服务器平台。对于全球希望使用 Intel 至强平
台+Solaris 操作系统的用户来说,他们可以在自己现有的 x86 机器上,顺利地安装和部署 Solaris 系


oss.linuxpk.com 2009 年第 2 期 38

开源社区
统,同时享有 Intel 服务器平台高性能和可靠性。

其次,对于 Solaris 的研发人员来说,他们可以开始在 x86 台式机/笔记本上进行 Solaris 的软


件开发,最新的 OpenSolaris 支持所有的 Intel WiFi 和 Intel 显卡 2D/3D 的特性,而无需担心驱
动的问题,这样用户可以不必必须远程登录到服务器上。这大大增加了工作的效率和灵活性。

然后,从源代码的贡献来说,Intel 已经在 Solaris 的内核中贡献了约 2 万多行核心代码,并完全


开源。

在 中 国 , 我 们 的 团 队 积 极 支 持 参 与 各 种 Solaris 活 动 和 社 区 , 如 Sun Tech Day , 北 京


OpenSolaris user group 等,为爱好者和开发人员定期举办讲座,抚育开源社区。9 月 3 日,“中
国高校教师开源代表团”一行 10 人,参观了位于加州 Santa Clara 的 Intel 全球总部,并听取了
Intel 开源技术中心 OpenSolaris 研发经理 Dave Stewart 做的精彩介绍。此次访问为拓展中国高校
的开源视野,更好地理解国际公司的开源战略和学习其社区工作经验,起到了积极的作用。同时也为中
国的高校开源界今后借助 Intel 开源技术中心的中国研发团队,培养本土开源人才,奠定了良好的基础。
Sun 公司 Solaris 内核团队的资深经理 Darrin Johnson 表示,对 Intel OpenSolaris 团队做出
的巨大贡献和给予的无私帮助表示衷心的感谢。

对于最终用户来说,Solaris + Intel XEON 的解决方案提供了新的选择和机会,其中包含那些


对性能/可靠性要求很高的行业比如金融交易等,也都开始采用基于 Intel XEON 平台的 Solaris 解决
方案。

今后,Intel 继续对 OpenSolaris/Solaris 进行优化来支持 Intel 最新的处理器平台。同时也


将在 OpenSolaris 上继续进行 x86 平台的创新,如 Powertop,LatencyTOP,etc. 对于中国本地
的支持,我们也将继续对中国本土的开源项目以及 Solaris x86 上的政府、教育、社区、媒体做出我
们的贡献。


oss.linuxpk.com 2009 年第 2 期 39

开源社区

评论:gOS3 到 CloudOS——英雄的堕落
sglab

Good OS Co.差不多半年前发布了 gOS3.0,一个在我看来是划时代的 Linux 发行版。虽然确切的


说,gOS 算不上一个全新的发行版,因为它还只是基于 Ubuntu8.04 的一个改进,但是我仍然相信
gOS3.0 的出现必将大大加快 Linux 的普及。如果说我第一次见到 Ubuntu 的时候,我已经看到了
Linux 普及的前景,那么当我看到 gOS3 的时候,我知道这已经不那么遥远了。集 Ubuntu、 Windows
XP、Mac OS X 之长的界面,配以全套 Google 的在线产品以及 wine1.0,足可以满足几乎所有的正常
商务、娱乐应用。

当然我必须得承认,论华丽程度它还远不及 Vista 的 Aero(虽然在 Ubuntu 下有人通过 beryl 达


到了甚至超过了 Aero 的华丽,但是那毕竟还是有一点麻烦的)。不过你必须要知道比起 Vista 动辄 2G
内存,双核 2G 以上,独显的配置要求,gOS 只要奔三级别,256 内存就可以跑得欢实。现在不都流行环
保吗?想想看这将节省多少电费,并让多少本应成为电子垃圾的电脑硬件继续为我们工作?要知道,大
部分人的大部分应用其实都是上网、写文档、看电影,这样的应用本来就不应浪费一个设计工作站的资
源,多少年来“wintel”联盟已经让我们迷失了方向,陷入了为了追逐硬件的提高而追逐硬件的提高的
陷阱,这是对人类和地球极大的不负责任。


oss.linuxpk.com 2009 年第 2 期 40

开源社区
之前的 Linux 发行版在用户友好性上做得很差,直接导致 Linux 无法向普通 Windows 用户普及。
这一状况直到 Ubuntu 的出现而大为改观。而 gOS 在这一条路上走得更远,也更加彻底。虽然有些“老
学究”一直叫嚣着“Linux 就是给程序员用的,让那些菜鸟们继续在盗版 windows 中醉生梦死吧”,不
过 gOS 采用与 windows 类似的操作界面仍然得到了业界大部分的支持。内部集成的 Firefox 浏览器、
Google 网络工具会让你有一种“宾至如归”的感觉。现在有多少人在用 Firefox 上网,用 Gmail 发邮
件?在 Windows 下你还得先打开万恶的 IE(要是不小心被植入插件、木马的话更惨),但是在 gOS 中
你只需要点击一下桌面下方的图标。这种将 web 应用直接带到桌面上的理念更加符合现代人“时时处处
皆网络”的生活习惯。

对于某些不得不应用 Windows 程序的应用,gOS 也直接植入了 wine1.0 来作为解决方案,我试过


直接安装一个.exe 的程序,还是很方便的。这一理念大大降低了用户的迁移风险和成本。

本来以为 Good OS Co.会在 Ubuntu8.10 之后推出下一个版本的 gOS,但是没想到他们居然先弄


了一个 Cloud OS(直到昨天才发布仍然基于 8.04 的 gOS3.1)。Cloud OS 从这个名字来看应该是比
gOS 走得更远了,毕竟都云了吗。事实上它所带出的“网络即一切”的理念从长远看来也是对的。不过
Good OS CO.居然提出该系统与 windows 集成。虽然他们同时也号称 Cloud OS 理论上可以和任何独
立 OS 集成,但是看看他们的页面和新品介绍,感觉好像他们刚刚收到一笔微软的买笑钱。难道就是想消
除人们对他们是 Google OS 的误解?

我理解 Good OS Co.继续降低用户迁移风险和迁移成本的初衷,但是与谁合作也不能与微软合作,


向谁妥协也不能向 windows 妥协。因为这是一只会吃人的猛虎,你只要给它一丁点的缓冲空间,它就有
机会吃掉你。还记得 Netscape 吗?这也是一家开创了网络时代的公司,结局如何?你与 windows 集成,
那么在 windows 下一个版本中你就会发现微软自己的 Cloud OS,在巨大的用户群前提下,没有人可以
抵挡得住微软的集成绞杀术。

希望 gOS 走好,愿网景的悲剧不再发生,英雄不会堕落。


oss.linuxpk.com 2009 年第 2 期 41

知识学堂

Apache 的创始人 Brian Behlendorf


谢心

Apache 是开放源码软件中的一个成功典范。几年的时间,它一跃成为市场占有率很高的 Web 服务


器,并获得了 Web 管理员们的广泛青睐,被认为是“价格低廉、升级容易、安全可靠”的产品。网络为
Apache 提供了孕育的温床。Apache 的成功也给予开源的网络开发模式以强有力的证明。这是一个和商
业模式结合得如此完美的开放源代码软件,它的许可证制度保证了它的健康发展,既不脱离开放源代码
世界,也不因为缺乏资金而夭折。他的创始者就是被人们尊称为 Apache 之父的 Brian Behlendorf,
一个刚刚踏入儿立之年的小伙子。

一、与 HTTP Server 结缘


当 Internet 开始在美国大学流行的时候,Urbana-Champaign 的伊利诺斯大学超级计算机应用
程序国家中心(NCSA)组织了一些研究生开始编写基于 HTTP 通信协议的 Server 端和 Client 端程序。


oss.linuxpk.com 源 2009 年第 2 期 42
知识学堂
Client 端程序叫做 mosaic,也就是是 Netscape 浏览器的前身,之后演变为 Mozilla 浏览器。而
Server 端软件就是最早的 Web Server,也就是现在 Apache HTTP Server 的前身。这个 NCSA
HTTP Server 端完整地实现了 HTTP 协议,实验获得了成功。依利诺斯大学出于学术目的,开发工作没
有继续下去,研究小组也解散了。但是,这里我们应该惊叹开放源代码的伟大:一个大学在实验室中设
计的两套软件因为公开了源代码,在十多年后的今天,都成为了世界上占据软件市场半壁江山的王者。

互联网对 HTTP Server 的需求越来越大,公开源代码的 NCSA HTTP Server 成了进一步发展的


极好起点。很多研究者不断地给它添加功能、增加代码,并对不断出现的 Bug 打补丁。这些后继者中就
有 Brian Behlendorf。

1991 年,Brian 毕业于 La Canada High School,用他自己的话来评价就是“being a good


boy”。之后,他进入了加州大学伯克莱分校计算机专业。大学时代的 Braian 成了一个“激进分子”,
他说自己成天“hanging out with radicals”,也许这为他日后成为开源软件—Apache 的领袖人
物奠定了基础。1994 年底,Brian 告别了仅就读三年的大学,转而去寻找自己的理想。起初,Brian
的工作是建立并维护 Wired 杂志的在线网站。

在那个时期,很多 Web 管理员都依赖于 NCSA HTTP Server,Wired 杂志的网站也是这样。完全


面 向 公 众 领 域 的 NCSA Http Server 上 的 源 代 码 是 开 放 的 , Brian 通 过 编 写 解 决 NCSA Http
Server 问题的补丁,练就了一身本领,同时也在 Internet 上结识了很多软件合作开发者。

二、催生 Apache
在 Internet 上为数众多的程序员给 NCSA 服务器打过补丁之后,NCSA Http Server 的源代码变
得难以阅读。同时,由于没有一个统一的规划和安排,出现了越来越多的重复劳动,随之而来的则是越
多的补丁带来越多的 Bug。显然,NCSA Http Server 需要重新整理,并需要有一个组织来维护。

Brian Behlendorf 在关键时刻站了出来,他带领着 Internet 上志同道合的程序员们组织重写


了整个 NCSA 的程序。最初,这些程序员把自己的工作戏称为“补丁服务器”。

1995 年 2 月,他们完成整个重写工作后,才正式将自己命名为“Apache 小组”。从此,Apache


的标志(见图 2):一片红色的羽毛斜斜地插在“Poweredby Apache”旁,越来越多地出现在 Web 网
页上。在短短几年的时间里,Apache 就攻占了 Web 服务器的半壁江山,成就了 Web 服务器的传奇,并
将其正式命名为“Apache”。闻名世界的“Apache 小组”也就此诞生,Brian Behlendorf 由此被人
们尊称为 Apache 之父。

期间的五年,他先后担任了 Wired 杂志的首席技术工程师和 Organic 在线的 CTO、创始人。他曾


帮助世界 500 强中的数十家企业建立了互联网策略,更为重要的是,他为其亲手创建的 Apache 基金项
目倾注了大量心血。


oss.linuxpk.com 源 2009 年第 2 期 43
知识学堂
1999 年 7 月,Brian Behlendorf 和 O'Reilly & Associates 共同创立了 CollabNet 公司,
成为 Apache 软件的董事长,并扶植 Apache 逐渐走上商业路线。由于 Apache HTTP Server 具有坚
如磐石般的稳定性、丰富的功能和灵活的可扩展性,得到了极大的成功。时至今日,全球有超过 61%的
网站使用的是 Apache HTTP Server。

Apache HTTP Server 的 成 就 甚 至 要 远 远 超 过 Linux 取 得 的 成 就 , 它 很 早 就 运 行 在 AIX 、


Solaris 等大型操作系统上,是企业级 Web Server 的不二选择。这么多年来它久经重负载下的严酷考
验,在稳定性、安全性和支持的功能上还没有出现一个真正意义上的挑战者。

三、Brian Behlendorf 其人

Brian Behlendorf 不是一般人想象中的那种黑客。他束着马尾,带着温柔目光和腼腆笑容。人们


很难把这个小伙子与一段英雄式的传奇经历联系起来。

然而就是他,这个带领 Apache 走上商业化道路,并成为有史以来颇具成功的 HTTP 服务器的人,对


音 乐 有 着 相 当 浓 厚 的 兴 趣 , 而 且 他 还 能 组 织 狂 欢 晚 会 和 在 晚 会 上 做 DJ 。 他 的 Web 站 点
http://hpereal.org 汇集了大量高品质的音乐、狂欢晚会和俱乐部资源。他还喜欢阅读,阅读一些
计 算 机 领 域 以 外 的 知 识 。 除 此 以 外 , Brian 还 是 一 个 作 者 , 他 曾 在 1999 年 为 一 本 叫 做 《 Open


oss.linuxpk.com 源 2009 年第 2 期 44
知识学堂
Sources: Voices from the Open Source Revolution》(《来自开放源代码革命的声音》)
的书撰文。

生活中的 Brian 有着一个可爱的妻子和幸福的家庭,他和妻子是在一个电子邮件列表中结识的 ,


1995 年喜结连理。Brian 喜欢养猫,用他自己的话来说,他是一个“cat person”。

四、开放源代码理念
Brian 曾数次来到中国,并多次接受专访。他一再强调, Apache 的成功应该归功于开放源代码,
这是“自由软件的荣誉”。Apache 证明了 Internet 不可能被任何商业巨人,包括微软彻底占领。因
为 WWW 协议还没有被某一公司‘占有’,Web 将为那些任何公司提供活动的场所。“尽管自由软件运动
目前还不能在桌面软件领域对微软构成威胁,但 Internet 将是自由软件者的杀手锏。因为每一个 Web
主页都是对分散和透明的开放标准的支持和对微软一统天下的回击。”

Brian 和他所崇拜的偶像 Linus Torvalds 一样,致力于打破微软的垄断。他说:“宏观地看软


件产业的发展,也许一个公司在一段时间内可以起到一定作用,但随之而来的技术垄断对软件产业是极
大的伤害。长远看来,开放源代码的开发模式才是未来软件发展的方向。” Internet 使软件合作开发
成为可能,这是人类最伟大的成就之一。

一个成熟的自由软件发展环境对开放源代码事业尤其重要。对于中国的开源软件行业 Brian 建议道,


首先,要突破保守。从文化角度看,亚洲的开源厂商和社区比较保守,有种“我的就是我的”观念,不
愿与人分享,在一定程度上阻碍了开源的发展。其次,要加强交流。也许是出于语言的障碍,亚太地区
与国际开源社区的交流远远不够,这也在一定程度上减缓了社区的发展。厂商也应该与社区多做交流、
多做投资。投资最终将会得到社区的回报,这一点已经在国外得到了很好的印证。此外,还要突出人文
合作。厂商要鼓励雇员去参加开源社区,让他们去了解开源的概念和趋势,这非但不会影响工作,反而
会对公司的未来发展起到积极作用。同时,不同的厂商和专家应该通过社区联合起来,从需求角度出发
对共同的问题进行研究。最后,探索一条符合中国实际的商业化道路对中国开放源代码事业非常重要。

对于国内的开源社区而言,Apache 基金组织的发展模式是可供参考的,但是开源社区建设需要方方
面面的支持,其中很大一部分来自开源厂商的支持。如果厂商能够依靠开源很好地盈利,对于社区的投
资也自然不成问题,这显然是一个双向循环。


oss.linuxpk.com 源 2009 年第 2 期 45
知识学堂

Brian Behlendorf 与他的开源人生


陈杰
我们每天都在数字矩阵中穿行,互联网世界现在俨然成为
了生活中的又一维世界,Apache 就是维系这个世界的重
要引擎之一,展现在我们眼前的每一张网页或者是我们漫
不经心在浏览器上的点击,也许都和 Apache 有关。作为
最流行的 HTTP 服务器之一,Apache 具有庞大的市场占
有率,互联网的流行和它具有非同寻常的亲密关系。不仅
仅如此,Apache 作为一面开源世界的旗帜,它的影响力
也遍及商业系统领域,它可以运行在绝大多数商业操作系
统上,同时它的底层运行机制也被包括 WebSphere 在内
的许多商业服务器软件所借鉴和引用。开源机制所蕴涵着
的生机与魅力,在 Apache 这里有着最完美的体现。“无
所不在”的 Apache 的源头,就是被誉为 Apache 之父的
Brian Behlendorf。早在 2003 年,Brian 就与我有
过一次面对面的接触,当时 Brian 就对中国开源现状留
下了自己的建议和美好的祝福,希望中国的开源社区突破
保守等内在和外在因素的制约。在 oSS 高峰论坛的前一
天下午,我们再次见到了 Brian Behlendof,他对开
源的发展、中国开源的各方各面是否又有了自己新的理解
和看法?

一、Brian Behlendorf 其人
Brian 毕业于加州大学伯克莱分校计算机专业。大学时代的 Brian 就是一个不断思考和不断尝试的
“激进分子”,这为他日后成为开源软件——Apache 的领袖人物奠定了基础。1994 年底,Brian 告别
了仅就读三年的大学,转而去寻找自己的理想。起初,Brian 的工作是建立并维护 Wired 杂志的在线网
站。在这一时期,很多 Web 网站都运行在 NCSA HTTP Server 上,Wired 杂志的也是

如此。完全面向公众领域的 NCSA Hnp Server 是一个开放源码的服务器,Brian 通过编写解决


NCSA Http Server 问题的补丁,练就了一身本领,同时也在 Internet 上结识了很多软件合作开发
者。之后的 1995 年,技术和机遇等因素都已初步成立,一切都水到渠成,载入开源和互联网史册的


oss.linuxpk.com 源 2009 年第 2 期 46
知识学堂
Apache 基金会成立。

1999 年 7 月,Brian 成立 CollabNet 公司,之前 Brian 还是 Organic Online——一家位于美国


旧金山从事 Web 设计和咨询顾问公司的创始人和 CTO。在 Organic Online 的 5 年时间里,Brian 帮
助包括跻身世界 5O0 强在内的许多企业定位其互联网策略。也是在这段时间里,Brian 创建并且捐献出
了 Apache 网 络 服 务 器 项 目 , 创 建 了 VRML( 虚 拟 化 模 型 语 言 ) , 并 且 援 助 了 几 个 IETF 工 作 组
(Internet 工程任务组),特别是 HTTP 标准化方面的工作。昔日校园中的异想天开者成为了信息时代
的风云人物。

现在,Brian 已经从 Apache 基金会的董事主席隐身为 Apache 基金会的成员之一,同时又兼任另


一赫赫有名的开源软件 Mozilla 基金会的董事。

2006 年 1 月,Brian 被世界经济论坛下的全球青年领袖论坛评为全球青年领袖,Brian 成为北美


41 名被认为是对全球未来发展可以起到积极影响的人物之一。

二、梦想依然延续
经过多年的开源工作,Brian 对开源产品的发展和成功有着自己深刻的理解。Brian 认为,开放的
标准对于推进开源有着决定性的作用,比如 HTTP,正是有了这样一个开放的协议标准,才能够使得大学、
研究机构和企业的众多开发人员具有了一个共同努力和创新的平台基础,建立起一个开放并且迅速发展
的互联网。同时,开源产品的成功和开源的可视性过程是分不开的,在开源产品开发的过程中,技术交
流、找出正确的方法和找到缺陷、故障的交流过程,以及用户、开发者和专家之间的交流,都应该是开
放的,这种过程的可视性至关重要。在交流和可视性都能充分实现的同时,开源项目也要注重领导力的
建设,很多人对于产品的发展都有不同的思考和方向,社区的领导力建设就是要保证社区尽可能朝正确
的方向发展而不是各自分头前进。

这些对开源的认识不可能是一开始就能具备的,如果选择了错误的方向,可能就不会有今天 Apache
和那些成功的开源产品。现在回想起来,Brian 仍然觉得自己非常幸运。追忆 10 余年前的 1995 年,他
们当时的团队只有 8 个人在做网络应用软件的开发。幸运的是,这个开发在实现自身价值的同时也帮助
其他人解决了一些问题。这是不是就是 Apache 的发展之初的一个机遇?Brian 这样说:“我记得起步
之初,我们的想法就是如何能够重新去创造开源的标准和软件,去建立一个和以往不同的、新的开源社
区,同时能够增强自身的效率,以及能带来更大的价值,让开源软件自身能够不断提升自己的价值。在
建设开源社区的同时,我们也帮助更多的人解决了问题。“ Brian 回忆,这也成为 Apache 这么长时间
以来的一种发展理念。

Brian 现在所在的 CollabNet 也希望可以延续 Apache 成功的经验,从包括开源在内的各个方面


都进行尝试,他们和一些重要的跨国厂商比如 Novell、Oracle、Intel 和 Sun 等展开合作。


oss.linuxpk.com 源 2009 年第 2 期 47
知识学堂

本刊主编陈杰与 Brian 合影

在采访 Brian 之前,我们在网站论坛里发出了预告,汇集了一些开源参与者和开发者希望与 Brian


交流的话题,比如有关 CollabNet 的版本控制软件 Subve rsion 和 CVS 的区别、Subversion 在
Apache 应用情况等。针对这些问题,Brian 解释说,在开源软件领域,CVS 一直是版本控制管理者的
首选,它本身是一个自由软件,它的开放性技术和对网络操作的支持(允许大量的、不同地域分散的程
序员可以共享他们工作的特性)非常符合开源软件领域合作的精神。但是像许多其他工具一样,CVS 开
始显露出衰老的迹象,而且其数据库也不是很稳定,Subversion 是一个被设计成为 CVS 继任者的新版
本控制系统。设计者通过两个办法来争取现有的 CVS 用户,即使用它构建一个开源软件系统的版本控制
过程,从表象上创造和 CVS 类似的感觉和体验;同时 Subversion 努力弥补 CVS 许多明显的缺陷。
Subversion 可以在多种不同的操作系统上运行,它的主要用户操作界面是基于命令行的,但现在已经
开发出很多可以运行在不同操作系统上的客户端,以及多种开发工具的集成套件。Brian 说,我们有信
心 把 开 源 的 Subversion 做 成 可 以 与 商 业 的 版 本 控 制 软 件 相 抗 衡 的 产 品 , 比 如 Ibm Rational
ClearCase 。 目 前 , 除 了 Apache 以 外 , 包 括 KDE 和 Gnome 在 内 的 众 多 产 品 都 在 应 用


oss.linuxpk.com 源 2009 年第 2 期 48
知识学堂
Subversion,Brian 同时希望 Subversion 在中国能得到更多更广泛的应用。

除了对开源产品的探索,Brian 和他的 CollabNet 公司也希望通过努力在开源的运作模式上做出


更多的探索,尝试在新的服务模式下为开源的发展找出更广阔的空间。比如 CollabNet 现在正在推进的
开放源码开发模式,就是有偿的为那些想把软件代码移植到开放源码的公司服务,从而使那些希望加入
开源,但同时又具有商业软件应用和积累的公司,可以用机会通过开源来实现系统的改进和创新。这一
新的开源模式,目前也已在逐步的开展起来。

谈到对中国开源的建议,Brian 认为,可以选用一种普遍和可行的模式逐步开展起来。开源的社区
和团队建设是一个循序渐进的过程,一些人可能首先是以个人身份在不同公司相同的领域工作,但是对
社区的工作却有着同样的热情。在社区中,他们更有机会实现自己的想法。还有一些专业人员,他们可
以被邀请来参与社区和进行一些合作,在社区中通过交流和尝试,凭借人们的智慧的集中和努力找到一
些开发的原则和方向,推动开源软件的发展。

三、采访手记:
采访快结束的时候,Brian 一边摆弄自己的本本上的 FreeBSD,一边提及自己现在每天编程的时间大概也就是
1/10 左右,遗憾的神情溢于言表。我想,开源世界中不可缺少的也正是像 Brian 这样的人吧,他们目标坚定、
勇于尝试和创新,同时又在脚踏实地地实践自己的梦想,在他们的追求梦想的过程中,也同时为我们创造了那个
多姿多彩的数字世界。

走进 Linux 世界:文件管理
孟庆昌
众所周知,我们上机时是通过用户界面与计算机打交道。用户界面定义了用户与计算机交流的不同
方式,常见的有图形界面、命令界面及程序界面。每个人喜欢什么样的用户界面取决于教育背景及经验
Linux 提供了几种不同的用户界面,其中,命令界面是 Linux 系统下最简单、但也是功能最强的用户界
面。

我们经常要利用文件来存放信息和数据、创建/删除文件、打开/关闭文件、读/写文件等,用户最常
用的操作几乎都与文件相关。

一、常用命令格式
Linux 提供了几百条命令,虽然这些命令的功能不同,但它们的使用方式和规则都是统一的。

Linux 命令的一般格式是:


oss.linuxpk.com 源 2009 年第 2 期 49
知识学堂
命令名 [选项] [参数 1] [参数 2]……

◆命令名由小写的英文字母构成,往往是表示相应功能的英文单词或单词的缩写。例如, date
表示日期;who 表示谁在系统中;cp 是 copy 的缩写,表示拷贝文件等。

◆方括号中的部分表明对命令行来讲不是必须的,即可有可无。例如,可以直接在提示符后面输
入命令 date,显示当前的日期和时间;也可以在 date 命令名后面带有选项和参数,如“date -s
15:30:00”,设置系统时间为下午 3 点 30 分。

◆选项是对命令的特别定义,以“-”开始,多个选项可用一个“-”连起来,如“ls -l -a”
与“ls -la”相同。

◆命令行的参数提供命令运行的信息,或者是命令执行过程中所使用的文件名。通常参数是一些
文件名,告诉命令从哪里可以得到输入,以及把输出送到什么地方。

◆如果命令行中没有提供参数,命令将从标准输入文件(即键盘)接受数据,输出结果显示在标
准输出文件(即显示器)上,而错误信息则显示在标准错误输出文件(即显示器)上。可使用重定
向功能对这些文件进行重定向。

◆命令在正常执行后返回一个 0 值,表示执行成功;如果命令执行过程中出错,没有完成全部工
作,则返回一个非零值(在 Shell 中可用变量$?查看)。在 Shell 脚本中,可用命令返回值作为控
制逻辑的一部分。

◆Linux 操作系统的联机帮助对每个命令的准确语法都做了说明,可以使用命令 man 来获取相


应命令的联机说明,如“man ls”。

二、文件系统概念
磁盘上的文件系统是层次结构的,由若干目录和其子目录组成,最上层的目录称作根(root)目录,
用“/”表示。

1.文件与目录的定义

◆文件系统 是磁盘上有特定格式的一片区域,操作系统通过文件系统可以方便地查寻和访问其
中所包含的磁盘块。

◆文件 文件系统中存储数据的一个命名的对象。一个文件可以是空文件(即没有包含用户数
据),但是它仍然为操作系统提供了其它信息。

◆目录 目录文件中包含许多文件的目录项,每个目录项包含相应文件的名字和 I 节点号。在 I


节点中存放该文件的控制管理信息。目录支持文件系统的层次结构。文件系统中的每个文件都登记
在一个(或多个)目录中。


oss.linuxpk.com 源 2009 年第 2 期 50
知识学堂
◆子目录 被包含在另一个目录中的目录。包含子目录的目录称作父目录。除了 root 目录以外,
所有的目录都是子目录,并且有它们的父目录。root 目录就作为自己的父目录。

◆文件名 用来标识文件的字符串,它保存在一个文件目录项中。

◆路径名 通过斜线字符(/)结合在一起的一个或多个文件名的集合。路径名指定一个文件在分
层树型结构(即文件系统)中的位置。

◆当前工作目录 查看文件系统要使用一个参考点目录,它就称作当前工作目录。

用 ls 命令可以列出当前工作目录中所包含的文件和子目录的名字,这是默认方式。

文件名按照 ASCII 码顺序列出,以数字开头的文件名列在前面,然后是以大写字母开头的文件


名,最后是以小写字母开头的文件名。

2.文件结构

文件是 Linux 操作系统处理信息的基本单位。所有软件都组织成文件。

(1)文件的成分

无论文件是一个程序、一个文档、一个数据库,或者是一个目录,操作系统都会赋予它如下所
示的同样的结构:

◆索引节点 又称 I 节点,在文件系统结构中,包含有关相应文件的信息的一个记录,这些信息
包括文件权限、文件主、文件大小、存放位置、建立日期等。

◆数据 文件的实际内容,它可以是空的,也可以非常大,并且有自己的结构。

(2)命名文件

文件名保存在目录文件中。Linux 的文件名几乎可以由 ASCⅡ 字符的任意组合构成,文件名最


长可多达 255 个字符(某些较老的文件系统类型把文件名长度限制为 14 个字符)。下面的惯例会使
管理文件更加方便。

◆文件名应尽量简单,并且应反映出文件的内容。文件名几乎没有必要超过 14 个字符。

◆除斜线(/)和空字符(ASCII 字符\0)以外,文件名可以包含任意的 ASCⅡ 字符,因为那两


个字符被操作系统当作表示路径名的特殊字符来解释。

◆习惯上允许使用下线符“_”和句点“.”来区别文件的类型,使文件名更易读。但是应避免使
用以下字符,因为对系统的 Shell 来说,它们有特殊的含义。这些字符是:“;”、“|”、“<”、
“>”、“`”、“″”、“′”、“$”、“!”、“%”、“&”、“*”、“?”、“\”、“(”、“)”、“
[”、“]”。文件名应避免使用空格、制表符或其它控制字符。

◆同类文件应使用同样的后缀或扩展名。


oss.linuxpk.com 源 2009 年第 2 期 51
知识学堂
◆Linux 系统区分文件名的大小写,例如,名为 letter 的文件与名为 Letter 的文件不是同一
个文件。

◆以圆点“.”开头的文件名是隐含文件,默认方式下使用 ls 命令并不能把它们在屏幕上显示出
来。同样,在默认情况下,Shell 通配符并不匹配这类文件名。

(3)文件名通配符

为了能一次处理多个文件,Shell 提供了几个特别字符,称为文件名通配符(也称作扩展字符)。
通过使用通配符可以让 Shell 查询与特别格式相符的文件名;用作命令参数的文件或目录的缩写;以简
短的标记访问长文件名;可以用于任意的命令行。

主要的文件名通配符有:

◆星号(*) 与 0 个或多个任意的字符相匹配,例如,le*可以代表 letter、 lease 或 le。


星号匹配的是当前目录下的所有文件,但以点“.”开头的隐含文件除外。.*只与隐含文件匹配。

◆问号(?) 问号只与一个任意的字符匹配,可以使用多个问号。例如, file?与文件 file1


、file2 匹配,但不与 file、file10 匹配;而 name.??? 与文件 name.abc、name.xyz 匹配,
但不与文件 name.ab 匹配。

◆方括号([ ]) 与问号相似,只与一个字符匹配。它们的区别在于,问号与任意一个字符匹配,
而方括号只与括号中列出的字符之一匹配。例如 letter[123]只与文件 letter1、letter2 或
letter3 匹配,但不与文件 letter12 匹配。可以用短横线代表一个范围内的字符,而不用将它们
一一列出。例如,letter[1-3]是 letter[123]的简写形式。但是,要注意范围内的字符都按升
序排列,即[A-Z]是有效的,而[Z-A]是无效的。方括号中可以列出多个范围,如[A-Za-z]可以和
任意大写或小写的字符相匹配。方括号中如果以惊叹号“!”开始,表示不与惊叹号后的字符匹配。

上面介绍的所有符号都可以混和使用,例如,[!A-Z]*.?代表所有不以大写字母开头,但倒数
第二个位置是.的文件名。

文件类型

Linux 操作系统支持普通文件、目录文件、特别文件及符号链接文件等文件类型。

1.普通文件

普通文件也称作常规文件,包含各种长度的字节串。核心对这些数据没有进行结构化,只是作为有
序的字节序列把它提交给应用程序。应用程序自己组织和解释这些数据,通常把它们归并为下述类型之
一:

◆文本文件,由 ASCII 字符构成。例如,信件、报告和称作脚本(Script)的命令文本文件,后者


由 shell 解释执行。


oss.linuxpk.com 源 2009 年第 2 期 52
知识学堂
◆数据文件,由来自应用程序的数字型和文本型数据构成。例如,电子表格、数据库,以及字处理文
档。

◆可执行的二进制程序,由机器指令和数据构成。例如,上面所说的系统提供的命令。

使用 file 命令可以确定指定文件的类型。该命令可以将任意多个文件名当做参数,其一般使用格式
是:

file 文件名 [文件名...]

2.目录

目录是一类特殊的文件,利用它可以构成文件系统的分层树型结构。如同普通文件那样,目录文件
也包含数据;但目录文件与普通文件的差别是,核心对这些数据加以结构化,它是由成对的“I 节点号/
文件名”构成的列表。

◆I 节点号是检索 I 节点表的下标,I 节点中存放有文件的状态信息。

◆文件名是给一个文件分配的文本形式的字符串,用来标识该文件。在一个指定的目录中,任何两项
都不能有同样的名字。

每个目录的第一项都表示目录本身,并以“.”作为它的文件名。每个目录的第二项的名字是“..”,
表示该目录的父目录。

应注意:以“.”开头的文件名表示隐含文件,使用带-a 选项的 ls 命令可以列出它们。

当把文件添加到一个目录中的时候,该目录的大小会增长,以便容纳新文件名。当删除文件时,目
录的尺寸并不减少,而是核心对该目录项做上特殊标记,以便下次添加一个文件时重新使用它。ls 命令
不会列出这些未被使用的项。

3.设备文件

在 Linux 系统中,所有设备都作为一类特别文件对待,用户像使用普通文件那样对设备进行操作,
从而实现设备无关性。但是,设备文件除了存放在文件 I 节点中的信息外,它们不包含任何数据。系统
利用它们来标识各个设备驱动器,核心使用它们与硬件设备通信。

有两类特别设备文件,它们对应不同类型的设备驱动器:

◆字符设备 最常用的设备类型,允许 I/O 传送任意大小的数据,取决于设备本身的容量。使用这种


接口的设备包括终端、打印机及鼠标。

◆块设备 这类设备利用核心缓冲区的自动缓存机制,缓冲区进行 I/O 传送总是以 1KB 为单位。使用


这种接口的设备包括硬盘、软盘和 RAM 盘。

设备文件的一个示例是当前正在使用的终端,tty 命令可以显示出这个文件名。例如:


oss.linuxpk.com 源 2009 年第 2 期 53
知识学堂
$ tty
/dev/tty01

通常,设备文件在/dev 目录之下。

目录及其操作命令

在 Linux 系统中,除根目录(root)以外,所有文件和目录都包含在相应的目录文件中。下面介绍
Linux 系统的目录结构及主要的操作命令。

1.目录结构

Linux 文件系统采用带链接的树形目录结构,即只有一个根目录(通常用“/”表示),其中含有下
级子目录或文件的信息;子目录中又可含有更下级的子目录或者文件的信息。这样一层一层地延伸下去
构成一棵倒置的树,如图 1 所示。

在目录树中,根节点和中间节点(用圆圈表示)都必须是目录,而普通文件和特别文件只能作为“
叶子”出现。当然,目录也可以作为叶子。

(1)用户主目录

当注册进入系统时,主目录就是当前工作目录。主目录往往位于/home 目录之下,并且与注册名相
同,例如,/home/mengqc。通常主目录包含子目录、数据文件,以及用于注册环境的配置文件。

(2)路径名

迄今为止,所看到的文件仅是主目录下的文件。其实,还可以利用路径名访问在层次结构文件系统
中任何地方的文件和目录。


oss.linuxpk.com 源 2009 年第 2 期 54
知识学堂
为了访问文件,必须告诉系统文件在什么地方,即保存在哪个目录下。路径名描述了文件系统中通
向任意文件的路径。有绝对路径和相对路径两种路径名。当为命令指定文件路径名时,需要指定两种路
径形式的一种,不管它有多长或有多复杂。

◆绝对路径名

在 Linux 操作系统中,每一个文件有惟一的绝对路径名,它是沿着层次树、从根目录开始、到达相
应 文 件 的 所 有目录 名连接 而成,各 目录名之间以 斜线字符 ( /)隔开。 例如 ,
/home/mengqc/lib/func/file1。

绝对路径名总是以斜线字符(/)开头,它表示根目录。如果要访问的文件在当前工作目录之上,那
么,使用绝对路径名往往是最简便的方法。

绝对路径名也称作全路径名,使用 pwd 命令可以在屏幕上显示出当前工作目录的绝对路径名。例如:

$ pwd
/home/mengqc

图 2 示出路径名的类型。绝对路径名为/home/mengqc/lib/func/file1;相对路径名(当前目
录是 /home/mengqc/lib)为 func/file1。

◆相对路径名

相对路径名利用相对当前工作目录的路径指定一个文件。


oss.linuxpk.com 源 2009 年第 2 期 55
知识学堂
为了访问当前工作目录或其任意子目录中的文件,可以使用相对路径名。例如,如果工作目录
是/home/mengqc/lib,为了列出目录/home/mengqc/lib/func 中的文件 file1,可以使用下述命
令:
ls -l func/file1

注意,相对路径名不能以斜线字符(/)开头。

为了访问在当前工作目录中和当前工作目录之上的文件,可以在相对路径名中使用特殊目录名“.”
和 “ ..” 。 “ .” 目 录 表 示 本 目 录 自 身 , 而 “ ..” 目 录 代 表 该 目 录 的 父 目 录 。 例 如 , 当 前 工 作 目 录
是/home/mengqc/lib,想列出/home/liu 目录的内容,可使用命令:
ls ../../liu

提醒注意,在每个目录中都有“..”目录文件。在上面示例中,/home/mengqc/lib 的父目录
是/home/mengqc,后者的父目录是/home。也可以连续使用“../” 形式表示父目录,直至根目录。
所以,系统中的每个文件都可以利用相对路径名来命名。

(3) 正确使用路径名

什么情况下使用绝对路径名,什么情况下使用相对路径名,取决于哪种方式涉及到的目录更少。路
径短,不仅键盘输入少,而且节省系统搜索路径的时间,提高执行效率。例如,当前的工作目录
是 /etc/conf/cf.d , 如 果 需 要 访 问 系 统 口 令 文 件 /etc/passwd , 那 么 使 用 绝 对 路 径 名
是/etc/passwd,使用相对路径名是../../passwd。绝对路径名/etc/passwd 涉及的目录有 2 个,
而相对路径名../../passwd 涉及的目录却是 3 个。此时,使用绝对路径名更有效。

但是,如果当前工作目录是/home/mengqc/lib,要访问在 func 目录之下的 file1 文件,那么使


用 绝 对 路 径 名 是 /home/mengqc/lib/func/file1 , 使 用 相 对 路 径 名 是 func/file1 。 绝 对 路 径
名/home/mengqc/lib/func/file1 涉及的目录有 5 个,而相对路径名涉及的目录只有 2 个。此时,
使用相对路径名更有效。

如果不清楚当前工作目录与其它目录之间的关系,那么最好使用绝对路径名。

2.链接文件

Linux 具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的或不同的目
录下。如果在同一目录下,二者必须有不同的文件名,而不用在硬盘上为同样的数据重复备份;如果在
不同的目录下,那么被链接的文件可以与原文件同名,只要对一个目录下的该文件进行修改,就可以完
成对所有目录下同名链接文件的修改。对于某文件的各个链接文件,我们可以给它们指定不同的存取权限,
以控制对信息的共享和增强安全性。

文件链接分为硬链接和符号链接两种形式。

(1) 硬链接


oss.linuxpk.com 源 2009 年第 2 期 56
知识学堂
建立硬链接时,是在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在
多个目录中。图 3 中所示的 m2.c 文件就在目录 mub1 和 liu 中都建立了目录项。

创建硬链接后,已经存在的文件的 I 节点号(inode)会被多个目录文件项使用。一个文件的硬链
接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的链接数为 1。

ln 命令用来创建链接。默认情况下,ln 命令创建硬链接。ln 命令会增加链接数,rm 命令会减少链


接数。一个文件除非链接数为 0,否则不会物理地从文件系统中被删除。

对硬链接有如下限制:

◆不能对目录文件做硬链接。

◆不能在不同的文件系统之间做硬链接。也就是说,链接文件和被链接文件必须位于同一个文件系统
中。

(2)符号链接

符号链接也称软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,
它只是一个小文本文件(如图 3 中的 abc 文件),其中包含它所链接的目标文件的绝对路径名,如图 3 中
虚线箭头所示。被链接文件是实际上包含所有数据的文件。所有读写文件的命令,当它们涉及符号链接
文件时,将沿着链接方向前进,找到实际的文件。

和硬链接不同的是,符号链接确实是一个新文件,它具有与目标文件不同的 I 节点号;而硬链接并没
有建立新文件。

符号链接没有硬链接的限制,可以对目录文件做符号链接,也可以在不同文件系统之间做符号链接。

用“ln -s”命令建立符号链接时,最好源文件用绝对路径名,这样可以在任何工作目录下进行符
号链接。当源文件用相对路径时,如果当前的工作路径和你要创建的符号链接文件所在路径不同时,就
不能进行链接。

请注意,符号链接与源文件或目录之间的区别:

◆删除源文件或目录时,只删除了数据,不会删除链接。一旦以同样文件名创建了源文件,链接将继


oss.linuxpk.com 源 2009 年第 2 期 57
知识学堂
续指向该文件的新数据。

◆在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是 l。

◆符号链接的大小是其链接文件的路径名中的字节数。

◆当用“ls -l”命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如:
lrwxrwxrwx ... 14 Jun 20 10:20 /etc/motd->/original_file

上面代码中,表示“文件大小”的数字“14”恰好表示源文件名“/original_file”由 14 个字符
构成。

ln 命令的一般格式:

ln [选项] 源文件 [目标文件]

链接的对象可以是文件,也可以是目录。如果链接指向目录,用户就可以利用该链接直接进入被链
接的目录,而不用给出到达该目录的一长串路径。这样,即使删除这个链接,也不会破坏原来的目录。

选项-s 表示建立符号链接,而不是硬链接。

注意,符号链接文件不是一个独立的文件,它的许多属性依赖于原文件,所以给一个符号链接文件设
置存取权限是没有意义的。

(3)示例

◆将目录/home/mengqc/mub1 下的文件 m2.c 链接到目录/home/liu 下的文件 a2.c:

$ cd /home/mengqc
$ ln mub1/m2.c /home/liu/a2.c

在执行 ln 命令之前,目录/home/liu 中不存在 a2.c 文件。执行 ln 之后,在/home/liu 目录中才


有 a2.c 这一项,表明 m2.c 和 a2.c 已经链接起来。注意,二者在物理上是同一个文件。利用“ls -l”
命令可以看到链接数的变化。

◆在目录/home/liu 下建立一个符号链接文件 abc,使它指向目录/home/mengqc/mub1:

$ ln -s /home/mengqc/mub1 /home/liu/abc

执行该命令后,/home/mengqc/mub1 代表的路径将存放在名为/home/liu/abc 的文件中。

3.文件或目录的存取权限

使用文件命令对文件进行操作的前提是拥有相应的权限。下面我们介绍如何控制这些权限。

(1)用户和权限

Linux 为每个文件都分配了一个文件所有者,称为文件主,并赋予文件主惟一的注册名。对文件的


oss.linuxpk.com 源 2009 年第 2 期 58
知识学堂
控制取决于文件主或超级用户(root)。文件或目录的创建者对创建的文件或目录拥有特别使用权。

文件的所有关系是可以改变的,可以将文件或目录的所有权转让给其它用户,但只有文件主或 root
用户才有权改变文件的所有关系。文件的所有权的标志是用户 ID(UID)。

利用 chown 命令可以更改某个文件或目录的所有权。例如,超级用户把自己的一个文件 myfile 拷


贝给用户 xu。为了让用户 xu 能够存取这个文件,超级用户(root)应该把这个文件的属主设为 xu,否
则,用户 xu 无法存取这个文件,命令如下:

chown xu myfile

如果改变了文件或目录的所有权,原文件主将不再拥有该文件或目录的权限。

系统管理员经常使用 chown 命令,以便将文件拷贝到另一个用户的目录下以后,让该用户拥有使用


该文件的权限。

(2)用户组

在 Linux 下,每个文件又同时属于一个用户组。当创建一个文件或目录时,系统会赋予它一个用户
组关系,用户组的所有成员都可以使用此文件或目录。

文件用户组关系的标志是 GID。文件的 GID 只能由文件主或超级用户(root)来修改。chgrp 命令


可以改变文件的 GID。

(3)用户和权限

Linux 系统中的每个文件和目录都有存取许可权限,用它来确定谁可以通过何种方式对文件和目录
进行访问和操作。

Linux 系统中规定了四种不同类型的用户,即文件主(owner)、同组用户(group)、可以访问系统
的其它用户(others)、超级用户(root),具有管理系统的特权。

存取权限规定三种访问文件或目录的方式:读(r)、写(w)、可执行或查找(x)。

当用“ls -l”命令显示文件或目录的详细信息时,最左边的一列为文件的存取权限,其中各位的含
义如图 4 所示。

◆文件的存取权限

读权限(r)表示只允许指定用户读取相应文件的内容,而禁止对它做任何的更改操作。将所访问的
文件的内容作为输入的命令都需要有读的权限。例如 cat、more 等。

写权限(w)表示允许指定用户打开并修改文件。例如命令 vi、cp 等。

执行权限(x)表示允许指定用户将该文件作为一个程序执行。


oss.linuxpk.com 源 2009 年第 2 期 59
知识学堂
◆目录的存取权限

在 ls 命令后加上-d 选项,可以了解目录文件的使用权限。

读权限(r)表示可以列出存储在该目录下的文件,即读目录内容列表。这一权限允许 Shell 使用
文件扩展名列出相匹配的文件名。

写权限(w)表示允许用户从目录中删除或添加新的文件,通常只有文件主才有写权限。

执行权限(x)表示允许用户在目录中查找,并能用 cd 命令将工作目录改到该目录。

(4)chmod 命令

chmod 命令用于改变或设置文件或目录的存取权限。只有文件主或超级用户 root 才有权用 chmod


改变文件或目录的存取权限。

根据表示权限的方式不同,该命令有以符号模式改变权限和以绝对方式改变权限两种用法。

◆以符号模式改变权限

chmod 命令的一般格式是:

chmod key 文件名

其中,key 由以下各项组成:

[who] [操作符号] [mode]

操作对象 who 可以是下述字母中的任一个或它们的组合:

u 表 示用户(user),即文件或目录的所有者。

g 表示同组(group)用户,即与文件属主有相同组 ID 的所有用户。

o 表示其它(others)用户。

a 表示所有(all)用户,它是系统默认值。

操作符号可以是下述符号:

+ 添加某个权限。

- 取消某个权限。

= 赋予给定权限并取消其他所有权限(如果有的话)。

mode 所表示的权限可用下述字母的任意组合:

r 表示可读。


oss.linuxpk.com 源 2009 年第 2 期 60
知识学堂
w 表示可写。

x 表示可执行。

X 表示只有目标文件对某些用户是可执行的,或者该目标文件是目录时才追加 x (可执行)属性。

s 在文件执行时把进程的属主或组 ID 置为该文件的文件属主。方式“u+s”设置文件的用户 ID 位,
“g+s”设置组 ID 位。

t 保存程序的文本到交换设备上。

u 与文件属主拥有一样的权限。

g 拥有与文件属主同组用户一样的权限。

o 与其它用户拥有一样的权限。

上面这三部分必须按顺序输入,可以用多个 key,但必须以逗号隔开。例如:

$ chmod a+x ex1

上面代码表示将文件 ex1 的权限改为所有用户都有执行权限。

$ chmod u=r,ug=x ex1

上面这行代码表示将文件 ex1 的权限重新设置为文件主可以读和执行,组用户可以执行,其它用户无


权访问。

◆以绝对方式改变权限

以绝对方式改变权限一般格式是:

chmod mode 文件名

用绝对方式设置或改变文件的存取权限就是用数字“1”和“0”表示图 4 中所示的 9 个权限位, 置为


“1”表示有相应权限, 置为“0”表示没有相应权限。例如,某个文件的存取权限是文件主有读、写和执
行的权限,组用户有读和执行的权限,其它用户仅有读的权限。用符号模式表示就是 rwxr-xr--,用二进
制数字表示就是 111101100。

为了方便记忆和表示,通常将这 9 位二进制数用等价
的 3 个从 0 到 7 的八进制数表示,即从右到左 3 个二进制
数换成一个八进制数。这样,上述二进制数就等价于八进
制数“754”。

也就是说,mode 是以 3 位八进制数字出现的,最左
位表示文件主权限,中间位表示组用户权限,最右位表示
其它用户权限。


oss.linuxpk.com 源 2009 年第 2 期 61
知识学堂
例如,chmod 664 ex1 使文件 ex1 的文件主和同组用户具有读写权限,但其它用户只可读。

◆umask 命令

umask 命令用来设置限制新建文件权限的掩码。其一般格式是:
umask mode

当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时, umask 命令都


被执行,并自动设置掩码 mode 来限制新文件的权限。用户可以通过再次执行 umask 来改变默认值,新的
权限将会把旧的覆盖掉。

利用 umask 命令可以指定哪些权限将在新文件的默认权限中被删除。例如,可以使用下面的命令创
建掩码,取消组用户的写权限以及其他用户的读、写和执行权限:
umask u=,g=w,o=rwx

执行该命令以后,下面所建新文件的文件主权限未作任何改变,而组用户没有写权限,其它用户的所
有权限都被取消。

应注意,在 umask 命令和 chmod 命令中,操作符“=”的作用恰恰相反。在 chmod 中,利用它来设


置指定的权限,而其余权限都被取消;但是在 umask 命令中,它将在原有权限的基础上把指定的权限删除。

不能直接利用 umask 创建一个可执行的文件,用户只能在其后利用 chmod 命令使它具有执行权限。


假设执行了下面命令:
umask u=,g=w,o=rwx

虽然在命令行中,文件主和组用户的执行权限没有被删去,但默认的文件权限还是 640(即 rw-


r-----),而不是 750(rwxr-x---)。但是,如果创建的是目录,或者通过编译程序创建一个可执行文
件,将不受此限制。在这种情况下,文件的执行权限会被设置。

此外,也可以使用八进制数值来设置 mode。在 umask 中所指定的权限表示要删除的权限,所以,


如果一个文件原来的初始权限是 777,那么执行命令 umask 022 以后, 那么该文件的权限将变为 755;
如果该文件原来的初始权限是 666, 那么该文件的权限将变为 644。

使用下面的命令可以检查新创建文件的默认权限:
umask -s

上面命令中,选项-s 表示以字符形式显示当前的掩码。

如果直接输入 umask 命令,不带任何参数,那么将以八进制形式显示当前的掩码。系统默认的掩码是


0022。

文件系统及其安装


oss.linuxpk.com 源 2009 年第 2 期 62
知识学堂
一个硬盘上可以同时存在多个文件系统,每个文件系统占据硬盘的一个独立分区。 Linux 文件系统
可以根据需要随时装卸,从而实现文件存储空间的动态扩充和信息安全。在系统初启时,往往只有一个
文件系统被安装上,即根文件系统,其上的文件主要是保证系统正常运行的操作系统的代码文件,以及
若干语言编译程序、命令解释程序和相应的命令处理程序等构成的文件,此外,还有大量的用户文件空
间。根文件系统一旦安装上,则在整个系统运行过程中是不能卸下的,它是系统的基本部分。

其它的文件系统(例如,由软盘构成的
文件系统)可以根据需要(如从硬盘向软盘
复制文件),作为子系统动态地安装到主系
统中,如图 5 所示。其中,mnt 是为安装子
文件系统而特设的安装节点。

经过安装之后,主文件系统与子文件系
统就构成一个有完整目录层次结构的、容量
更大的文件系统。这种安装可以高达几级。
就是说,若干子文件系统可以并列安装到主
文件系统上,也可以一个接一个地串连安装
到主文件系统上。

已安装的子文件系统也可从整个文件系
统上卸下来,恢复安装前的独立状态。

1.建立文件系统

当硬盘完成分区后,应该在该分区上建立文件系统。这一步工作是通过 mkfs 工具来完成的。例如,


如果需要在分区/dev/hda1 上建立 ext2 文件系统,并检查坏块,应该使用以下命令:

# mkfs -c /dev/hda1

注意,只有 root 用户才能建立或安装/卸下文件系统。

2.安装文件系统

创建文件系统后,使用命令 mount 将该文件系统安装到主文件系统中。命令 mount 有三个主要参数:

◆需要安装的文件系统类型,用“-t fstype”选项来指定,这与 mkfs 中的-t 选项是一样的。

◆所需访问的文件系统所在分区名,通常是位于目录/dev 中的特别设备文件;如果需要安装网络文
件系统时,就使用该服务器上输出的目录名。

◆安装新文件系统的路径名,也就是放置新文件系统的安装点( Mount Point)。通常这是一个空


目录名,并且是专门为安装新文件系统而准备的。在 Linux 系统下,目录/mnt 是常用的文件系统安装


oss.linuxpk.com 源 2009 年第 2 期 63
知识学堂
目录,缺省情况下,CDROM 和软盘驱动器都分别安装在其子目录下。当然,文件系统也可以被安装到其
它空目录中。例如,需要将 MSDOS 文件系统分区/dev/hda1 安装到系统的空目录/dos 中,应该使用以
下命令:

# mount -t msdos /dev/hda1 /dos

3.卸载文件系统

在关闭系统之前,为了保证文件系统的完整性,所有安装的文件系统都必须被卸载。通常
在/etc/fstab 文件中定义的文件系统都能够自动卸载。但是,对于手工 mount 的文件系统,在关闭系
统之前必须手工卸载。有时候也需要在系统工作过程中手工卸载某个文件系统。手工卸载文件系统必须
使用 umount 命令,umount 命令将分区名或分区的安装点作为参数,格式如下:

umount <分区名或分区的安装点>

例如,需要将已经安装到/mnt/floppy 目录下的软盘卸载,可以使用以下命令:

# umount /mnt/floppy

要注意,对于正在使用的文件系统,不能使用 umount 命令卸载。

本讲我们介绍了有关 Linux 系统中常用命令格式、文件和目录的概念、文件类型、目录结构、文件


的存取权限、文件系统的概念及其安装命令等。有关文件操作的命令很多,读者可以通过上机学习各种
命令的使用方法,掌握其基本功能。


oss.linuxpk.com 源 2009 年第 2 期 64
经验技巧

Linux 一句话精彩问答
——网络相关篇(四)
陈绪
《Linux 一句话精彩问答》是 Linux 初学者很好的入门文档,想必很多朋友当时都是边看该文档,边敲打
键盘,玩着 Linux 过来的。
该文档由本刊顾问陈绪主编,迄今已经收录近千个精彩问答。从本期开始将在经验技巧栏目进行连载,
希望能帮助到更多刚接触到 Linux 的朋友们。

2061 minicom 彩色显示


minicom -s 进行 serial port 配置,然后配置好以后,
minicom -o -c on

-o 表示不初始化

-c on 表示 color on

2062 启 用 SELinux 的 Apache 的 配 置 文 件 httpd.conf 里 面 修 改


DocumentRoot 无用或者出现 403 Forbidden 错误

# chcon -u system_u -t httpd_sys_content_t -R website 目录

2063 apache2 的 log 文件位置如何自定义目录


编辑 httpd.conf 里的

ErrorLog /var/log/http/error_log <== 这是管 errorlog 的

CustomLog /var/log/http/access_log common <== 这是管 accesslog 的

2064 更改 eth0 是否混杂模式


网卡 eth0 改成混杂模式:

ifconfig eth0 promisc

关闭混杂模式:

ifconfig eth0 –promisc


oss.linuxpk.com 2009 年第 2 期 65

经验技巧
2065 字符界面下的 ftp 中,下载整个文件夹
1. lftp IP
2. > user username
password
3. > mirror -c --parallel=number remotedir localdir
3a. > help mirror

2066 如何让 ssh 只允许指定的用户登录


方法 1:在/etc/pam.d/sshd 文件中加入

auth required pam_listfile.so item=user sense=allow file=/etc/sshusers


onerr=fail

然后在/etc 下建立 sshusers 文件,编辑这个文件,加入你允许使用 ssh 服务的用户名,重新起动


sshd 服务即可。

方法 2:pam 规则也可以写成 deny 的

auth required pam_listfile.so item=user sense=deny file=/etc/sshusers


onerr=succeed

方法 3:在 sshd_config 中设置 AllowUsers,格式如

AllowUsers a b c

重启 sshd 服务,则只有 a/b/c3 个用户可以登陆

2067 在 Linux 下如何绑定 IP 地址和硬件地址


可以编辑一个地址对应文件,里面记录了 IP 地址和硬件地址的对应关系,然后执行“arp –f 地址
对应文件”。如果没有指定地址对应文件,则通常情况下一默认文件/etc/ethers 为准。地址对应文件
的格式如下:

192.168.0.1 00:0D:61:27:58:93
192.168.0.2 00:40:F4:2A:2E:5C
192.168.0.3 00:0A:EB:5E:BA:8E

2068 已知网络中一个机器的硬件地址,如何知道它所对应的 IP 地址
在 Linux 下,假定要查“00:0A:EB:27:17:B9”这样一个硬件地址所对应的 IP 地址,可以使用以
下命令:


oss.linuxpk.com 2009 年第 2 期 66

经验技巧
# cat /proc/net/arp |grep 00:0A:EB:27:17:B9
192.168.2.54 0x1 0x6 00:0A:EB:27:17:B9 *eth2

另外,还可以用“arp -a”命令查询:

# arp –a|grep 00:0A:EB:27:17:B9


(192.168.2.54)at 00:0A:EB:27:17:B9[ether] on eth2

2069 基于 Apache 的 HTTPD 或 Sendmail 服务在启动时被挂起了,如何


解决此问题
遇到此类问题,请确认/etc/hosts 文件中是否包含如下一行:

127.0.0.1 localhost.localdomain localhost

127.0.0.1 是网络的回路地址

2070 如何使 Linux 系统对 ping 不反应


要使 Linux 对 ping 没反应,也就是使 Linux 系统忽略 ICMP 包。用如下命令可以达到此目的:

# echo 1 > /proc/sys/net/ipv4/icmp-echo-ignore-all

若想恢复,可用如下命令:

# echo 0 > /proc/sys/net/ipv4/icmp-echo-ignore-all

2071 压缩传输文件或目录
传输到远程:tar czf - www | ssh server "tar zxf -"

压缩到远程:tar czf - www | ssh server "cat > www.tar.gz"

解压到远程:ssh server "tar zxf -" < www.tar.gz

解压到本地:ssh server "cat www.tar.gz" | tar zxf -

2072 rsync 同步压缩传输文件或目录


rsync -aze ssh --delete sample_dir/ remote_host:remote_dir/sample_dir/

目录最后的/不能少

2073 无需输入密码使用 ssh 密钥登录


ssh-keygen -b 1024 -t rsa
ssh server "mkdir .ssh; chmod 0700 .ssh"
scp ~/.ssh/id_rsa.pub server:~/.ssh/authorized_keys


oss.linuxpk.com 2009 年第 2 期 67

经验技巧
这样就不在提示密码,直接可以登录 server 了

对文件复制、同步等操作都比较方便

在 ssh_config 里加入这两句就更方便了

ForwardAgent yes
StrictHostKeyChecking no

2074 wget 下载整个网站


wget -t0 -c -nH -np -b -m -P /localdir
http://freesoft.online.sh.cn/mirrors/ftp.redhat.com -o wget.log

2075 命令行下发送带附件的邮件
方法 1. uuencode <in_file> <remote_file> | mail -s "title" mail@address

<in_file> 本地需要作为附件的文件名。

<remote_file> 邮件中的附件文件名,可以和<in_file>不同,其实内容一样。

方 法 2. cat <mailcontent.txt> | mutt -s "title" -a <attachfile>


mail@address

<mailcontent.txt>邮件正文内容。

<attachfile>本地需要作为附件的文件名。

2076 高效率使用 1000 兆网卡


系统加载模块时,可以根据实际情况调节参数,使网卡工作在最佳状态。驱动重新提供的可选择参
数有速率、工作模式、自适应和流控等

在 Linux 下,可以定义合法速率参数为 0、10、100 和 1000。却省为 0,表示网卡工作在自适应状


态下,其他值分别为 10Mb、100Mb 和 1000Mb。

工作模式有全、半双工方式。0 表示适应;1 表示半双工;2 表示全双工。

自适应方式的有效期值范围 0~3。0 表示不设置流控;1 表示仅对 Rx 流控;2 表示仅对 Tz 流控;3


表示对 Rx/Tx 双向流控。缺省为 3

2077 管理 SSH 监听端口


从安全角度考虑,SSH 应当取代 Telnet。目前在 Linux 上使用广泛的 SSH 服务器软件 sshd-
config(默认路径是 /etc/ssh/sshd-config)文件中,Port 22 是 sshd 监听的端口,即为连接


oss.linuxpk.com 2009 年第 2 期 68

经验技巧
到主机时需要使用的端口。使用以下代码可以指定 sshd 监听的接口地址:

ListenAddress 192.168.0.254

这样,就可以避免向未知的用户提供登录服务

2078 不重新编译 httpd,增加动态模块(以 deflate 模块为例)


1 进入 httpd 源代码目录
cd /usr/local/src/httpd-2.2.6

2 执行 httpd 安装后目录中的 bin/apxs 文件

/usr/local/apache2/bin/apxs -cia modules/metadata/mod_deflate.c

3 重新启动 httpd

service httpd restart

2079 不重新编译 php,增加动态模块(以 mbstring 模块为例)


1 进入 php 源代码目录中的 mbstring 所在目录

cd /usr/local/src/php-5.2.4/ext/mbstring/

2 执行 php 安装后目录中的 bin/phpize 文件

/usr/local/php/bin/phpize

3 进入 php 源代码目录

cd /usr/local/src/php-5.2.4/

4 执行上述目录中的 configure 文件

./configure --prefix=/usr/local/src/php-5.2.4/ext/mbstring --with-php-


config=/usr/local/php/bin/php-config
5 make; make install

将 mbstring.so 安 装 到 /usr/local/php/lib/php/extensions/no-debug-non-zts-
20060613/中

6 编辑 php.ini,加入一行

extension=mbstring.so

7 重新启动 httpd

service httpd restart


oss.linuxpk.com 2009 年第 2 期 69

经验技巧
2080 让 apache 解析.perl 脚本
一个 perl 的文件,是 perl 写的模块,如果放在 web 上,人家要么直接下载或者用记事本直接打开。
为了保护代码不被 COPY,需要在 httpd.conf 中,加入 AddHandler cgi-script .perl 一行,然
后重启 apache

善用 GNU Make 做开发


肖文鹏
在编写小型的 Linux 应用程序时,一般情况下只会有少数几个源文件。这样程序员能够很容易地理
清它们之间的包含和引用关系。但随着软件项目逐渐变大,对源文件的处理也将变得越来越复杂起来。
此时单纯依赖手工方式进行管理的做法就显得有些力不从心了。为此,Linux 专门为软件开发提供了一
个自动化管理工具 GNU make。通过它,程序员可以很方便地管理软件编译的内容、方式和时机,从而
使程序员能够把主要精力集中在代码的编写上。

make 将整个软件项目的代码分开放在几个小的源文件里,在改动其中一个文件的时候,可以只对该
文件重新进行编译,然后重新连接所有的目标文件。对于那些由许多源文件组成的大型软件项目来说,
全部重新进行编译需要花费很长的时间,而采用这种项目管理方法则可以极大地提高工作效率,让原本
复杂繁琐的开发工作变简单。

Makefile 文件

GNU make 是一个用来控制软件构建过程的自动工具,程序员通过定义构建规则来控制代码的创建


过程。这些规则通常定义在一个名为 Makefile 的文件中。Makefile 被用来告诉 make 编译哪些文件、
怎样编译和何时编译。Makefile 中的每条规则事实上都包含如下一些内容:

◆ 目标(target)是 make 最终需要创建的对象;

◆ 依赖(dependency)通常是一个列表,指明编译目标时需要用到的其它文件;

◆ 命令(command)也是一个列表,指明从依赖文件创建出目标对象所需要执行的命令。

虽然 Makefile 中的目标通常都是可执行程序,但事实上可以是诸如文本文件和 HTML 页面等任何


内容,甚至能够用来测试或设置环境变量。Makefile 中的命令则不仅可以是编译命令,还可以是任何
Shell 命令。

先来看一个例子。假设整个软件项目是由 control.c、io.c 和 main.c 三个源文件所构成的,编


写的 Makefile 文件内容如下:


oss.linuxpk.com 2009 年第 2 期 70

经验技巧
all : program
program : control.o ui.o main.o
gcc -o program control.o ui.o main.o
control.o : control.c
gcc -Wall -c -o control.o control.c
ui.o : ui.c
gcc -Wall -c -o ui.o ui.c
main.o : main.c
gcc -Wall -c -o main.o main.c
clean :
rm -f program *.o

在将上述 Makefile 文件与源文件保存到同一目录之后,就可以在命令行中输入“ make”命令来编


译整个项目了。make 在执行过程中,首先会查找到 Makefile 文件第一条规则中的目标,即上述文件中
的 all。根据设定好的规则,该目标需要依赖于 program。由于 all 并不是一个已经存在的文件,所以
每次在 make 被调用的时候,显然都需要先检查 program。继续往下不难发现,program 目标是依赖于
control.o、ui.o 和 main.o 的。这就意味着如果其中任何一个比生成的可执行文件要新,那么就需
要重新构建可执行文件 program,否则就没有必要执行这一步了。

在 Makefile 文件的其余部分,为每一个中间生成的目标文件都专门定义了一条规则,用来指明创
建过程中它们与 C 源文件的依赖性。也就是说,如果一个特定的 C 源文件被更新了,那么与之对应的目
标文件也必须重新生成。下面是 make 在构建项目过程中的输出结果:

#make
gcc -Wall -c -o control.o control.c
gcc -Wall -c -o ui.o ui.c
gcc -Wall -c -o main.o main.c
gcc -o program control.o ui.o main.o

不难看出,首先是 C 源文件被编译成目标文件,然后才是目标文件被连接成最终的可执行文件。由
于相互间依赖关系的制约,这些步骤会被有条不紊地依次执行。最终可执行文件要求目标文件都被更新
过,而每个目标文件则要求 C 源文件被更新过。如果此时重新执行“make”命令,会出现下面的结果。
原因是程序已经被编译过了,并且没有做过任何改动,所以就没有再编译的必要了:

# make
make: Nothing to be done for 'all'.

如果只是改变了其中的部分文件,那么 make 会自动检测出需要对哪些源文件重新进行编译,并连接


成最后的可执行文件。用户可以参考下面的过程:

#touch main.c
# make
gcc -Wall -c -o main.o main.c


oss.linuxpk.com 2009 年第 2 期 71

经验技巧
gcc -o program control.o ui.o main.o

当 make 检测到 main.o 目标时,发现 main.c 文件已经被更新,于是 main.o 文件必须被重新编译,


相应地 program 需要被重新连接。make 的魅力就在于能够自动进行条件检测,并采取适当的行动。它
永远也不会去编译那些没有改动过的源文件,因此大大节省了在开发大型软件项目时所浪费在编译上的
时间。

变量

为了简化 Makefile 的编写,make 引入了变量。变量实际上是为文本串在 Makefile 中定义一个


便于记忆的名称。变量的定义和应用与 Linux 的环境变量一样,变量名大写,变量一旦定义之后,就可
以通过将变量名用圆括号包起来,并在前面加上“$”符号来进行引用。

变量一般都在 Makefile 的头部定义。如果变量的值发生了改变,很显然只需在一个地方进行修改


就可以了,从而大大简化了 Makefile 的维护。下面是将前面用到的 Makefile 利用变量进行改写后的
结果:

OBJS = control.o ui.o main.o


CC = GCC
CFLAGS = -Wall
all : program
program : $(OBJS)
$(CC) $(OBJS) -o program
control.o : control.c
$(CC) $(CFLAGS) -c -o control.o control.c
ui.o : ui.c
$(CC) $(CFLAGS) -c -o ui.o ui.c
main.o : main.c
$(CC) $(CFLAGS) -c -o main.o main.c
clean :
rm -f program $(OBJS)

make 将其使用的变量细分为两类:递归展开变量和简单展开变量。递归展开变量在被引用时会逐层
展开,即如果在展开式中包含了对其它变量的引用,则这些变量也会被展开,直到没有需要被展开的变
量为止。假设变量 TOPDIR 和 SUBDIR 的定义如下:

TOPDIR = /home/xiaowp
SUBDIR = $(TOPDIR)/project

此时变量 SUBDIR 的值在解析时会被正确地展开为/home/xiaowp/project,但对于下面的定义:


oss.linuxpk.com 2009 年第 2 期 72

经验技巧
TOPDIR = /home/xiaowp
SUBDIR = $(TOPDIR)/project
SUBDIR = $(SUBDIR)/src

很清楚,希望得到的结果是/home/xiaowp/project/src,但实际并非如此。SUBDIR 在引用时
会被递归展开,从而陷入一个无限循环当中,make 能够检测到这个问题并报告如下错误:

*** Recursive variable 'SUBDIR' references itself (eventually). Stop

为了避免这个问题,可以使用简单展开变量。与递归展开变量在引用时展开不同,简单展开变量是
在定义处展开的,并且只展开一次,从而消除了变量的嵌套引用。在定义时,其语法与递归展开变量有
细微的不同:

TOPDIR = /home/xiaowp
SUBDIR := $(TOPDIR)/project
SUBDIR += /src

SUBDIR 在第一次定义时使用“:=”将其值设置为“/home/xiaowp/project”,而在第二次定义
时 则 使 用 “ +=” 在 已 有 的 基 础 上 添 加 “ /src” , 这 样 就 使 得 SUBDIR 的 最 终 值 变 为
“/home/xiaowp/project/src”。许多程序员在 Makefile 中只使用简单展开变量,以避免可能出
现的错误。

除了用户自定义变量之外,在 Makefile 中还可以使用环境变量、自动变量和预定义变量。使用环


境变量的方法相对来讲比较简单,make 在启动时会自动读取系统当前已经定义了的环境变量,并且会创
建与之具有相同名称和数值的变量。需要注意的是,如果用户在 Makefile 中定义了相同名称的变量,
那么用户自定义变量将会覆盖同名的环境变量。

此外,make 还提供了一些预定义变量和自动变量,但它们看起来都不如自定义变量那么直观。之所
以称为自动变量是因为 make 会自动用特定的、熟知的值来替换它们,表 1 给出了常用的部分自动变量。

利用 make 的自动变量和预定义变量,可以简化前面给出的那个 Makefile 文件:

OBJS = control.o ui.o main.o


CC = GCC
CFLAGS = -Wall
all : program
program : $(OBJS)
$(CC) $(OBJS) -o $@
control.o : control.c
$(CC) $(CFLAGS) -c -o $@ $<
ui.o : ui.c


oss.linuxpk.com 2009 年第 2 期 73

经验技巧
$(CC) $(CFLAGS) -c -o $@ $<
main.o : main.c
$(CC) $(CFLAGS) -c -o $@ $<
clean :
$(RM) program $(OBJS)

伪目标

在 Makefile 中,并不是所有的目标都对应于磁盘上的文件。有的目标存在只是为了形成一条规则 ,
从而完成特定的工作,并不生成新的目标文件,这样的目标称为伪目标。它并不是真正意义上的目标文
件,只是为了满足 Makefile 的语法规则而存在的。

在已经给出的 Makefile 文件中,最后一个目标 clean 就是伪目标。它规定了 make 应该执行的命


令。当 make 处理到目标 clean 时,会先查看其对应的依赖对象。由于 clean 没有任何依赖对象,所以
make 会认为该目标是最新的而不会执行任何操作。为了编译这个目标体,必须手工执行如下命令:
# make clean

作为惯例,clean 目标一般用于删除最终生成的可执行文件和在编译过程中产生的所有目标文件。
问题是,如果恰巧有一个名为 clean 的文件存在时该怎么办呢?此时因为在这个规则里没有任何依赖对
象,所以目标文件肯定是最新的,规则中的命令无论如何也不会被执行,即使用命令“ make clean”也
无济于事。解决这一问题的方法是标明该规则中的目标是伪目标,并不对应于任何文件。这可以通
过.PHONY 目标实现。它告诉 make 不检查规则的目标文件是否存在于磁盘上,也不查找任何隐含规则,
而直接假设指定的目标需要被更新就行了。在使用了.PHONY 之后,前面的给出的 Makefile 文件就将
变为如下的内容:

OBJS = control.o ui.o main.o


CC = GCC
CFLAGS = -Wall
all : program
program : $(OBJS)
$(CC) $(OBJS) -o $@
control.o : control.c
$(CC) $(CFLAGS) -c -o $@ $<
ui.o : ui.c
$(CC) $(CFLAGS) -c -o $@ $<
main.o : main.c
$(CC) $(CFLAGS) -c -o $@ $<
.PHONY : clean
clean :


oss.linuxpk.com 2009 年第 2 期 74

经验技巧
$(RM) program $(OBJS)

其它规则

除了可以在 Makefile 中明确指定规则(显示规则)之外,make 还维护了一整套隐式规则。隐式规


则可以在用户没有完整地给出某些命令的时候,自动执行恰当的操作。隐式规则最大的好处是可以简化
Makefile 的编写和维护,例如前面给出的 Makefile 运用隐式规则后可以简化为如下内容:

OBJS = control.o ui.o main.o


program : $(OBJS)
$(CC) $(OBJS) -o $@
.PHONY : clean
clean :
$(RM) program $(OBJS)

默认目标 program 依赖于 control.o、ui.o 和 main.o 三个目标文件,但 Makefile 中并没有


给出怎样编译生成这些目标的规则。此时 make 就会使用隐式规则,对每一个名为 foo.o 的目标文件,
找到与之对应的源代码 foo.c,然后使用“gcc -c foo.c -o foo.o”命令来生成对应的目标文件。

除了系统预定义的隐式规则外,在 Makefile 中还可以定义自己的隐式规则,这种规则也被称为模


式规则。模式规则类似于普通规则,但它的目标必须含有“%”这一通配符,以便能与任何非空字符相匹
配,与目标对应的依赖文件中也必须使用通配符,例如下面的规则:

%.o : %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@

上面的规则将告诉 make 所有形为 foo.o 的目标文件,都应该根据指定的命令从源文件 foo.c 编译


而来。

小结

在构建大型的软件项目时,make 是一个优秀的持续集成工具。它对于软件开发过程来讲非常重要。
本文介绍了基本的 make 命令,以及如何编写简单实用的 Makefile 文件,相信用户已经能够使用 make
来管理软件项目的创建和维护过程了。

Autotools 快速开发
宋国伟
程序开发需要注意的细节很多,不仅需要用户有良好的技术,而且还需要开发利器帮助用户化难为


oss.linuxpk.com 2009 年第 2 期 75

经验技巧
易。在此介绍 AutoTools 工具在程序开发中的几个应用,帮助用户了解它是如何在程序开发中发挥作用,
有什么便利之处。

源码路径

这里要研究的是在工程中如何指定源程序代码的路径。假设在 hello1 目录中,用户不将 hello.c


直接放在测试目录下,而是放在下一级子目录 src 下。一般开源软件的源码都这么设置。那么应该如何
处理呢?首先在 hello1 目录下编辑 configure.ac 文件,内容如下:

AC_INIT(src/hello.c)
AM_INIT_AUTOMAKE(hello, 0.1)
AC_PROG_CC
AC_OUTPUT(Makefile src/Makefile)

其中第四行指定在执行 configure 脚本后的两个输出文件,即当前目录下的 Makefile 和 src 目


录下的 Makefile。

再编辑 Makefile.am 文件,内容如下:

SUBDIRS = src

它用来指定用户的工程目录中都包含哪些子目录。目前用户只有一个源程序目录 src,在以后的工
程中用户可以加入文档目录 doc、测试目录 test 等。

然后在 src 目录中编辑 Makefile.am 文件,内容如下:

bin_PROGRAMS = hello
hello_SOURCES = hello.c

编辑 完成 ,确 认无 误后 ,在 工程 目录 中依 次执 行“ aclocal”、 “ autoconf”和 “ automake


--add-missing --foreign -copy” 命 令 , 至 此 用 户 已 经 完 成 了 此 工 程 的 创 建 。 执 行
“./configure”来生成 Makefile 文件。最后执行“make”命令在 src 目录中生成可执行文件 hello

多个输出结果

如果源程序代码有两个 C 源文件在同一个目录假定为 hello2 里面,并且输出两个可执行文件,那


么这种情况应该如何处理呢?

首先进入 hello2 子目录,像上面的例子那样,创建源代码目录 src。在 src 目录下编辑两个 C 源


程序 hello.c 和 oh.c。下一步在目录 hello2 中编辑 configure.ac 文件,内容如下:

AC_INIT(src/hello.c)


oss.linuxpk.com 2009 年第 2 期 76

经验技巧
AM_INIT_AUTOMAKE(hello, 0.2)
AC_PROG_CC
AC_OUTPUT(Makefile src/Makefile)

与 hello1 工程中的 configure.ac 的内容相仿,不同的是这次的版本变了。

再 编 辑 Makefile.am 文 件 , 这 里 与 hello1 工 程 的 一 模 一 样 。 需 要 指 出 的 是 src 目 录 下 的


Makefile.am 文件要做出改动,内容如下:

bin_PROGRAMS = hello oh
hello_SOURCES = hello.c
oh_SOURCES = oh.c

需要注意的是多个输出结果在 bin_PROGRAMS 后指出就可以了。但每个可执行文件都要指定源代码


文件,hello 对应的源代码为 hello.c,oh 对应的源代码为 oh.c。

编辑完相关配置文件后,就可以依次执行“aclocal”、“autoconf”和“automake”了。

打包方式

用户正常用的源程序代码打包后,文件名的后缀是.tar.gz。这是最常用的打包方式。但它的压缩
率并不是最高的。压缩率更好的压缩方式是采用 bz2 格式。前提是保证用户的系统安装有 bzip2 压缩工
具。

将 hello2 工程的源码复制到本工程目录的 src 目录下,在工程目录中编辑 Configure.ac 文件,


内容和 hello2 中的 Configure.ac 一样。

在工程目录中的 Makefile.am 文件内容如下:

AUTOMAKE_OPTIONS = dist-bzip2
SUBDIRS = src

子目录中的 Makefile.am 文件内容与上一工程中的完全相同。再执行“aclocal”等相关命令创建


工程,接着在用“make”编译完成后,可以用“make dist”来打包,最后会在工程目录下出现两个压
缩包 hello-0.2.tar.gz 和 hello-0.2.tar.bz2。

高效使用 Linux 系统的几个习惯


越来越多的人愿意尝试 linux 系统,这些习惯也许会令你事半功倍,找到其中的乐趣……


oss.linuxpk.com 2009 年第 2 期 77

经验技巧
刚开始使用 Linux 时你也许会感到不习惯,许多高手也都有这样的经历。毕竟,曾经他们也都是新
手。但是现在 Linux 团体已经在为新用户提供有关指南,手册和基本的技术文档来使他们尽快上手方面
做的相当出色。三年前我首次接触 Linux,很多人通过论坛,在线聊天和电子邮件等帮助我,这些“企
鹅”们真是相当热心。

对此,我深感应该为无私帮助我的团体做一些力所能及的贡献,我应该给刚使用 Linux 的朋友写点


什么。这里我编译了七个当我刚入门时别人告诉我的七个习惯。我相信如果你运用了这七个习惯,在你
使用 Linux 时你会感觉更安全,便利,学到很多实用的东西,最终你会发现使用 Linux 也是那样的愉悦。

一、不要以根用户登录
这是你首先应该注意和遵守的。以前我们可能已经习惯了 Windows,我们一直以为权限越高越好,
所以我们喜欢以管理员帐户登录。但是这也许是 Windows 经常被病毒骚扰和不安全的重要原因,现在太
多人都在用根用户登录。

权限越高责任越大,拥有管理员权限你需要谨慎对待你所做的任何事情,但是错误还是不可避免。
我记得我最先使用的是 Suse Linux,有很多事项需要管理但是没有图像用户界面我不知道如何做,于
是我天真的注销并登录到了根用户的图形界面。根用户图形界面的默认壁纸是一排排的高亮地雷。这些
符号在我脑海里盘旋,我很小心没有终于没有做错什么。

那么以根用户登录有那些危险呢?

1.你可以想象你在没有保护网的情况下打秋千,会不会感到害怕?这和你以根用户登录的道理是一
样的,你会不经意间毁掉你的系统。

2.你可能会不小心运行恶意软件。通常在根
用户模式下任何程序的启动都默认给予所有权限
的。

3.如果你的系统有安全漏洞没有修补,你就
可能被别人完全控制。

4.这是使用 Unix 的惯例,除非必须那么不


要轻易在根用户下运行任何东西。如果一个不是
自己触发的程序请求根用户权限,那么你就要小
心了。

通常,我们不必登录根用户界面,下面是几
条技巧: 图1

*使用“sudo”或“su”命令,并在你完成管理时退出


oss.linuxpk.com 2009 年第 2 期 78

经验技巧
*如果你不知道如何使用命令行完成这些,你可以使用“gksu”或“kdesu”。比如,按 Alt+F2 并
打出“gksu nautilus”,并在你完成时马上结束程序

二、合理命名文件
Linux 环境下,你可以按照你的意愿命名文件,但是以下两点是不允许的: 1)“/”是根目录专用
的;2)不要使用无效字符。其它的在技术上都是可以的,但是为了避免以后的麻烦这里有几点经验你可
以遵守:

*经验上,只使用字母、数字、连接符(-)和下划线(_)

*避免使用美元符($),括弧和百分号(%)等特殊字符,这些字符对于 shell 有着特殊意义,可


能会引起冲突

*避免使用空格,在终端上处理含有空格的文件是很愚蠢的。你可以用连接符或下划线来代替空格。

这些已经基本上成为我的习惯,并且我在使用 Windows 和 MAC 时也不自觉的遵守这些准则。

三、将 home 目录放在一个独立的分区上


这样做会给你很大的灵活性。将 home 目录放在一个独立的分区上,可以在你重装系统甚至升级你
的整个版本而不会丢失你的数据和个人设置。你可以在根目录下重新设置你所需要的而保留 home 分区。
现在你可以将你需要的随意分类而不必担心的数据和个人设置,你可以随时使用它们。

如果碰巧在你安装系统之后才懂得这一点,不要失望。你可以按照 Carthik 在 ubantu Blog 上的


一片名为“Move /home to it’s own partition”的指导道一步步的完成。

图2

四、合理的灾难管理
Linux 是比较强大和稳定的,但是任何系统都会崩溃。在你 CTRL-ALT-DEL,重启之前,你应该学
会如何处理你遇到的事故。你需要知道如何在不重启的情况下轻松恢复你的系统。我个人认为这种情况
分为几个不同的层次,如果前一步不奏效的话请转向下一步:

1.我将“强制关闭”程序放在我的任务栏上,如果哪个程序出现问题可以单击“强制关闭”图标并
结束该程序

2.如果上一步不奏效,调用终端,用“ps -A”,记下那个出问题程序的进程号,结束它

3.使用“killall”命令,比如“killall firefox-bin”


oss.linuxpk.com 2009 年第 2 期 79

经验技巧
4.如果整个图形界面都冻结,你已经不可能调用终端,按 CTRL-ALT-F1,这样可以转到另一个终
端,这样你就可以使用步骤 2 和 3 来结束出问题的程序

5.还不行的话,你可以使用 CTRL-ALT-Backspace 组合重启你的图形界面,但是要注意的是,这


样会结束你正在运行的 GUI 程序

6.调用 CTRL-ALT-F1 再使用 CTRL+ALT+DEL 这样不会立即重启你的系统,只是按照正常模式重启,


所以是安全的(假定你想要重启并且 CTRL-ALT-F1 可用)。

7.如果这一切都不管用,也不用记着按强制重启按钮,尝试 Raise a Skinny Elephant

图3

五、主动尝试
你可能对朋友给你设置设计的当前版本和配置很满意,这适合你。这很好,但是可能会有比这更好
的。为什么不尝试下 Linux 和开源的灵活性和丰富性呢?不要害怕尝试不同的程序,图形管理和桌面。
实验直到你找到最适合你的。你可以这样想,你现在居住在世界上最好的地方,但是环球旅行也不会有
什么坏处的?或许说不定你还可以找到一个更好的居住地,就算不能,你旅行的时间也值得好好品味,
你对其它国家,它们的人和风俗,思考方式了解的更多,最终说不定你会喜欢上这样的尝试。你尝试的
任何新事物都会增加你的学识,一年左右的时间你将会对 Linux 和开源世界有一个很好的把握。

我个人曾尝试过至少 10 种分配方式,4 种桌面和五种桌面管理。我最近的文章《 Etymology of


A Distro》使我对更多的分配感兴趣,象 Zenwalk, Foresight 和 Sabayon 等。朋友,主动尝试,
这对你有好处。

在你尝试之前,你可以参考以下几点:

*设置好你感觉最舒服的系统,因为你需要一个时刻工作的系统。这样你就可以按照下面的几点进行
尝试

*你可以利用虚拟机来完成。安装一个 Vmware 或 Virtualbox,用它们来做测试

*如果你不知道如何运用虚拟机,你可以设置一个独立分区来尝试


oss.linuxpk.com 2009 年第 2 期 80

经验技巧
*最好的,你可以用一个设置好的 PC,再有一个当作测试用。这样你就可以随心所欲的进行尝试

图4

六、熟悉使用你的命令行
虽然我不提倡你一定要学习命令行,有太多的文章一直强调学习命令行的重要性。这里我假设你已
经知道他的重要性并且已经知道怎样用它处理一些简单的管理任务。你可以按照指导书和手册做相应的
配置。但是不要一味的复制和粘贴。就是说,不止不加思考的执行命令许多有自由天性的人劝诫你要尽
量深刻的理解每条命令行的含义,它能做什么。为什么手册上这样做的,而不是那样做?理解你所做步骤
的基本原理。

过了一段时间你就会感觉你已经能很好的运用它了。

最后你会发现它仅仅是种伪装的语言。每条命令可能只是一些词语的首字母,或一个单词的缩写。
你希望你的狗理解“Spike fetch ball”这样的长句,为什么不尝试理解下“sudo mv /file1
/file2”那?

七、为你的用武之地做些准备
我有过很多这样的经历,当有个朋友请求我在他的电脑上做些东西,但是由于他所选择的操作系统
会出现糗事。有时候我有急事但是仅有的电脑有很挫的操作系统。不必痛苦,随身戴上你的 linux 系统,
不管是存储在 U 盘或 CD 上。有相当多的 linux 版本很方便的,象 Knoppix, DSL 和 Puppy Linux 等。

很惭愧,事实上我自己还没用上这个习惯,我想我也需要言行一致。

图5


oss.linuxpk.com 2009 年第 2 期 81

经验技巧

Linux 管理员新手易犯的十种错误
落英缤纷
对于许多人来说,迁移到 Linux 是一件乐事。而对于另外一些人来说,这简直是一场恶梦。尤其是
对于一些刚步入 Linux 管理大门的管理员来说,如果不避免一些常见的错误,就容易给单位的网络或系
统带来安全风险。本文将为帮助这些新手们避免这些错误提供一些建议。

一、不经过严格审核,从多种渠道下载安装各种类型的应用程序
乍看起来,这也许是一个不错的主意。如果你在运行 Ubuntu,你会知道包管理程序使用的是.deb
软件包。不过,你找到的许多应用程序是以源代码的形式提供的。没有问题吗?这些程序安装后也许能
够正常工作。但是你为什么不能随意安装程序呢?道理很简单,如果你以源的形式安装了程序,那么,
你的软件包管理系统将无法跟踪你所安装的东西。因此,在程序包 A(以源的形式安装)依赖于程序包
B(从一个.deb 库安装的),而软件包 B 是从更新管理器更新的时候,会发生什么事情呢?程序包 A 可能
运行,也可能无法运行。不过,如果程序包 A 和 B 都从.deb 库安装的话,二者都能运行的机会将更高。
此外,在所有的程序包都来自于同样的二进制类型时,更新程序包将更为容易。

二、忽视更新
这并不是说 Linux 管理员缺乏技巧。不过,许多 Linux 管理员在运行了 Linux 之后,以为日后就
无事可做了,以为它安全可靠。其实,新的更新可以为一些新的漏洞打上补丁。维持更新可以在一个易
受损的系统与一个安全的系统之间构造分水岭。Linux 的安全来自于不断地维护。为了实现安全性,为
了使用一些新的特性和稳定性,任何管理员都应当跟上 Linux 的更新步伐。

三、糟糕的口令
记住,root 的口令通常是 linux 王国的关键。所以为什么要让 root 的口令那么容易被破解呢?
保障你的用户口令的健壮性至关重要。如果你的口令比较长,且难于记忆,可将这个口令存放在一个可
被加密的位置。在需要这个口令时,可用解密软件解开这个口令使用之。

四、将服务器启动进入到 X
在一台机器是专用服务器时,你可能会想到安装 X,这样一些管理任务就会简单一些。不过,这并不
意味着用户需要将服务器启动进入到 X。这样会浪费珍贵的内存和 CPU 资源。相反地,你应当在级别 3
上停止启动过程,进入命令行模式。这样做不但会将所有的资源留给服务器,而且还会防止泄露机器的
机密。要登录到 X,用户只需要以命令行方式登录,然后键入 startx 进入到桌面。


oss.linuxpk.com 2009 年第 2 期 82

经验技巧
五、随意许可,原因是不理解许可
如果对许可配置不当,就会给黑客留下机会。处理许可问题的最简单方法是使用所谓的 RWE 方法,
即 Read(读取)、Write(写入)、Execute(执行)。假设你想让一个用户能够读取一个文件但不能写
入文件。为此,你可以执行:

chmod u+w,u-rx 文件名

一些新用户可能会看到一个错误,说他们没有使用文件的许可,因此他们就使用了:Chmod 777
文件名,以为这样能够避免问题。但这样做实际上会导致更多的问题,因为它给了文件的可执行的权限
记住这一点:777 将一个文件的读取、写入、执行的许可给了所有用户,666 将一个文件的读取、写入
权限给了所有用户,而 555 将文件的读取、执行权限给了所有用户,还有 444、333、222、111 等等。

六、没有备份关键的配置文件
许多管理员都有这样的体会,在升级到某个 X 版本,如 X11 之后,却发现新版本破坏了你的
xorg.conf 配 置 文 件 , 以 至 于 你 再 也 无 法 使 用 X ? 建 议 你 在 升 级 X 之 前 , 先 对 以 前
的 /etc/x11/xorg.conf 作 一 个 备 份 , 以 免 升 级 失 败 。 当 然 , X 的 升 级 程 序 会 设 法 为 用 户 备 份
xorg.conf 文件,但它却在/etc/x11 目录内备份。即使这种备份看起来不错,你最好还是自己做一个
备份吧。笔者的一个习惯是将其备份到/root 目录中,这样,用户就可以知道只有根(root)用户能够
访问此文件。记住,安全第一。这里的方法也适用于其它的关键备份,如 Samba、Apache、Mysql 等。

七、以根用户身份登录
这是一种很危险的错误。如果用户需要根特权来执行或配置一个应用程序,可以在一个标准的用户
账户中使用 su 切换到 root 用户。登录到 root 为什么不是一件好事儿?在用户以标准用户身份登录时,
所有正在运行的 X 应用程序仍拥有仅限于此用户的访问权。如果用户以根用户身份登录,X 就拥有了
root 的许可。这就会导致两个问题,一、如果用户由 GUI 犯了一个大错,这个错误对系统来说,有可能
是一个巨大的灾难。二、以根用户的身份运行 X 使得系统更易于遭受攻击。

八、没有安装一个可正常运行的内核
你可能不会在一台机器上安装 10 个以上的内核。但你需要更新内核,这种更新并没有删除以前的内
核。你是怎么做的呢?你一直保持使用最近的可正常工作的内核。假设你目前正常工作的内核是
2.6.22,而 2.6.20 是备份内核。如果你更新到 2.6.26,而在新内核中一切都工作正常,你就可以删
除 2.6.20 了。

九、逃避使用命令行


oss.linuxpk.com 2009 年第 2 期 83

经验技巧
恐怕很少有人愿意记住那么多命令。在大多数情况下,图形用户界面是许多人的最爱。不过,有时,
命令行使用起来更加容易、快捷、安全、可靠。逃避使用命令行是 Linux 管理的大忌。管理员至少应当
理解命令行是如何工作的,至少还要掌握一些重要的管理命令。

十、忽视日志文件
/var/log 的存在是有理由的。这是存放所有的日志文件的唯一位置。在发生问题时,你首先需要
看 一 下 这 里 。 检 查 安 全 问 题 , 可 看 一 下 /var /log/secure 。 笔 者 看 的 第 一 个 位 置
是/var/log/messages。这个日志文件保存着所有的一般性错误。在此文件中,你可以得到关于网络、
媒体变更等消息。在管理一台机器时,用户可以使用某个第三方的应用程序,如 logwatch,这样就可
以创建为用户创建基于/var/log 文件的各种报告。

这十个错误在一些 Linux 管理员新手们中是很常见的。避免这些错误将会使管理工作更加安全、稳


健。

简略讲解对 Linux 服务器的四种入侵级别


随着 Linux 企业应用的扩展,有大量的网络服务器使用 Linux 操作系统。Linux 服务器的安全性
能受到越来越多的关注,这里根据 Linux 服务器受到攻击的深度以级别形式列出,并提出不同的解决方
案。

对 Linux 服务器攻击的定义是:攻击是一种旨在妨碍、损害、削弱、破坏 Linux 服务器安全的未授


权行为。攻击的范围可以从服务拒绝直至完全危害和破坏 Linux 服务器。对 Linux 服务器攻击有许多种
类,本文从攻击深度的角度说明,我们把攻击分为四级。

攻击级别一:服务拒绝攻击(DoS)

由于 DoS 攻击工具的泛滥,及所针对的协议层的缺陷短时无法改变的事实,DoS 也就成为了流传最


广、最难防范的攻击方式。

服务拒绝攻击包括分布式拒绝服务攻击、反射式分布拒绝服务攻击、 DNS 分布拒绝服务攻击、FTP


攻击等。大多数服务拒绝攻击导致相对低级的危险,即便是那些可能导致系统重启的攻击也仅仅是暂时
性的问题。这类攻击在很大程度上不同于那些想获取网络控制的攻击,一般不会对数据安全有影响,但
是服务拒绝攻击会持续很长一段时间,非常难缠。

到目前为止,没有一个绝对的方法可以制止这类攻击。但这并不表明我们就应束手就擒,除了强调
个人主机加强保护不被利用的重要性外,加强对服务器的管理是非常重要的一环。一定要安装验证软件


oss.linuxpk.com 2009 年第 2 期 84

经验技巧
和过滤功能,检验该报文的源地址的真实地址。另外对于几种服务拒绝可以采用以下措施:关闭不必要
的服务、限制同时打开的 Syn 半连接数目、缩短 Syn 半连接的 time out 时间、及时更新系统补丁。

攻击级别二:本地用户获取了他们非授权的文件的读写权限

本地用户是指在本地网络的任一台机器上有口令、因而在某一驱动器上有一个目录的用户。本地用
户获取到了他们非授权的文件的读写权限的问题是否构成危险很大程度上要看被访问文件的关键性。任
何本地用户随意访问临时文件目录(/tmp)都具有危险性,它能够潜在地铺设一条通向下一级别攻击的
路径。

级别二的主要攻击方法是:黑客诱骗合法用户告知其机密信息或执行任务,有时黑客会假装网络管
理人员向用户发送邮件,要求用户给他系统升级的密码。

由本地用户启动的攻击几乎都是从远程登录开始。对于 Linux 服务器,最好的办法是将所有 shell


账号放置于一个单独的机器上,也就是说,只在一台或多台分配有 shell 访问的服务器上接受注册。这
可以使日志管理、访问控制管理、释放协议和其他潜在的安全问题管理更容易些。还应该将存放用户
CGI 的系统区分出来。这些机器应该隔离在特定的网络区段,也就是说,根据网络的配置情况,它们应
该被路由器或网络交换机包围。其拓扑结构应该确保硬件地址欺骗也不能超出这个区段。

攻击级别三:远程用户获得特权文件的读写权限

第三级别的攻击能做到的不只是核实特定文件是否存在,而且还能读写这些文件。造成这种情况的
原因是:Linux 服务器配置中出现这样一些弱点:即远程用户无需有效账号就可以在服务器上执行有限
数量的命令。

密码攻击法是第三级别中的主要攻击法,损坏密码是最常见的攻击方法。密码破解是用以描述在使
用或不使用工具的情况下渗透网络、系统或资源以解锁用密码保护的资源的一个术语。用户常常忽略他
们的密码,密码政策很难得到实施。黑客有多种工具可以击败技术和社会所保护的密码。主要包括:字
典 攻 击 ( Dictionary attack ) 、 混 合 攻 击 ( Hybrid attack ) 、 蛮 力 攻 击 ( Brute force
attack)。一旦黑客拥有了用户的密码,他就有很多用户的特权。密码猜想是指手工进入普通密码或通
过编好程序的正本取得密码。一些用户选择简单的密码 —如生日、纪念日和配偶名字,却并不遵循应使
用字母、数字混合使用的规则。对黑客来说要猜出一串 8 个字生日数据不用花多长时间。

防范第三级别的攻击的最好的防卫方法便是严格控制进入特权,即使用有效的密码。

主要包括密码应当遵循字母、数字、大小写(因为 Linux 对大小写是有区分)混合使用的规则。

使用象“#”或“%”或“$”这样的特殊字符也会添加复杂性。例如采用"countbak"一词,在它后面
添加“#$”(countbak#$),这样您就拥有了一个相当有效的密码。

攻击级别四:远程用户获得根权限


oss.linuxpk.com 2009 年第 2 期 85

经验技巧
第四攻击级别是指那些决不应该发生的事发生了,这是致命的攻击。表示攻击者拥有 Linux 服务器
的根、超级用户或管理员许可权,可以读、写并执行所有文件。换句话说,攻击者具有对 Linux 服务器
的全部控制权,可以在任何时刻都能够完全关闭甚至毁灭此网络。

攻击级别四主要攻击形式是 TCP/IP 连续偷窃,被动通道听取和信息包拦截。TCP /IP 连续偷窃,


被动通道听取和信息包拦截,是为进入网络收集重要信息的方法,不像拒绝服务攻击,这些方法有更多
类似偷窃的性质,比较隐蔽不易被发现。一次成功的 TCP/IP 攻击能让黑客阻拦两个团体之间的交易,
提供中间人袭击的良好机会,然后黑客会在不被受害者注意的情况下控制一方或双方的交易。通过被动
窃听,黑客会操纵和登记信息,把文件送达,也会从目标系统上所有可通过的通道找到可通过的致命要
害。黑客会寻找联机和密码的结合点,认出申请合法的通道。信息包拦截是指在目标系统约束一个活跃
的听者程序以拦截和更改所有的或特别的信息的地址。信息可被改送到非法系统阅读,然后不加改变地
送回给黑客。

TCP/IP 连续偷窃实际就是网络嗅探,注意如果您确信有人接了嗅探器到自己的网络上,可以去找一
些进行验证的工具。这种工具称为时域反射计量器(Time Domain Reflectometer,TDR)。TDR 对
电磁波的传播和变化进行测量。将一个 TDR 连接到网络上,能够检测到未授权的获取网络数据的设备。
不过很多中小公司没有这种价格昂贵的工具。对于防范嗅探器的攻击最好的方法是:

1、安全的拓扑结构。嗅探器只能在当前网络段上进行数据捕获。这就意味着,将网络分段工作进行
得越细,嗅探器能够收集的信息就越少。

2、会话加密。不用特别地担心数据被嗅探,而是要想办法使得嗅探器不认识嗅探到的数据。这种方
法的优点是明显的:即使攻击者嗅探到了数据,这些数据对他也是没有用的。

特别提示:应对攻击的反击措施

对于超过第二级别的攻击您就要特别注意了。因为它们可以不断的提升攻击级别,以渗透 Linux 服
务器。此时,我们可以采取的反击措施有:

首先备份重要的企业关键数据。

改变系统中所有口令,通知用户找系统管理员得到新口令。

隔离该网络网段使攻击行为仅出现在一个小范围内。

允许行为继续进行。如有可能,不要急于把攻击者赶出系统,为下一步作准备。

记录所有行为,收集证据。这些证据包括:系统登录文件、应用登录文件、
AAA ( Authentication 、 Authorization 、 Accounting , 认 证 、 授 权 、 计 费 ) 登 录 文 件 ,
RADIUS(Remote Authentication Dial-In User Service)登录,网络单元登录(Network
Element Logs)、防火墙登录、HIDS(Host-base IDS,基于主机的入侵检测系统)事件、NIDS
(网络入侵检测系统)事件、磁盘驱动器、隐含文件等。收集证据时要注意:在移动或拆卸任何设备之


oss.linuxpk.com 2009 年第 2 期 86

经验技巧
前都要拍照;在调查中要遵循两人法则,在信息收集中要至少有两个人,以防止篡改信息;应记录所采
取的所有步骤以及对配置设置的任何改变,要把这些记录保存在安全的地方。检查系统所有目录的存取
许可,检测 Permslist 是否被修改过。

进行各种尝试(使用网络的不同部分)以识别出攻击源。

为了使用法律武器打击犯罪行为,必须保留证据,而形成证据需要时间。为了做到这一点,必须忍
受攻击的冲击(虽然可以制定一些安全措施来确保攻击不损害网络)。对此情形,我们不但要采取一些
法律手段,而且还要至少请一家有权威的安全公司协助阻止这种犯罪。这类操作的最重要特点就是取得
犯罪的证据、并查找犯罪者的地址,提供所拥有的日志。对于所搜集到的证据,应进行有效地保存。在
开始时制作两份,一个用于评估证据,另一个用于法律验证。

找到系统漏洞后设法堵住漏洞,并进行自我攻击测试。

网络安全已经不仅仅是技术问题,而是一个社会问题。企业应当提高对网络安全重视,如果一味地
只依靠技术工具,那就会越来越被动;只有发挥社会和法律方面打击网络犯罪,才能更加有效。我国对
于打击网络犯罪已经有了明确的司法解释,遗憾的是大多数企业只重视技术环节的作用而忽略法律、社
会因素,这也是本文的写作目的。

名词解释:拒绝服务攻击(DoS)

DoS 即 Denial Of Service,拒绝服务的缩写,可不能认为是微软的 DOS 操作系统!DoS 攻击即


让目标机器停止提供服务或资源访问,通常是以消耗服务器端资源为目标,通过伪造超过服务器处理能
力的请求数据造成服务器响应阻塞,使正常的用户请求得不到应答,以实现攻击目的。

Linux 下的飞鸽传书:信使 iptux 软件简介


不知你是否使用过“飞鸽传书”这款 Windows 软件?“哇,对着 Linux 用户问这个问题,不是很
无聊吗?”

嗯~今天要介绍的是这款通吃 Linux/Windows 的信使软件:iptux。从此,Linux 用户可以非常


方便地与同局域网的 Linux/Windows 机器无缝地共享文件、发送消息。

iptux 是一款由国人开发的,基于 GTK+2,兼容“飞鸽传书”协议的局域网通信、文件传输软件。


因为基于 GTK+,所以它也是跨平台的。

它的项目主页是:http://code.google.com/p/iptux/,你可以在上面下载到源码包、二进制
包和 deb 安装包。

oss.linuxpk.com 开开
源 2009 年第 2 期 87

经验技巧
它非常易用,直接会将当前网段的所有计算机列出,那个 QQ 即是 Windows 机器。

选择局域网的那台 Windows 机器,就可以直接跟它聊天了。发送消息,还支持图片。

如果 Windows 机器上刚好开着“飞鸽传书”的话,它就会收到了。

然而 iptux 还有更强大的地方,不仅支持发送文件、发送目录,还支持设置共享。

因为是局域网,发送文件非常快!我刚点接收,就发送了十几 MB 的文件,截图就只有 100%了。不


过好像有个 Bug,已完成和长度都是未知?。

非常简单易用、而且功能强大的一款软件,如果你需要的话,赶紧去下载试用吧。

Linux 下时间的查看
刘敏
在图形界面下,Linux 下的用户对于时间的查看基本和 Windows 一样方便。对于使用字符界面的用
户来说,如果想查看时间其实也很简单,熟练使用下面介绍的几条命令,就能够让时间在指间自由闪现。

显示年月

在 Linux 中,用户可以通过“cal”命令来显示某年某月。示例如下:

1.显示 2004 年 04 月,命令如下:


#cal 04 2004
April 2004
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

此外,“cal”命令还有两个参数如下:

- j 显示出给定月中的每一天是一年中的第几天(从 1 月 1 日算起)。

- y 显示出整年的日历。

2.显示 2004 年 04 月的每一天是一年中的第几天,命令如下:


#cal - j 04 2004


oss.linuxpk.com 2009 年第 2 期 88

经验技巧
April 2004
Sun Mon Tue Wed Thu Fri Sat
92 93 94
95 96 97 98 99 100 101
102 103 103 104 105 106 107
108 109 110 111 112 113 114
115 116 117 118 119 120

显示日期和时间

在字符界面下,除了可以显示年月之外,用户还可以使用“date”命令的功能是显示和设置系统日
期和时间。需要特别说明的是,只有超级用户才能用“ date”命令设置时间,一般用户只能用“date”
命令显示时间。

1.用指定的格式显示时间,命令如下:

# date '+The date of today is:%x ,it is:%X '

The date of today is:14/04/04 ,it is:10:33:01

其中% x 显示日期的格式(mm/dd/yy),% X 显示时间的格式(%H:%M:%S)。

2.设置时间为上午 9 点 16 分,命令如下:
# date -s 09:16:00

3.设置时间为 2004 年 4 月 14 日,命令如下:


# date -s 991128

其中-s 是设置日期的参数。

另外,“date”命令还有许多有用的参数,能够帮助用户随心所欲地设定和显示时间,例如%H 显示
小时(00..23)、%M 显示分(00..59)、%p 显示出 AM 或 PM、%S 显示秒(00..59)和%Z 显示时区
等。熟能生巧,经常将这些命令参数运用起来,相信会有更多意想不到的精彩等着大家。

在 Ubuntu 环境下安装 Gvim 及添加菜单项目


在 Linux 环境下,许多人习惯于使用 vi 完成编辑功能,今天向大家介绍 vim,也是一种编辑器,
它完全兼容 vi。可使用性绝对不比 vi 差,更好的是它的图形界面,是无需占用一个终端的!当然它支
持多个操作系统。vim 也有像 windows 上的 IDE 一样的功能啊,而且用起来非常的方便,看来很多的时
候不是 Linux 下没有这个功能,而是你不知道或者不会用!原来 Linux 从来就不是给懒人们准备的!


oss.linuxpk.com 2009 年第 2 期 89

经验技巧
现面就一步步的好好学习一下 vi 的真正使用方法吧。首先我们在 Ubuntu 8.10 下来安装 Gvim 并
添加菜单项目。

安装个 vim 全功能版,要不然没有语法着色功能。


sudo apt-get install vim-full

安装完成后可以在终端下输入 vim,在命令行环境下使用 vim。

现在我们把它添加到菜单项目。Ubuntu 菜单项保存在/usr/share/applications 目录下,那现


在终端输入下列代码:
sudo vim /usr/share/applications/gvim.desktop

新建/打开 gvim 菜单项配置文件,打开的文件已经有内容了。我们先来看看菜单配置文件的结构,


大体上,所有的菜单配置文件都是这样的。我们在[Desktop Entry]下添加
Name=Gvim

Comment[zh_CN]=Gvim 编辑器
Exec=gvim
Icon=/usr/share/pixmaps/gnome-word.png
Terminal=false
X-MultipleArgs=false
Type=Application
Categories=Application;Development;
Encoding=UTF-8
StartupNotify=true
Name=GVim Text Editor

好了,可以看到 GVim Text Editor 了吗?

在 shell 里输入中文
用户要想确定在所使用的 Linux 系统上有没有加上中文环境,具体可分为以下两步来进行。

首先对于 bash,需要在/etc/profile 或$HOME/.profile 文件里加上下面的语句:


stty cs8 -istrip
stty pass8

执行下面的命令:


oss.linuxpk.com 2009 年第 2 期 90

经验技巧
#export LANG =C
#export LC_CTYPE=iso-8859-1

然后,在$HOME/.inputrc 里加上以下语句:
set convert -meta off
set output -meta on

修改之后,用户不必重新启动系统,只需新开一个虚拟终端,或者注销后再登录即可生效。


oss.linuxpk.com 2009 年第 2 期 91

企业应用

Linux 流量控制提高网络效率
王政
目前很多企业的内部局域网已经建立,很多还在局域网基础上建立了企业内部的 MIS 系统和邮件服
务器等,甚至在系统中开展了视频点播等数据流量较大的业务。

企业内部网络有足够的带宽可以使用。但是,一般在企业接入 Internet 的部分都是一个有限的流


量。为了提高网络的使用质量,保证用户按照网络中业务设计的要求来使用整个网络的带宽,可以从流
量控制服务器的角度分析、优化 Linux 系统,给企业服务带来便利和高效。

流量控制的基本实现

Linux 操作系统中的流量控制器(TC)主要是通过在输出端口处建立一个队列来实现流量控制。
Linux 从 2.1.105 版内核开始支持流量控制,使用时需要重新编译内核。Linux 流量控制的基本实现
可简单地由图 1 来描述。从图 1 可以看出,内核是如何处理接收包、如何产生发送包,并送往网络的。

图 1 Linux 流量控制的基本实现

接收包进来后,由输入多路分配器(Input De-Multiplexing)进行判断选择:如果接收包的目
的是本主机,那么将该包送给上层处理;否则需要进行转发,将接收包交到转发块( Forwarding
Block)处理。转发块同时也接收本主机上层(TCP、UDP 等)产生的包。转发块通过查看路由表,决定
所处理包的下一跳。然后,对包进行排列以便将它们传送到输出接口( Output Interface)。Linux
流量控制正是在排列时进行处理和实现的。


oss.linuxpk.com 2009 年第 2 期 92

企业应用

图 2 流量控制基本框架

如图 2 所示,Linux 流量控制主要由三大部分来实现:

◆ 队列规则(Queue Discipline)

◆ 分类(Classes)

◆ 过滤器(Filters)

因此,Linux 流量控制主要分为建立队列、建立分类和建立过滤器三个方面。其基本实现步骤为:

(1)针对网络物理设备(如以太网卡 eth0)绑定一个队列;

(2)在该队列上建立分类;

(3)为每一分类建立一个基于路由的过滤器。

流量控制的具体使用

现在对流量控制(TC)的具体使用做个介绍。首先是 TC 的总用法。

TC 命令,内核支持需设置 QoS support、QoS and/or fair queueing = y。用法为:


oss.linuxpk.com 2009 年第 2 期 93

企业应用
#tc [ OPTIONS ] OBJECT { COMMAND | help }

其中
OBJECT := { qdisc | class | filter }
OPTIONS := { -s[tatistics] | -d[etails] | -r[aw] }

下面分别介绍 TC 中队列、分类和过滤器的用法。

1.TC 中队列(qdisc)的用法

队列的使用中,内核支持需设置 QoS support、QoS and/or fair queueing = y。用法为:


#tc qdisc [ add | del | replace | change | get ] dev STRING
[ handle QHANDLE ] [ root | ingress | parent CLASSID ]
[ estimator INTERVAL TIME_CONSTANT ]
[ [ QDISC_KIND ] [ help | OPTIONS ] ]
#tc qdisc show [ dev STRING ] [ingress]

其中
QDISC_KIND := { [p|b]fifo | tbf | prio | cbq | red | etc. }
OPTIONS := ... try tc qdisc add <desired QDISC_KIND> help

CBQ 队 列 ( qdisc cbq ) 的 使 用 中 , 内 核 支 持 需 设 置 QoS support 、 QoS and/or fair


queueing、CBQ packet scheduler、Rate estimator = y,用法为:
... cbq bandwidth BPS avpkt BYTES [ mpu BYTES ]
[ cell BYTES ] [ ewma LOG ]

2.TC 中分类(class)的用法

分 类 的 使 用 中 , 内 核 支 持 需 设 置 QoS support 、 QoS and/or fair queueing 、 Packet


classifier API = y。用法为:
#tc class [ add | del | change | get ] dev STRING
[ classid CLASSID ] [ root | parent CLASSID ]
[ [ QDISC_KIND ] [ help | OPTIONS ] ]
#tc class show [ dev STRING ] [ root | parent CLASSID ]

其中
QDISC_KIND := { prio | cbq | etc. }
OPTIONS := ... try tc class add <desired QDISC_KIND> help

TC CBQ 分类(class cbq)的用法为:


... cbq bandwidth BPS rate BPS maxburst PKTS [ avpkt BYTES ]
[ minburst PKTS ] [ bounded ] [ isolated ]


oss.linuxpk.com 2009 年第 2 期 94

企业应用
[ allot BYTES ] [ mpu BYTES ] [ weight RATE ]
[ prio NUMBER ] [ cell BYTES ] [ ewma LOG ]
[ estimator INTERVAL TIME_CONSTANT ]
[ split CLASSID ] [ defmap MASK/CHANGE ]

3.TC 中过滤器(filter)的用法

过滤器的使用中,内核支持需设置 QoS support、QoS and/or fair queueing 、Packet


classifier API = y。用法为:
#tc filter [ add | del | change | get ] dev STRING
[ pref PRIO ] [ protocol PROTO ]
[ estimator INTERVAL TIME_CONSTANT ]
[ root | classid CLASSID ] [ handle FILTERID ]
[ [ FILTER_TYPE ] [ help | OPTIONS ] ]
#tc filter show [ dev STRING ] [ root | parent CLASSID ]

其中
FILTER_TYPE := { rsvp | u32 | fw | route | etc. }
FILTERID := ... format depends on classifier, see there
OPTIONS := ... try tc filter add <desired FILTER_KIND> help

TC U32 过滤器(filter u32)的用法:


... u32 [ match SELECTOR ... ] [ link HTID ] [ classid CLASSID ]
[ police POLICE_SPEC ] [ offset OFFSET_SPEC ]
[ ht HTID ] [ hashkey HASHKEY_SPEC ]
[ sample SAMPLE ]

或 u32 divisor DIVISOR

其中
SELECTOR := SAMPLE SAMPLE ...
SAMPLE := { ip | ip6 | udp | tcp | icmp | u{32|16|8} } SAMPLE_ARGS
FILTERID := X:Y:Z

TC FW 过滤器(filter fw)的用法:
... fw [ classid CLASSID ] [ police POLICE_SPEC ]

其中
POLICE_SPEC := ... look at TBF
CLASSID := X:Y


oss.linuxpk.com 2009 年第 2 期 95

企业应用
流量控制应用实例

假设目前某企业面临的是一个复杂的网络环境。在该环境中,既包括了 100Mb 的局域网,也包括了


微波或 802.11 的无线链路网络,其网络拓扑如图 3 所示。在这样的环境下,保证业务数据的流量,实
现流量控制,需要对各局域网的传输及业务服务进行控制。

系统采用 Linux 2.2.14 版内核来支持 QoS。首先需要重新编译内核。运行 make config,进行


如下设置:

EXPERIMENTAL _OPTIONS = y
Class Based Queueing (CBQ) = y
QoS and/or fair queueing = y
CBQ packet scheduler = y
Rate estimator= y
Packet classifier API = y

编译生成新内核:
#make dep
#make clean
#make bzImage

Linux 操作系统中,流量控制器(TC)在输出端口处建立一个队列进行流量控制,控制的方式基于
目的 IP 地址、目的子网的网络号及端口号,或者基于源 IP 地址、源子网的网络号及端口号。

流量控制器 TC 的基本功能模块为队列、分类和过滤器。Linux 内核中支持的队列有 Class Based


Queue、Token Bucket Flow、CSZ、First In First Out、Priority、TEQL、SFQ、ATM、
RED。这里讨论的队列与分类都是基于 CBQ(Class Based Queue),过滤器则是基于 U32 和 FW。

配置和使用流量控制器 TC,除了建立队列、分类、过滤器和路由外,还需要对现有的队列、分类、
过滤器和 ipchains 进行监视。


oss.linuxpk.com 2009 年第 2 期 96

企业应用

基于如图 3 所示的网络环境,现对中心流量控制服务器进行简单描述,如图 4 所示。

eth1 的配置

假设远端无线网卡(eth1)的 IP 地址为 172.16.32.196,在其上建立一个 CBQ 队列,控制所有


从无线网卡发出的数据包。假设包的平均大小为 1000 字节,包间隔发送单元的大小为 8 字节,可接收冲


oss.linuxpk.com 2009 年第 2 期 97

企业应用
突的发送最长包数目为 20 字节。

这里采用源地址及源端口号进行控制。假如有三种类型的流量需要控制:

◆ 由本主机发出的业务数据包,源端口为 7001:7004,流量带宽控制在 100Kb;

◆由本地局域网发出的数据包,IP 地址为 192.168.1.26,流量带宽控制在 1.1Mb;

◆发往子网 1,子网号为 192.168.1.0,子网掩码为 255.255.255.0,流量带宽控制在 1Mb。

1.建立队列

一般情况下,针对一个网卡只需建立一个队列。

将一个 CBQ 队列绑定到网络物理设备 eth1 上,其编号为 1:0,实际带宽为 10Mb,包的平均大小为


1500 字节,包间隔发送单元的大小为 8 字节,最小传输包大小为 64 字节。
#tc qdisc add dev eth1 root handle 1:0 cbq bandwidth 10Mbit cell 8 avpkt
1500 mpu 64

2.建立分类

分类建立在队列之上。一般情况下,针对一个队列需建立一个根分类,然后在其上建立子分类。对
于分类,按其分类的编号顺序起作用,编号小的优先。一旦符合某个分类匹配规则,通过该分类发送数
据包,则其后的分类不再起作用。

(1)创建根分类 1:1,分配带宽为 10Mb。


#tc class add dev eth1 parent 1:0 classid 1:1 cbq bandwidth 10Mbit rate
10Mbit allot 1514 cell 8 weight 1Mbit maxburst 1 avpkt 1500 bounded

该队列的最大可用带宽为 10Mb,实际分配的带宽为 10Mb,可接收冲突的发送最长包数目为 1 字节,


最大传输单元(加 MAC 头)大小为 1514 字节,优先级别为 8,包的平均大小为 1500 字节,包间隔发送
单元的大小为 8 字节,相应于实际带宽的加权速率为 10Mb/s。

(2)创建分类 1:2,其父分类为 1:1,分配带宽为 8Mb。


#tc class add dev eth1 parent 1:1 classid 1:2 cbq bandwidth 10Mbit rate
1200Kbit allot 1514 cell 8 weight 120Kbit maxburst 1 avpkt 1500 bounded
isolated

该队列的最大可用带宽为 10Mb,实际分配的带宽为 1.2Mb,可接收冲突的发送最长包数目为 1 字


节,最大传输单元(加 MAC 头)大小为 1514 字节,优先级别为 1,包的平均大小为 1500 字节,包间隔
发送单元的大小为 8 字节,相应于实际带宽的加权速率为 120Kb/s,独占带宽且不可借用未使用带宽。

(3)创建分类 1:10,其父分类为 1:2,分配带宽为 100Kb。


#tc class add dev eth1 parent 1:2 classid 1:10 cbq bandwidth 10Mbit rate
100Kbit allot 1514 cell 8 weight 10Kbit maxburst 1 avpkt 1500


oss.linuxpk.com 2009 年第 2 期 98

企业应用
该队列的最大可用带宽为 10Mb,实际分配的带宽为 1.2Mb,可接收冲突的发送最长包数目为 1 字
节,最大传输单元(加 MAC 头)大小为 1514 字节,优先级别为 1,包的平均大小为 1500 字节,包间隔
发送单元的大小为 8 字节,相应于实际带宽的加权速率为 10Kb/s。

(4)创建分类 1:20,其父分类为 1:2,分配带宽为 1.1Mb。


#tc class add dev eth1 parent 1:2 classid 1:20 cbq bandwidth 10Mbit rate
1100Kbit allot 1514 cell 8 weight 110Kbit maxburst 1 avpkt 1500

该队列的最大可用带宽为 10Mb,实际分配的带宽为 1.1Mb,可接收冲突的发送最长包数目为 1 字


节,最大传输单元(加 MAC 头)大小为 1514 字节,优先级别为 1,包的平均大小为 1500 字节,包间隔
发送单元的大小为 8 字节,相应于实际带宽的加权速率为 110Kb/s。

3.建立过滤器

过滤器主要服务于分类。一般只需针对根分类提供一个过滤器,然后为每个子分类提供一个
ipchains 映射。

(1)应用 FW 分类器到分类 1:10,父分类编号为 1:0,过滤协议为 IP,标志号(handle)为 4,


过滤器为基于 ipchains。
#tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 4 fw classid
1:10

(2)应用 FW 分类器到分类 1:20,父分类编号为 1:0,过滤协议为 IP,过滤器为基于 ipchains



#tc filter add dev eth1 protocol ip parent 1:0 prio 100 handle 5 fw
classid 1:20

4.建立 ipchains 映射

该路由与前面所建立的路由映射一一对应。

(1)由本机发出的电话数据包通过分类 1:10 转发(分类 1:10 的速率 100Kb/s)


#ipchains -A output -p udp -i tun0 -s 202.168.200.188/32 7001:7004 -t
0x01 0x10 -m 4

(2)由局域网发出的数据包通过分类 1:20 转发(分类 1:20 的速率 1.1Mb/s)


#ipchains -A output -i tun0 -s 192.16.188.0/24 -m 5

注意,一般对于流量控制器所直接连接的网段,建议使用 IP 主机地址流量控制限制,不要使用子网
流量控制限制。如一定需要对直连子网使用子网流量控制限制,则在建立该子网的 ipchains 映射前,
需将原先由系统建立的 ipchains 删除,才可完成相应步骤。

5.监视


oss.linuxpk.com 2009 年第 2 期 99

企业应用
主要包括对现有队列、分类、过滤器和路由状况的监视。

(1)显示队列的状况

简单显示指定设备(这里为 eth1)的队列状况:
#tc qdisc ls dev eth1
qdisc cbq 1: rate 10Mbit (bounded,isolated) prio no-transmit

详细显示指定设备(这里为 eth1)的队列状况:
#tc -s qdisc ls dev eth1
qdisc cbq 1: rate 10Mbit (bounded,isolated) prio no-transmit
Sent 7646731 bytes 13232 pkts (dropped 0, overlimits 0)
borrowed 0 overactions 0 avgidle 31 undertime 0

这里主要显示通过该队列发送了 13232 个数据包,数据流量为 7646731 个字节,丢弃的包数目为


0,超过速率限制的包数目为 0。

(2)显示分类的状况

简单显示指定设备(这里为 eth1)的分类状况:
#tc class ls dev eth1
class cbq 1: root rate 10Mbit (bounded,isolated) prio no-transmit

class cbq 1:1 parent 1: rate 10Mbit prio no-transmit #no-transmit 表示优先
级为 8
class cbq 1:2 parent 1:1 rate 1200Kbit prio no-transmit #no-transmit
class cbq 1:10 parent 1:2 rate 100Kbit prio 1
class cbq 1:20 parent 1:2 rate 1100Kbit prio 6

详细显示指定设备(这里为 eth1)的分类状况:
#tc -s class ls dev eth1
class cbq 1: root rate 10Mbit (bounded,isolated) prio no-transmit
Sent 17725304 bytes 32088 pkts (dropped 0, overlimits 0)
borrowed 0 overactions 0 avgidle 31 undertime 0
class cbq 1:1 parent 1: rate 10Mbit prio no-transmit
Sent 16627774 bytes 28884 pkts (dropped 0, overlimits 0)
borrowed 16163 overactions 0 avgidle 587 undertime 0
class cbq 1:2 parent 1:1 rate 1200Kbit prio no-transmit
Sent 628829 bytes 3130 pkts (dropped 0, overlimits 0)
borrowed 0 overactions 0 avgidle 4137 undertime 0


oss.linuxpk.com
源 2009 年第 2 期 100
企业应用
class cbq 1:10 parent 1:2 rate 100KMbit prio 1
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
borrowed 0 overactions 0 avgidle 159654 undertime 0
class cbq 1:20 parent 1:1 rate 1100Kbit prio no-transmit
Sent 5552879 bytes 8076 pkts (dropped 0, overlimits 0)
borrowed 3797 overactions 0 avgidle 159557 undertime 0

这里主要显示通过不同分类发送的数据包、数据流量、丢弃的包数目、超过速率限制的包数目等。
其中根分类(class cbq 1:0)的状况应与队列的状况类似。

例如,分类 class cbq 1:20 发送了 8076 个数据包,数据流量为 5552879 个字节,丢弃的包数


目为 0,超过速率限制的包数目为 0。

(3)显示过滤器的状况
#tc -s filter ls dev eth1
filter parent 1: protocol ip pref 1 fw
filter parent 1: protocol ip pref 1 fw handle 0x4 classid 1:10
filter parent 1: protocol ip pref 100 fw
filter parent 1: protocol ip pref 100 fw handle 0x5 classid 1:20

(4)显示现有 ipchains 的状况


#ip ipchains -L
Chain input (policy ACCEPT):
target prot opt source destination ports
- all ------ anywhere anywhere n/a
- all ------ anywhere anywhere n/a
- udp ------ anywhere anywhere any -> 7001:7004
Chain forward (policy ACCEPT):
Chain output (policy ACCEPT):
target prot opt source destination ports
- all ------ anywhere anywhere n/a
- all ------ anywhere anywhere n/a
- udp ------ anywhere anywhere 7001:7004 -> any
- udp ------ anywhere anywhere 7001:7004 -> any

6. 维护

主要包括对队列、分类、过滤器和路由的增添、修改和删除。

增添动作一般依照队列→分类→过滤器→ipchains 的顺序进行;修改动作没有什么特殊要求;删


oss.linuxpk.com
源 2009 年第 2 期 101
企业应用
除则依照 ipchains→过滤器→分类→队列的顺序进行。

这里采用的方法是全部删除,然后重新设置。删除命令如下:
#tc qdisc del root dev eth1
#ipchains -F

eth0 的配置

eth0 的配置与 eth1 的配置方法一样。配置如下(说明略):


#tc qdisc del root dev eth0
#tc qdisc add dev eth0 root handle 1: cbq bandwidth 10Mbit cell 8 avpkt
1500 mpu 64
#tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 10Mbit rate
10Mbit allot 1514 cell 8 weight 1Mbit prio 8 maxburst 1 avpkt 1500 bounded
#tc class add dev eth0 parent 1:1 classid 1:10 cbq bandwidth 10Mbit rate
1.4Mbit allot 1514 cell 8 weight 140Kbit prio 8 maxburst 1 avpkt 1500
bounded isolated
#tc filter add dev eth0 protocol ip parent 1:0 prio 100 handle 3 fw
classid 1:10
#ipchains -A output -i eth0 -d 0.0.0.0/0 -m 3

通过对企业流量控制服务器的分析,可以对 Linux 系统进行简单改造,以实现对一些特殊业务的流


量预分配和业务保证。

用 Linux 构建最好的 FTP 服务器


陈姗姗
在众多网络应用中,FTP(文件传输协议)有着非常重要的地位。Internet 中一个十分重要的资源
就是软件资源,而各种各样的软件资源大多数都放在 FTP 服务器中。与大多数 Internet 服务一样,
FTP 也是一个客户机/服务器系统。用户通过一个支持 FTP 协议的客户机程序,连接到主机上的 FTP 服
务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户发出的命令,并将执行结
果返回给客户机。FTP 服务可以根据服务对象的不同分为两类:系统 FTP 服务器只允许系统上的合法用
户使用;匿名 FTP 服务器(Anonymous FTP Server)允许任何人登录到 FTP 服务器去获取文件。

FTP 的数据传输模式针对 FTP 数据连接而言,分为主动传输模式、被动传输模式和单端口传输模式


三种。

1.主动传输模式


oss.linuxpk.com
源 2009 年第 2 期 102
企业应用
当 FTP 的控制连接建立,客户提出目录列表、传输文件时,客户端发出 PORT 命令与服务器进行协
商,FTP 服务器使用一个标准端口 20 作为服务器端的数据连接端口(ftp-data),与客户建立数据连
接。端口 20 只用于连接源地址是服务器端的情况,并且端口 20 没有监听进程来监听客户请求。

在主动传输模式下,FTP 的数据连接和控制连接方向相反,由服务器向客户端发起一个用于数据传
输的连接。客户端的连接端口由服务器端和客户端通过协商确定。

2.被动传输模式

当 FTP 的控制连接建立,客户提出目录列表、传输文件时,客户端发送 PASV 命令使服务器处于被


动传输模式,FTP 服务器等待客户与其联系。FTP 服务器在非 20 端口的其它数据传输端口上监听客户请
求。

在被动传输模式下,FTP 的数据连接和控制连接方向一致,由客户端向服务器发起一个用于数据传
输的连接。客户端的连接端口是发起该数据连接请求时使用的端口。当 FTP 客户在防火墙之外访问 FTP
服务器时,需要使用被动传输模式。

3.单端口模式

除上述两种模式之外,还有一种单端口模式。该模式的数据连接请求由 FTP 服务器发起。使用该传


输模式时,客户端的控制连接端口和数据连接端口一致。因为这种模式无法在短时间连续输入数据、传
输命令,因此并不常用。

Linux 下有很多可用的 FTP 服务器,其中比较流行的有 WU-FTP(Washington University


FTP)和 VSFTP。Red Hat 8.0 中自带了 WU-FTP 和 VSFTP 两个软件。WU-FTP 是一个著名的 FTP 服
务器软件,它功能强大,能够很好地运行于众多 Unix 操作系统中。不过作为后起之秀的 VSFTP 越来越
流行,在 Red Hat 9.0 发行版中就只带有 VSFTP。

VSFTP 中 VS 的意思是“Very Secure”。从名称可以看出,从一开始,软件的编写者就非常注重


其安全性。除与生俱来的安全性外,VSFTP 还具有高速、稳定的性能特点。在稳定性方面,VSFTP 可以
在单机(非集群)上支持 4000 个以上的并发用户同时连接。据 ftp.redhat.com 的数据,VSFTP 最多
可以支持 15000 个并发用户。

快速构建 FTP 服务器

FTP 服务器实现的基本功能是上传下载,下面就分几个步骤来搭建一个可以实现下载功能的简易
FTP 服务器。

1.安装 FTP 服务器

如果在安装系统时没有选择安装 FTP 服务器,可以通过 Red Hat 9.0 中的“添加/删除应用程序”


工具进行安装。具体方法是,选择“主选单”→“系统设置”→“添加/删除应用程序”,在弹出的界面


oss.linuxpk.com
源 2009 年第 2 期 103
企业应用
中选中 FTP 服务器,单击“更新”即可。

如果无法确认是否安装了该软件,可以使用以下命令查看:
#rpm -qa|grep vsftpd
vsftpd-1.1.3-8

2.启动 FTP 服务器

套用 Red Hat 9.0 的预设范例直接启动 VSFTP。


# /sbin/service vsftpd start

为 vsftpd 启动 vsftpd: [确定]

3.在/var/ftp/pub 目录下创建一个名为 test.txt 的文件,文件内容为“This is a test


file”。

4.测试

使用 FTP 客户端登录到本地服务器,然后以匿名身份(anonymous)登录:
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 1.1.3)
Name (127.0.0.1:root): anonymous
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.

这样就成功地登录到 FTP 服务器。可以显示服务器目录列表如下:


ftp> ls
227 Entering Passive Mode (127,0,0,1,63,15)
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Dec 04 01:35 pub
226 Directory send OK.

切换到 pub 目录下,并显示目录内容,可以找到刚才创建的文件 test.txt:


ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (127,0,0,1,232,34)


oss.linuxpk.com
源 2009 年第 2 期 104
企业应用
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 21 Dec 04 01:35 test.txt
226 Directory send OK.

下载 test.txt 文件:
ftp> mget test.txt
mget test.txt? y
227 Entering Passive Mode (127,0,0,1,186,210)
150 Opening BINARY mode data connection for test.txt (21 bytes).
226 File send OK.
21 bytes received in 0.0108 secs (1.9 Kbytes/sec)

查看本机目录内容,可以看到 test.txt 已成功下载到本机。


ftp> !ls
a EIO_Binders initrd mnt proc tftpboot ylg.txt
bin etc lib mymnt root tmp
boot home lost+found myshare sbin usr
dev id_dsas.pub misc opt test.txt var

尝试上传名为 ylg.txt 的文件,可以看到请求被拒绝了。


ftp> put ylg.txt
local: ylg.txt remote: ylg.txt
227 Entering Passive Mode (127,0,0,1,243,10)
550 Permission denied.

退出登录:
ftp> bye
221 Goodbye.

由测试可以看出,已经可以下载文件,但不能上传文件(也不能在服务器上创建目录和文件)。实
际上这是一个专门提供下载服务的匿名 FTP 服务器。

从上面的步骤可以看出,并不需要做什么配置就可以完成一个简易 FTP 服务器的架设。这是因为


Red Hat 已经配置好一个缺省的 FTP 服务器。不过在实际应用中,大部分情况下这个简易的服务器并不
能满足需求。

进一步配置 FTP 服务器

下面将创建一个能够满足常用需求的 FTP 服务器。实际应用中,FTP 服务器一般要同时提供上传和


下载功能。此外,出于安全考虑,还需要有用户身份验证、用户权限设置及空间管理等。下面就来搭建


oss.linuxpk.com
源 2009 年第 2 期 105
企业应用
这样一个 FTP 服务器。

1.创建欢迎语。如果希望使用者在进入目录时,能够看到欢迎语或对本目录的介绍,可以通过以下
方法来实现。

确定/etc/vsftpd/vsftpd.conf 文件中 dirmessage_enable=YES,默认情况下,Red Hat


9.0 有 此 设 置 。 接 着 , 在 目 录 中 新 增 名 为 .message 的 文 件 。 本 例 在 /home/ylg 目 录 下 创 建 一
个.message 文件,其内容为“欢迎来到我的 FTP 站点”。

2.更换 FTP 服务器的默认端口。将预设的 21 端口改为 2121,这样做是基于安全的考虑。更改方


法为,使用 vi 打开/etc/vsftpd/vsftpd.conf:
#vi /etc/vsftpd/vsftpd.conf

在文件最后增加如下一行内容:
listen_port=2121

3.取消 anonymous 登录的功能。在 vsftpd.conf 文件中找到如下一行,并将其值改为“NO”:


anonymous_enable=YES

4.设定使用者不得更改目录。这样做的目的也是基于安全性的考虑。一般情况下,使用者的预设目
录为/home/username。若是不希望使用者在登录后能够切换至上一层目录/home,则可通过以下设置
来实现。在/etc/vsftpd/vsftpd.conf 文件中找到以下三行内容:
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list

将其改为:
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list

新增一个文件/etc/vsftpd/chroot_list,文件内容为两个用户名:
ylg
user1

5.针对不同的使用者限制不同的速度。假设用户 ylg 所能使用的最高速度为 500Kb/s,用户


user1 所能使用的最高速度为 250Kb/s,可以通过以下方法设置。在/etc/vsftpd/vsftpd.conf 文
件尾部新增以下一行:
user_config_dir=/etc/vsftpd/userconf

增加一个名为/etc/vsftpd/userconf 的目录:


oss.linuxpk.com
源 2009 年第 2 期 106
企业应用
#mkdir /etc/vsftpd/userconf

在/etc/vsftpd/userconf 下新增一个名为 ylg 的文件,其内容如下所示:


local_max_rate=500000

在/etc/vsftpd/userconf 目录下新增一个名为 user1 的文件,其内容如下所示:


local_max_rate=250000

VSFTP 对于速度的限制范围大概在 80%到 120%之间,也就是限制最高速度为 100Kb/s,但实际


的速度可能在 80Kb/s 到 120Kb/s 之间。如果频宽不足,数值会低于此限制。

6.对于每一个联机用户,都以独立的进程来运行。一般情况下,在启动 VSFTP 时,只会看到一个


名为 vsftpd 的进程在运行。但若是读者希望每一个联机用户都能以独立的进程来呈现,则可通过
在/etc/vsftpd/vsftpd.conf 文件中增加以下一行来实现:
setproctitle_enable=YES

7.保存/etc/vsftpd/vsftpd.conf 文件,然后重新启动 vsftpd:


#service vsftpd restart

8.测试刚创建的 FTP 服务器。

以缺省方式登录会被拒绝,因为此时的默认端口号已经更改为 2121,所以登录时需指定端口。
# ftp 127.0.0.1
ftp: connect: Connection refused

此时也不能再使用匿名方式登录:
# ftp 127.0.0.1 2121
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 1.1.3)
Name (127.0.0.1:root): anonymous
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.

如果以用户 ylg 则可以成功登录(指定端口 2121),并显示欢迎信息:


# ftp 127.0.0.1 2121
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 1.1.3)
Name (127.0.0.1:root): ylg
331 Please specify the password.


oss.linuxpk.com
源 2009 年第 2 期 107
企业应用
Password:

230-欢迎来到我的 FTP 站点
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.

因为在设置中设定了不能切换目录,所以下列命令无法正确执行:
ftp> cd /home
550 Failed to change directory.

再来测试一下上传和下载。首先下载服务器目录中的 test.txt 文件:


ftp> get test.txt
local: test.txt remote: test.txt
227 Entering Passive Mode (127,0,0,1,243,215)
150 Opening BINARY mode data connection for test.txt (21 bytes).
226 File send OK.
21 bytes received in 0.00308 secs (6.7 Kbytes/sec)

可以通过!ls 命令看到本机目录中已成功下载该文件。然后上传本机目录中的 ylg.txt 文件到服务


器:
ftp> put ylg.txt
local: ylg.txt remote: ylg.txt
227 Entering Passive Mode (127,0,0,1,133,248)
150 Ok to send data.
226 File receive OK.
19 bytes sent in 0.0401 secs (0.46 Kbytes/sec)

用 ls 命令查看服务器目录,会发现该文件已成功上传。

为了测试不同连机用户使用的是不同进程,可以使用 ps -ef 指令,显示如下所示:


# ps -ef|grep ftp
root 12972 1356 0 13:44 pts/1 00:00:00 ftp 127.0.0.1 2121
nobody 12973 12908 0 13:44 ? 00:00:00 [vsftpd]
ylg 12975 12973 0 13:44 ? 00:00:00 [vsftpd]
user1 13013 13011 0 13:46 ? 00:00:00 [vsftpd]
root 13041 13015 0 13:47 pts/4 00:00:00 grep ftp

到现在为止,一个基本可以满足普通使用需求的 FTP 服务器就已经架设完成。


oss.linuxpk.com
源 2009 年第 2 期 108
企业应用
在实际应用中,有时为了增加安全性,会将 FTP 服务器置于防火墙之后。如本文开头所述,被动传
输模式适合于带有防火墙的情况。下面就来创建一个防火墙后的 FTP 服务器,该服务器 FTP 端口为
2121,数据传输端口为 2020。

执行以下两行指令,只允许 2121 和 2020 端口打开,其余端口关闭:


#iptables -A INPUT -p tcp -m multiport --dport 2121,2020 -j ACCEPT
#iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset

修改/etc/vsftpd/vsftpd.conf 文件,在文本最后添加以下两行:
listen_port=2121
ftp_data_port=2020

重新启动 vsftpd:
#service vsftpd restart

有时希望直接在/etc/hosts.allow 中定义允许或拒绝某一源地址,可以通过以下配置来实现。先
确保/etc/vsftpd/vsftpd.conf 中 tcp_wrappers=YES,Red Hat 9.0 中,这是默认值。重新启
动 vsftpd:
#service vsftpd restart

假设提供 168.192.2.1 和 210.31.8.1 到 210.31.8.254 的连接,则可对/etc/hosts.allow


进行如下设定:
vsftpd : 168.192.2.1 210.31.8. : allow
ALL : ALL : DENY

配置虚拟用户 FTP

上面配置的 FTP 服务器有一个特点,就是 FTP 服务器的用户本身也是系统用户。这显然是一个安全


隐患,因为这些用户不仅能够访问 FTP,也能够访问其它的系统资源。如何解决这个问题呢?答案就是
创建一个虚拟用户的 FTP 服务器。虚拟用户的特点是只能访问服务器为其提供的 FTP 服务,而不能访问
系统的其它资源。所以,如果想让用户对 FTP 服务器站内具有写权限,但又不允许访问系统其它资源,
可以使用虚拟用户来提高系统的安全性。

在 VSFTP 中,认证这些虚拟用户使用的是单独的口令库文件(pam_userdb),由可插入认证模块
(PAM)认证。使用这种方式更加安全,并且配置更加灵活。

下面介绍配置过程。

1.生成虚拟用户口令库文件。为了建立此口令库文件,先要生成一个文本文件。该文件的格式如下,
单数行为用户名,偶数行为口令:
#vi account.txt


oss.linuxpk.com
源 2009 年第 2 期 109
企业应用
ylg
1234
zhanghong
4321
gou
5678

2.生成口令库文件,并修改其权限:
#db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db
#chmod 600 /etc/vsftpd/account.db

3.新建一个虚拟用户的 PAM 文件。加上如下两行内容:


#vi /etc/pam.d/vsftp.vu
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/account
account required /lib/security/pam_userdb.so db=/etc/vsftpd/account

4.建立虚拟用户,设置该用户所要访问的目录,并设置虚拟用户访问的权限:
#useradd -d /ftpsite virtual_user
#chmod 700 /ftpsite

经过该步骤的设置,/ftpsite 就是 virtual_user 用户的主目录,该用户也是/ftpsite 目录的


拥有者。除 root 用户之外,只有该用户具有对该目录的读、写和执行的权限。

5.生成一个测试文件。先切换至 virtual_user 用户身份,然后在/ftpsite 目录下创建一个文


件:
#su -virtual_user
$vi /ftpsite/mytest
This is a test file.
$su - root

6.编辑/etc/vsftpd/vsftpd.conf 文件,使其整个文件内容如下所示(去掉了注释内容):
anonymous_enable=NO
local_enable=YES
local_umask=022
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
write_enable=YES


oss.linuxpk.com
源 2009 年第 2 期 110
企业应用
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
one_process_model=NO
chroot_local_user=YES
ftpd_banner=Welcom to my FTP server.
anon_world_readable_only=NO
guest_enable=YES
guest_username=virtual_user
pam_service_name=vsftp.vu

上面代码中,guest_enable=YES 表示启用虚拟用户;guest_username=virtual 则是将虚拟


用 户 映 射 为 本 地 用 户 , 这 样 虚 拟 用 户 登 录 后 才 能 进 入 本 地 用 户 virtual 的 目 录 /ftpsite ;
pam_service_name=vsftp.vu 指定 PAM 的配置文件为 vsftp.vu。

7.重新启动 VSFTP:
#service vsftpd restart

8.以虚拟用户 gou(Linux 中并无该账号)进行测试:


# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 Welcom to my FTP server.
Name (127.0.0.1:root): gou
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.

测试下载服务器目录中的一个文件 mytest:
ftp> get mytest
local: mytest remote: mytest
227 Entering Passive Mode (127,0,0,1,159,19)
150 Opening BINARY mode data connection for mytest (21 bytes).
226 File send OK.
21 bytes received in 0.00038 secs (54 Kbytes/sec)

测试上传本机目录中的文件 vsftpd.conf:


oss.linuxpk.com
源 2009 年第 2 期 111
企业应用
ftp> !ls
account.db chroot_list k mytest userconf vsftpd.conf
ftp> put vsftpd.conf
local: vsftpd.conf remote: vsftpd.conf
227 Entering Passive Mode (127,0,0,1,117,203)
150 Ok to send data.
226 File receive OK.
4229 bytes sent in 0.00195 secs (2.1e+03 Kbytes/sec)

可以看到,使用没有系统账号的虚拟用户可以成功完成上传、下载的工作。但该 FTP 虚拟服务器只


允许虚拟用户登录,其它系统用户无法登录,如系统用户 user1 不是虚拟用户,则不能登录该虚拟服务
器。
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 Welcom to my FTP server.
Name (127.0.0.1:root): user1
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.

在虚拟 FTP 服务器中,也可以对各个用户的权限进行设置。方法是在 /etc/vsftpd.conf 文件中


添加如下一行:

user_config_dir=用户配置文件目录

然后在用户配置文件目录下创建相应的用户配置文件,比如为上述名为 gou 的用户创建一个配置文


件(假设配置文件目录为/etc/user_config_dir):
#vi /etc/user_config_dir/gou
write_enable=NO
anono_upload_enable=NO

重启 FTP 服务器,这时再使用账号 gou 来登录,就已经没有上传的权限了。


oss.linuxpk.com
源 2009 年第 2 期 112
嵌入式

了解硬件体系
开发嵌入式 Linux
肖文鹏
与单纯的硬件开发或软件开发有所不同,嵌入式 Linux 系统在研发过程中通常都要涉及到硬件和软
件两个环节。许多计算机软件开发人员在转向嵌入式系统 Linux 开发的过程中显得力不从心,一个原因
就在于缺乏对嵌入式系统的硬件体系结构的了解,而偏偏嵌入式系统开发又对硬件的要求非常高。

从本质上说,嵌入式 Linux 系统也属于计算机系统的范畴,因此不可避免地要由三大基本部分组成:


中央处理器(CPU)、存储设备和 I/O 设备。此外,它还需要负责在三大部分之间进行通信的设备。本
文从这几个方面入手介绍嵌入式 Linux 系统的硬件体系结构。

中央处理器

嵌入式系统的核心部件是各种类型的嵌入式中央处理器。根据所用指令集的不同,嵌入式中央处理
器 可 以 分 成 两 种 主 要 的 体 系 结 构 , 一 种 是 复 杂 指 令 集 ( Complex Instruction Set
Computer , CISC ) 系 统 , 另 一 种 则 是 精 简 指 令 集 ( Reduced Instruction Set
Computer,RISC)系统。

在 20 世纪 60 年代,CISC 结构曾是嵌入式中央处理器的设计主流。但是随着时间的推移,这种设计
思想已经越来越难以满足实际应用的需要。于是有人开始提出了一种全新的处理器体系结构—— RISC。
目前使用的嵌入式中央处理器大多采用 RISC 结构。

现在几乎所有的半导体制造商都有能力生产嵌入式中央处理器,根据所用技术的不同,可以将嵌入
式中央处理器分成如下四种类型:

◆ 嵌入式微处理器(Embedded Micro Processor Unit,EMPU)

◆ 嵌入式微控制器(Embedded Micro-controller Unit,EMU)

◆ 嵌入式 DSP 处理器(Embedded Digital Signal Processor,EDSP)

◆ 嵌入式片上系统(Embedded System on Chip,ESoC)

微处理器

现在的通用计算机都是以微处理器为中心。从严格意义上说,“微处器”指的是芯片内部只包括
CPU 本身,而不包括存储器和 I/O 接口等其它功能模块,采用的是冯·诺依曼体系结构。在一些高端的嵌
入式应用中,通过将微处理器装配在专门设计的电路板上,并配以必要的外围接口电路和扩展电路,可


oss.linuxpk.com
源 2009 年第 2 期 113
嵌入式
以快速构造出一个实用的嵌入式系统。

为了满足嵌入式应用的特殊要求,嵌入式微处理器虽然在功能上与通用微处理器基本相同,但在工
作电压、工作温度、抗干扰性和可靠性等方面都做了增强。一般说来,采用微处理器来构建嵌入式系统
具有良好的实时性能、支持多任务处理、便于存储区保护、提供处理器扩展、丰富的调试功能和完善的
电源管理等优势。

微控制器

微处理器芯片中不包括 I/O 接口电路,也没有其它外围功能模块,功能相对单一。因此,嵌入式系


统的设计人员和硬件厂商开始倾向于开发另一种类型的嵌入式处理器。这种处理器不用像通用处理器那
样具有强大而齐全的功能,但要力求做到小巧,而且省电。这就是嵌入式微控制器,通常也称之为单片
机。

微控制器通常以某个微处理器内核为基础,芯片内部集成 ROM、RAM、FLASH、总线逻辑和 I/O 端


口等各种必要的功能模块,以适应特定场合的需要。与微处理器相比,微控制器最大的优点就是集成化
使体积、功耗和成本得到了有效的控制,并且可靠性大大提高。微控制器是目前嵌入式系统的主流产品
在构建嵌入式系统时,能节省系统开支、降低出错概率和减少高频干扰。

在开发嵌入式系统时,经常会遇到结构简单且数量众多的外围设备。这些设备有的需要 CPU 为之提


供控制手段,有的则需要被 CPU 当作输入信号,虽然功能各不相同,但通常都只需要表示开和关两个基
本状态就足够了。因为无论是传统的串口还是并口,对这些设备的处理都显得力不从心,所以在微控制
器芯片上大多会提供一个通用可编程 I/O 接口(GPIO),这是微控制器有别于微处理器的一个显著特征。

DSP 处理器

数字信号处理器(Digital Signal Processor,DSP)是专门为数字信号处理而设计的处理器。


它现在已经被广泛地应用在各种消费电子类产品当中,比如手机就运用了 DSP 技术对数字语音信号进行
编码和译码。DSP 处理器通常是针对特定应用而开发的,其优点是能够在短时间内对特定的数字信号进
行大量的处理,具有很强的实时运行功能。PC 机上使用的通用处理器(如 Intel 的 80x86)在工作时,
大约有百分之九十的时间都是在进行加法运算,乘法运算所占的比重相对较少。因此,通用处理器一般
不会在提高乘法运算能力上下很大功夫,而 DSP 处理器的出现正好弥补了这一缺陷。

为了加快数字信号的处理速度,DSP 处理器在设计时加入了许多特殊结构,以增强它的并行处理能
力。通用处理器在设计时遵循的是便宜和简单的原则,一般面向普通用户。因而它采用的是冯·诺依曼体
系结构,指令和数据处于同一地址空间。当处理器要执行某条指令时,必须先将指令从内存中读出来进
行译码,然后再将运算数据从内存中取出来,之后才能执行真正的运算,耗费在运算之外的时间非常多
DSP 处理器则拥有一种称为哈佛的总线结构。这种结构使用不同的指令和运算数据总线,可以同时从内
存中读出指令和数据进行运算,从而减少了运算所耗费的时间。


oss.linuxpk.com
源 2009 年第 2 期 114
嵌入式
嵌入式 DSP 处理器对系统结构和指令都进行了特殊设计,使其能够在资源受限的情况下执行某种
DSP 算法。由于编译效率和指令执行速度都很高,因此,像数字滤波、快速傅立叶变换和离散余弦变换
等 DSP 算法正在被大量引入到嵌入式领域中来。目前,DSP 处理器主要应用在嵌入式系统的智能化领域,
如生物信息识别终端、实时语音处理和虚拟现实等。这类智能化算法一般运算量较大,特别是乘法运算
和向量运算非常多,而这恰好是 DSP 处理器的优势所在。
SoC

随着 EDI 的推广和 VLSI 设计的普及,出现了片上系统(System on Chip,SoC)。SoC 顾名思


义指的是集成在 CPU 芯片上的部件比较多,足以独立构成一个系统。实际上它与微控制器的区别并不十
分严格,因此有时会将同一块芯片既称为微控制器,又称为 SoC。

在嵌入式系统中使用 SoC 处理器具有如下一些显著的优点:

◆ 降低内部工作电压,减少芯片功耗;

◆ 减少芯片引脚数目,简化制造过程;

◆ 简化外围驱动单元,优化处理速度;

◆ 优化内部电路结构,降低系统噪声。

存储设备

存储设备的主要作用是保存操作系统和应用程序的映像,以及系统在运行时所需的数据。在嵌入式
系统中使用的存储设备可以分为内部存储器和外部存储器两类。内部存储器和处理器处于同一块芯片上
CPU 不必通过 I/O 电路就可以直接访问它们,处理速度非常快,但造价也异常昂贵。外部存储器是用来
存储程序或数据的独立设备,访问时需要花费比内部存储器更多的时间,并且需要在处理器周围搭建额
外的寻址电路。

无论存储器位于处理器的内部还是外部,都可以进一步划分成如下几种类型:

◆ 随机存取存储器(Random Access Memory,RAM);

◆ 只读存储器(Read Only Memory,ROM);

◆ 混合存储器(Hybrid Memory)。
RAM

RAM 是一种可以被随机访问的存储设备。RAM 有时也被称为读写存储器,这是因为对这种存储设备


可 以 同 时 执 行 读 操 作 和 写 操 作 。 根 据 工 作 原 理 的 不 同 , RAM 可 以 分 为 两 种 类 型 , 动 态
RAM(DRAM,Dynamic RAM)和静态 RAM(SRAM,Static RAM)。

RAM 既可以位于处理器内部,也可以位于处理器外部。它与处理器的连线一般包括地址总线、数据
总线、片选信号和读/写控制信号等。通用计算机一般采用 DRAM,而嵌入式系统则多少会采用一些


oss.linuxpk.com
源 2009 年第 2 期 115
嵌入式
SRAM,或者完全采用 SRAM。
ROM

嵌入式系统一般都不采用磁盘,其操作系统和应用程序的映像,以及系统运行时所需的数据,都必
须保存在某种断电以后数据不会丢失的存储设备中,即通常所说的不挥发存储器。与通用计算机相比,
嵌入式系统往往配备更多的不挥发存储器。现在基于半导体技术的不挥发存储器大多是只读的或接近只
读的,一般泛称为 ROM,常见的有掩膜式 ROM、可编程 ROM 和可擦除 ROM。

ROM 的特点是即使关闭电源,其中的内容仍然能够保存不变。因此,它通常被嵌入式系统用来保存
系统所需的程序代码和所有永久性数据。

混合存储器

在嵌入式系统中使用的混合存储器主要有以下几类:

◆ EEPROM 与 EPROM 类似,不同点在于它是通过电信号进行擦除的。

◆ Flash 也称为闪存,其本质上是一种 EEPROM,但能够在正常的工作电压和电流下进行擦除和写
入操作。因此,它可以在目标系统中在线地改变其内容

◆ NVRAM 也称为非易失性 RAM,可以看成是带有后备电池的 SRAM,即使电源关闭后它的内容也可


以保持不变。

在现有的技术条件下,闪存对嵌入式系统来讲是理想的、不挥发存储器。

I/O 设备

一般来说,嵌入式系统配备的显示设备大多是尺寸较小的 LCD,按工作原理不同可以分为 TFT 和


DSTN 两种。

◆ TFT 由薄膜晶体管(Thin Film Transistor)陈列构成,优点是亮度大、色彩鲜艳、可视角


度大;缺点是价格高、耗电大,并且容易发生因个别晶体管损坏而在图像上形成斑点的现象。

◆ DSTN 利用液晶在不同电场下能够呈现不同的光学特性,在显示屏上用水平和垂直放置的导线做
成网格,并加以电信号进行扫描,就可以依次在每个交点上形成并保持一定的电场,从而使该点上的液
晶在反射或透射光线时能够显示出不同的颜色。

目前,在嵌入式系统中广泛使用的 LCD 有主动式和被动式的区别。被动式 LCD 显示器的电压控制部


件设计在显示面板的四周,反应时间长且光线输出量少,因而可视角度比较小,显示动态图像时的效果
比较差,并且容易产生残影现象。主动式 LCD 显示器则通过在每个液晶单元内放置电压控制单元,在缩
短反应时间的同时增加了光线的输出量,从而可以提供较好的动态显示效果。由于主动式 LCD 显示器的
成本较高,因此目前只在一些高端的嵌入式设备中采用,如 PDA 和信息家电等。一般的嵌入式系统基于
成本和实用性方面的考虑,大多采用被动式 LCD 显示器,如普通的移动电话等。


oss.linuxpk.com
源 2009 年第 2 期 116
嵌入式
配备了 LCD 显示器的嵌入式设备往往还同时配有透明的触摸屏,通常触摸屏与液晶显示器是叠放在
一起的。这样用户可以用触笔或手指在屏幕上定位,从而取代鼠标的作用,或者直接进行手写输入,以
取代键盘的作用。

通信设备
Firewire

IEEE 1394 也称为 Firewire,其传输带宽可以达到 400Mb/s,最适合进行多媒体数据的传输,


可以运用在多媒体实时播放、剪辑或者传输的场合。在需要进行快速且大量数据传输的嵌入式设备中,
IEEE 1394 是一个经常被用到的数据传输接口。

IEEE 1394 在进行多媒体数据传输时的体系结构最上层为应用层(Application),以下依次为


传输层(Transaction)、链路层(Link)和物理层(Physical)。多媒体数据在由应用层传送到链
路层后,将遵循 IEEE 1394 标准进行封包,然后再经由链路层和物理层把数据传送出去。数据接收的另
一端会接收打包数据,再经过拆包将数据还原成原来的多媒体数据。
USB

USB 接口原本是用于 PC 机的一种输入/输出接口,具有热插拔特性。当拥有 USB 接口的外围设备在


与 PC 机连接时,操作系统会自动侦测到这一设备,并且能够在不重新启动计算机的前提下完成软硬件的
配置。

因为 USB 1.1 规范中定义的数据传输速度可以高达 12Mbps,所以使用 USB 接口的 PDA 在与 PC 进


行数据同步时的速度要比使用 RS-232 高出许多。而最新的 USB 2.0 规范中,数据传输的最高速度可以
达到 480Mbps,用于进行大量且高速的数据传输。

蓝牙

蓝牙(Bluetooth)是一个用于无线通信的标准协议。它可以给嵌入式系统提供无线数据传输功能 ,
其通信频率处于 2.4GHz 以内,即使在无线噪声很强的环境下仍然能够保持很高的准确性。用于无线通
信的蓝牙模块主要由三个部分组成,无线传输收发单元、基带处理单元和数据传输接口。

当无线信号由蓝牙的无线传输收发单元接收到之后,会被送到基带处理单元进行信号处理。处理后
的数字信号再通过数据传输接口,传送到嵌入式系统的处理器之中作进一步的处理。

红外线

嵌入式系统中的红外收发模块主要由三个部分组成:红外线发光二极管、硅管光检测器和控制电路。
红外线发光二级管是用于发射红外线的装置。它能够发射波长在 0.85 微米到 0.90 微米之间的红外光波。
硅管光检测器是用于接收红外线的装置。由它接收到的信号将被传到控制电路当中,然后再送给嵌入式
系统的处理器作进一步的处理。

红外线收发模块也有相应的标准。最早出现的是 1994 年的 IrDA1.0,采用波长在 0.85 微米到


oss.linuxpk.com
源 2009 年第 2 期 117
嵌入式
0.90 微米的红外线进行传输,传输速度为 115.2Kbps,距离大约在 1 米左右,接收角度在 30 度之内。
而在 1999 年提出的 VFIR 标准中,传输速度已经可以高达 16Mbps,有效距离为 8 米。
802.11

802.11 是 IEEE 在 1997 年提出的一个无线网络通信标准,其目的是使各个厂商的无线网络设备可


以互相兼容,从而提供一个稳定的无线传输环境。到了 1999 年,IEEE 又先后提出了 IEEE 802.11a
和 IEEE 802.11b 两个无线传输协议,其中 802.11a 使用 5.8GHz 的频带进行无线传输,而 802.11b
则使用 2.4GHz 的频带进行无线传输。基于 802.11b 协议的无线网络的最高速度是 11Mbps,比常用的
以太网稍微快一点,现在已经有许多嵌入式系统开始使用基于 802.11b 协议的设备,开发基于无线网络
的各种应用。最新的协议是 802.11g。

本文讨论了嵌入式 Linux 系统的硬件体系结构,从中央处理器、存储设备、I/O 设备和通信设备几


个方面分别介绍了目前在嵌入式开发中经常遇到的硬件设备。了解这些基本的硬件知识对今后深入进行
嵌入式 Linux 系统的开发将会很有帮助。

基于 uClinux 的 Web Server 的实现


霍妍
随着个人电脑和因特网的迅速发展,嵌入式系统的开发也变的越来越流行,而基于 Linux 的嵌入式
操作系统的开发已经越来越受到人们的关注。uClinux 是一款专门用于微型控制领域的嵌入式 Linux 操
作系统。它已经被成功地移植到了很多平台上。

这里主要以 uClinux 嵌入式操作系统为例来介绍嵌入式操作系统的有关知识,并讨论如何在华恒公


司的开发套件 HHDREZ328—R2 上基于 uClinux 实现 Web Server。基于 uClinux 实现 Web Server
的主要技术难点是:如何利用嵌入式系统本身有限的资源对信息进行 HTTP、SMTP、POP3、TCP、UDP
、ICMP、IP 及 PPP 等协议的处理,使之变成可以在互联网上传输的 IP 数据包,以及可以在内置 Web 页
上浏览的数据。

嵌入式操作系统 uClinux

嵌入式操作系统 EOS(Embedded Operating System)负责嵌入系统的全部软、硬件资源的分


配、调度、控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所
要求的功能。随着 Internet 技术的发展、信息家电的普及应用及 EOS 的微型化和专业化,EOS 开始从
单一的弱功能向高专业化的强功能方向发展。

Linux 是一种非常受欢迎的操作系统,它与 Unix 系统兼容,源代码开放。它现在广泛应用于服务


oss.linuxpk.com
源 2009 年第 2 期 118
嵌入式
器领域,而更大的影响在于它正逐渐地应用于嵌入式设备。 uClinux 正是在这种氛围下产生的。
uClinux 是面向无 MMU 的 CPU 的嵌入式操作系统。它的内核是由 Linux 2.0 Kernel 发展起来的,目
前可以支持 Linux Kernel Veriosn 2.0.X。由于 Linux 具有很高的可移植性,所以嵌入式 Linux
操作系统可以很容易地提供对特定厂家 CPU 的支持。该嵌入式 Linux 操作系统使用的是通用 Linux
API 接口,即 Posix 标准接口。嵌入式 Linux 操作系统 Kernel 小于 512KB, Kernel 及 Tools(fs)
小于 900kB。

该嵌入式 Linux 操作系统具有强大的网络功能,支持 PPP、Enternet 等多种网络连接方式,包括


完整的 TCP/IP 协议栈及大量的其他协议。目前,有很多的网络协议正在开发中。另外,由于 Linux 的
开放性,任何新的网络协议可以很容易地加入到内核中。

该嵌入式 Linux 操作系统支持丰富的外部设备。目前在内核级已经实现了对多种外部设备的支持,


包括:LCD、触摸屏、键盘、多路串口、Modem、IrDA、PWM 音频输出等等。同时,它还支持大量的文
件系统:Rom-Disk、Ram-Disk、NFS、ext2、FAT16/32 等。

基于 uClinux 应用程序设计

总的来说,在 uClinux 上的开发与标准 Linux 是很类似的。通常有两种情形:

1.基于以太网的开发环境,这种开发方式比较适合团队开发。我们可以把目标机和硬件调试器挂接
在局域网上,开发小组可以通过 PC 机(运行 Windows 操作系统),以超级终端的形式通过 Fterm 登陆
到运行 Linux 的主机上。这样每个小组成员都可以编译调试自己的应用程序。在编译通过后,可以通过
Fterm 以 telnet 的方式登陆到目标机上,然后通过目标机提供的 NFS,mount 到 Linux 主机,然后
就可以调试或运行程序了。采用这种方式比较适合组团开发。

2.如果所设计的程序和硬件的关联不大。可以先在标准 Linux 上编译和调试通过。然后移植到


uClinux。将 x86 上的 GCC 编译好的应用程序用交叉编译工具来编译。交叉编译通过后,通过网络
(nfsmount)运行交叉编译成功的应用程序;如果程序不能正常运行,需修改程序重新编译。检查的重
点放在与 uClinux 的内存特性有关的那部分代码。

如果编译时发现错误,那么很可能存在以下问题:

(1)交叉编译器或库文件的路径不正确。最彻底的解决办法是重新装一次编译器。

(2)遇到库不支持的函数。此时需要自己把函数的实现做成另外一个库供应用程序使用。如果是
uClinux 本身不支持的调用,那么就需要改写代码了。

(3)C++的一些写法不太标准,需要修改。

(4)注意 fork 的问题。uClinux 下只有 vfork,没有 fork。

开发平台选择


oss.linuxpk.com
源 2009 年第 2 期 119
嵌入式
硬件系统

华恒公司的 HHDREZ328—R2 是基于龙珠 EZ328 的开发套件。龙珠 EZ328 集成处理器具有丰富的接


口资源、低廉的价格、省电低功耗等等个性鲜明的特点,成为 Motorola 在国内销售最广的处理器。因

图2
此,HHDREZ328—R2 开发板成为低端手持设备、PDA、显示
终端等设备开发商的首选开发平台。其硬件结构如图 1 所示。

软件系统

宿主机操作系统采用 Red Hat Linux 6.2,完全安


装。目标机采用 uClinux 操作系统。

开发模式
图3
1.系统开发模式,如图 2 所示。

2.应用程序开发模式

直接在目标板上进行开发,并将宿主机和目标板通
过串口相连,在宿主 PC 机上运行 minicom 作为目标
板的显示终端,实现在目标板上的调试。下面给出这种
TARGET 开发模式下的开发流程,如图 3 所示。

嵌入式 Web Server 的实现

由于要实现的 Web Server 是用在嵌入式系统里,


嵌入式系统的容量和处理速度有很大的限制,因此 Web
服务器的功能也将受到很大的限制。在这里我们按照
Web 服务器的原理,实现了服务器的基本功能。

工作流程和软件设计

整个系统的工作流程如图 4 所示。当数据包通过相
图4


oss.linuxpk.com
源 2009 年第 2 期 120
嵌入式
应接口传送到以太网控制器和 MCU 后,系统内部的 TCP/IP 堆栈进行数据包解析和流向判断,然后进行解
包或者打包的动作,以继续进行后续工作。显然,最终的处理结果都要通过 Web Server 来进行。

图5
网络协议栈的实现

通常,所谓的 TCP/IP 协议是一个四层协议系统,包括数据链路层、网络层 (含 IP 协议)、传输层


(含 TCP 协议)和应用层,每一层负责不同的通信功能。基于 TCP/IP 协议可以实现多种功能应用,如:
HTTP(超文本传输控制协议)、TELNET(远程登录)、FTP(文件传输协议)、(下转第 77 页)(上
接第 76 页)SMTP(简单邮件传送协议)、SNMP(简单网络管理协议)等。本文主要讨论 HTTP,也就
是 Web Server 在应用层的主要构成协议。

1.TCP/IP 协议栈

IP 包含编址方案,并提供寻址功能;TCP 则是在不同主机的对等进程之间提供可靠的进程间通信。
与 TCP 两端口所连接的实体中,一端为应用程序进程或用户,另一端则为底层协议,如 IP 协议。TCP 在
建立连接过程中采用三向握手机制,以保证数据的可靠性。当通信建立以后,就可以在此基础上进行后
续的进一步功能扩展,开展例如 HTTP、PPP 等应用层的协议实现。
2.HTTP

HTTP(超文本传输协议)服务器可使 HTML(超文本链接标示语言)页面,如 Web 页等和其它文件为客


户端所使用。用户可以根据自己的需要添加构成 Web Server 的所有其它动态或静态元素(无论是否符
合 HTML 标准)。限于篇幅,具体示例不再列出。HTTP 是 WWW 上的协议。当用户要浏览服务器上的一个
网页时,一个 HTTP 请求就会从用户的浏览器发到 HTTP 服务器。服务器响应这个请求,把指定的网页


oss.linuxpk.com
源 2009 年第 2 期 121
嵌入式
传送回来,用户才能够看到网页。

E2PROM 的编程

在 Web Server 启动以前,要先把资源文件下载到 E2PROM 中。在这个方案中采用 RS232 端口从电


脑上传输资源文件。下载程序自动从电脑中载入磁盘的目录结构并在 E2PROM 中创建 E2PROM 文件系统。

不足之处

在我们的开发板上有 2 片 1MB 的闪存,相当于 PC 机的硬盘,其中又有一部分来装 uClinux 嵌入式


操作系统,剩下的我们可使用的空间就很小了。这就大大限制了对应用程序功能的开发。在此次开发中
实现了最基本的 Web 服务器的功能,可以响应浏览器的基本请求,将目录或文件的内容返回给浏览器。

小结

网络技术正在以惊人的速度渗透到社会的每一个角落,嵌入式产品也不例外。因此,嵌入式 Web
Server 的研究意义深远,而基于 uClinux 的 Web Server 的研究与实现更具有一定的实用价值。这里
给出了基于 uClinux 构架 Web Server 的主要原理和方法,至于采用其它平台或方案的实现步骤及过
程大同小异,大家可举一反三。


oss.linuxpk.com
源 2009 年第 2 期 122
编读往来

Linuxpk.com 2009 年 1 月十大热门帖

一、THE TOP 25 MOST DANGEROUS PROGRAMMING ERRORS


http://bbs.linuxpk.com/thread-37094-1-1.html

二、能不能使用 NFS 文件系统是两台 linux 实现资源共享


http://bbs.linuxpk.com/thread-37048-1-1.html

三、[RedHat] 开机脚本,不明白请教各位老师
http://bbs.linuxpk.com/thread-37057-1-1.html

四、vi 命令生成.swp 文件相关问题


http://bbs.linuxpk.com/thread-37055-1-1.html

五、Linux 的考试题目,请高手帮忙作答
http://bbs.linuxpk.com/thread-36847-1-2.html

六、成功完成编译 gnome-2.24.0
http://bbs.linuxpk.com/thread-37155-1-1.html

七、构建 linux 版本的 chrome


http://bbs.linuxpk.com/thread-37091-1-1.html

八、ibm t42 机在 fc8 下不能无线上网,望有经验的指点下


http://bbs.linuxpk.com/thread-36948-1-1.html

九、求助,删除一个文件夹中的大量小文件的方法?
http://bbs.linuxpk.com/thread-36935-1-1.html

十、RRDtool 中文使用手册
http://bbs.linuxpk.com/thread-37101-1-1.html


oss.linuxpk.com 源 2009 年第 2 期 123
封底