欢迎你客人 ( 登录 | 注册 )

  评价 ---

2 页 V < 1 2
entry 2008-6-2, 06:18 AM
webgame
网页游戏
番禺人才网
http://www.wobupei.org.cn
http://www.v2ex.net.cn
webgame
webgame
webgame
英雄之门
无端网游
无端网游
盛大英雄之门
中文webgame
口袋妖怪webgame
魔兽争霸webgame最终幻想webgame
webgame源码
魔兽webgame
webgame外挂
webgame rpg
webgame
网页游戏
webgame
网页游戏大全
免费webgame
webgame源码
webgame网页游戏
网页小游戏
网页网络游戏
三国网页游戏
魔兽网页游戏
免费网页游戏
网页游戏 罗马
盛大网页游戏
中文网页游戏
好玩的网页游戏
webgame

WebGame,顾名思义就是基于Web浏览器的网络在线多人游戏,又称无端网游或网页游戏。从诞生发展至今,WebGame大概分为两种类型:一是基于Web浏览器,使用PHP/ASP/Perl等解释语言建设的虚拟社区;二是基于Web浏览器,使用Flash技术制作的游戏。
  
  WebGame的优点在于无客户端的B/S模式,不需要下载任何客户端或插件,直接打开浏览器登陆网站就可以游戏。由于Ajax技术的出现,WebGame的技术实现更变得容易,完全基于浏览器的互动式游戏变得完全可以实现。
  
  作为一种特殊的游戏类型,早在网络游戏盛行之前的Mud时代就已经存在,尽管一直以来都因为玩法太单调,模式太沉闷而没有引起太大的关注,但是发展延续至今却也拥有了一批忠实玩家。网页游戏以无需游戏客户端,仅需打开浏览器,点击即可直接游戏的方便快捷的游戏方式,受到上班族白领的亲睐和追捧。随着宽带的发展,网页游戏将会成为网络游戏的重要补充模式。


http://webgame.wj8.net
http://webgame.katongtupian.com

http://webgame.wobupei.org.cn
http://www.wj8.net
http://www.v2ex.net.cn
http://www.87q.net
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=116
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=117
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=118
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=119
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=120
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=121
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=122
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=123
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=124
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=125
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=126
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=127
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=128
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=129
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=130
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=131
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=132
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=133
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=134
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=135
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=136
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=137
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=138
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=139
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=140
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=141
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=142
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=143
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=144
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=145
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=146
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=148
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=147
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=149
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=150
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=151
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=152
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=153
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=154
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=155
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=156
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=157
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=158
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=159
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=160
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=161
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=162
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=163
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=164
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=165
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=166
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=167
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=168
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=169
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=170
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=171
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=172
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=173
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=174
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=175
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=176
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=177
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=178
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=179
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=180
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=181
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=182
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=183
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=184
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=185
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=186
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=187
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=188
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=189
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=190
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=191
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=192
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=193
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=194
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=195
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=196
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=197
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=198
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=199
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=200
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=201
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=202
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=203
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=204
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=205
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=206
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=98
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=99
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=101
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=102
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=103
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=104
http://www.wobupei.org.cn/SrcShow.asp?Src_ID=105


entry 2006-11-27, 17:11 PM
http://labs.google.com

google实验室的产品.学习ing

entry 2006-10-27, 18:31 PM
本文介绍如何在 Ubuntu 中安装和配置 Opera 浏览器,本文是基于这个 Ubuntu 论坛讨论的,翻译中增加了对中文的支持等内容。

请注意目前的 Opera 浏览器是有广告的免费软件,当然你可以付费获得额外的服务支持。


1. 下载最新的针对 Ubuntu 的 .deb 包
目前 Opera 提供了针对 Ubuntu 的 .deb 文件。通用的 .deb 文件应该也可以工作。

Opera 提供了两种基本安装类型:使用静态库和共享库。它们的区别是 Opera 是如何链接到 Qt 库的。在共享库版本中,Opera 使用你机器上的 Qt,而静态库的版本则使用 Opera 内建的 Qt。静态库版本下载的体积更大,在菜单和文件选择器使用了点阵字库(没有抗锯齿功能)。动态的编译版本集成到系统中,这样它使用你其它 Qt 应用程序相同的抗锯齿设置。静态的编译版本在浏览器窗口和其它用户界面还是支持抗锯齿功能。静态版本可能更快和更稳定,至少 Opera 的爱好者已经体验了很长时间。你可以都试试,因为在 Ubuntu 中安装和卸载软件相当容易。

请注意 Opera 提供的针对 Ubuntu 5.10 的版本似乎修正了 Breezy 中现有的 Opera 包的不少 bug。

请访问Opera 官方下载网站,选择你需要的包并选择一个下载镜像站点。

你也可以访问Opera 预览和 Beta 网站以获得最新的预览版本。

保存你下载的文件到某个你能够找到的地方,例如桌面或者你的主文件夹中。


2. 安装 Opera
打开一个终端,输入:

sudo dpkg -i opera<Tab 键>.deb
注:Tab 键能够自动帮助你输入较长的复杂的文件名。前提是你在正确的目录中,只要输入“opera”并在上述命令说明<Tab 键>的地方按下键盘上的 Tab,Ubuntu 会自动帮助你输入完整的文件名。

安装 Opera 需要一点点的时间。

如果你得到一些信息显示依赖的包未安装,请输入:

sudo apt-get -f install
apt 将会安装这些缺失的包。


3. Ubuntu 化 Opera(完成安装)
与许多来自 Ubuntu 软件仓库的程序不同,Opera 不会把自己添加到桌面菜单中。当然这很好解决。此外,我们还要让 Opera 使用 Ubuntu 默认的文件处理器。

回到终端中:

sudo gedit /usr/share/applications/opera.desktop
粘贴下列的文本:

[Desktop Entry]
Encoding=UTF-8
Name=Opera Web Browser
GenericName=Web Browser
Comment=Simply the Best Internet Experience
Exec=opera %u
Terminal=false
MultipleArgs=true
Type=Application
Icon=/usr/X11R6/include/X11/bitmaps/opera.xpm
Categories=Application;Network
MimeType=text/html;image/gif;image/jpeg;image/png
保存文件,回到终端,输入:

mkdir ~/.opera
gedit ~/.opera/filehandler.ini
粘贴下列的文本:

Opera Preferences version 2.0
; Do not edit this file while Opera is running
; This file is stored in UTF-8 encoding
[Settings]
Default File Handler=gnome-open ,1
Default Directory Handler=gnome-open ,1
保存文件并退出 gedit。 设置 ~/.opera/filehandler.ini 的工作每个用户都需要执行一次。


4. 替换方案——通过 apt-get 安装 Opera
将下列信息添加到你的 apt sources.list(/etc/apt/sources.list) 文件:

deb http://deb.opera.com/opera/ unstable non-free
或者,你不需要最新的版本可以选择稳定的版本:

deb http://deb.opera.com/opera/ stable non-free
.修改后保存 sources.list 文件,然后在终端中输入:

sudo apt-get update
接下来:

sudo apt-get install opera
所有需要的依赖关系将会被处理,并且你不需要像上面所述创建桌面文件,这些都自动完成了。(译注:事实似乎并非如此,建议你将本文“Ubuntu 化 Opera(完成安装)”的部分进行一遍。)

另一个好处是你不需要持续关注未来的升级,它会自动完成。


5. Opera 的 Gnome 外观
你可以点击这里预览效果。

如果你正在使用 Opera,你可以点击这里马上安装该外观。


6. 设置 Opera 为默认浏览器
要将 Opera 设置为系统默认的浏览器和邮件客户端,请这么做:

进入“系统 -> 首选项 -> 首选应用程序”

在“Web 浏览器”标签页选择“自定义”并输入:

opera -newpage "%s"
在“邮件阅读器”标签页选择“自定义”并输入:

opera -newmail "%s"

7. 启动浏览器
你可以通过“应用程序 -> Internet -> Opera Web Browser”启动这个非常棒的浏览器了。


8. 常见问题

8.1. 缺失的包
如果你选择了 qt-shared 的版本,你需要 libqt3c102-mt 包。在 Ubuntu Breezy 中是 libqt3-mt 。


8.2. Operamotif 问题
将 multiverse 源加入 sources.list,然后:

sudo apt-get install libmotif3 lesstif1 lesstif2 motif-clients
你可能还需要这么做:

cd /usr/lib; cp libXm.so.2 libXm.so.3

8.3. Java 问题
如果你在终端中启动 Opera 你可能会看到下面的错误信息,如果你的 Java 不能正确工作地话:

ERROR: ld.so: object 'libjvm.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object 'libawt.so' from LD_PRELOAD cannot be preloaded: ignored.
要修正该错误,请在下面位置更正 Java 的路径:Tools -> Preferences -> Advanced Tab -> Content -> Java options. 它看起来像是:

/usr/lib/j2re1.5-sun/lib/i386/
你的实际的 Java 运行时版本可能有些不同。直到下次启动 Opera 这个改动才会生效。

使用 http://www.java.com/en/download/help/testvm.xml 来测试你的 Java 虚拟机(JVM)。

当然你需要安装 Java,请参阅 https://wiki.ubuntu.com/RestrictedFormats?h...28restricted%29 以了解如何进行。


8.4. 常见插件问题
要让 Opera 能使用插件,插件必须安装到 Opera 的插件目录中。你可以通过“Tools -> Preferences -> Advanced -> Content -> Plugin Options”添加插件目录。添加目录的描述并按下“Find Plugins”。你可能需要重启 Opera 以启用这些插件。

一些常用的插件的 .so 文件:

Shockwave Flash
libflashplayer.so

Acroread
nppdf.so

GXine
gxineplugin.so


请访问Opera's Linux Plugin Page。


8.5. Flash 问题
Macromedia Flash player 使用 OSS 输出声音,这样当其它应用程序使用声音的时候或者 /dev/dsp 不存在的时候,它就不会发出声音。一个可行的解决方案是通过一个音效守护程序封装启动 Opera,这样发送到 /dev/dsp 的声音将被音效守护程序截获。可以安装 arts 或者 esd-clients:

sudo apt-get install arts


sudo apt-get install esd-clients
通过相应的守护程序启动 Opera:

esddsp opera


artsdsp opera
如果你使用 KDE,arts 是默认的音效守护程序,而 esd 是 GNOME 默认的。两者都能协同工作:

artsdsp esd &


esddsp artswrapper &

8.6. Acroread 插件问题
Acroread 插件默认的不能在 Opera 8 中工作。你必须修改 Opera 启动脚本来让其工作起来。进入终端,输入:

sudo gedit /usr/bin/opera


OPERA_LD_PRELOAD="${LD_PRELOAD}"
export OPERA_LD_PRELOAD
替换为

LD_PRELOAD="libXm.so.2:${LD_PRELOAD}"
export LD_PRELOAD
OPERA_LD_PRELOAD="${LD_PRELOAD}"
export OPERA_LD_PRELOAD
启动 Opera 并打开一个 pdf 文件。当它询问你要如何做时,点击“Change”按钮,将会一个文件类型关联的对话框,然后选择相关的插件(例如 nppdf.so)。


9. Opera 段错误和静态版本下 Java 崩溃的问题
如果你的 Operan 启动为 segfault,或者你使用静态版本时 Java 出现问题,请这么做:

1. 编辑 ~/.opera/pluginpath.ini,修改为这样:


[Paths]
/usr/lib/opera/plugins=1
/usr/lib/mozilla/plugins=0
/usr/lib/netscape/plugins-libc6=0
2. 创建符号链接,从 /usr/lib/mozilla/plugins/libflashplayer.so 到 /usr/lib/opera/plugins/libflashplayer.so

3. 检查你的 ~/.opera/javapath.txt,当使用 Blackdown Java 时,它应该是 /usr/lib/j2se/1.4/jre/lib/i386

该解决方案由 rwf 提供,基于这个论坛讨论。


10. 汉化
请访问这里,下载对应你的 Opera 版本的语言文件。

进入“Tools > Preferences”,在“General”中,你会找到语言的设置,点击“Details”。

点击“Choose”并找到你下载的语言文件。
点击“OK”并关闭对话框。

entry 2006-10-4, 17:38 PM
今天,mop的大动作终于出来了,不是裁员,而是伴随着若干频道上线,mop的新闻中心正式成立。新闻中心的负责人是从新浪过去的。我粗略看了一下这些新频道,一声叹息;感觉看了一出悲剧。



业界对陈一舟的印象,多是一个资本高手。但我仔细、长期地研究过他。说陈一舟是资本运作高手,只是比较浅的认识;他最吸引我的地方,是他的聪明――以及聪明所带给他的戏剧性故事。我说说其中的一个:





陈一舟是在02年底再度回国发展。当时他做了两件事,一是成立千橡,主要业务是SP;另外是搞了一个青少年社区dudu.com。这两件事情,都深深烙上了chinaren痕迹:SP,陈一舟在chinaren的前合伙人周云帆和杨宁当时正在搞“空中网”;dudu.com,chinaren就是青少年社区。



如果在当时,陈一舟专心做这两个项目,应该能混个“小康”。因为以千橡来说,03年即开展SP业务,还是能搞点钱的;以dudu.com来说,那么早就搞青少年社区,坚持下来保不齐就是一个中国的myspace――这是陈一舟第一个机会。



但陈一舟很聪明,发现mopsite社区更好,04年初,就收购了它,改名为mop.com;同时,关掉了刚刚运营一年的dudu.com,把其业务转型为后来饱受“流氓软件”诟病的“dudu下载加速器”。但平心而论,关掉dudu.com虽然略有可惜,但也没什么大不了的,因为mop确实非常好,仅从流量上看,当时就超过了myspace。陈一舟后续操盘mop如果正确,坚持下来保不齐就是一个中国的myspace――这是陈一舟第二个机会。





但陈一舟当时没有抓住这个机会。说到这里,我要回溯一下03年底到04年初的情况。在当时,mopsite.com这个老牌的社区网站,确实是互联网上的一个亮点。它已经运营了超过6年,形成了强有力的品牌、文化和――用户。特别是这些“用户”,忠诚度、影响力、活跃度,都是一顶一的;而且,这些“用户”和别的社区比较起来,熟悉互联网,年龄层偏小,对数码和时尚用品有很强的消费能力。总而言之,我现在不厌其烦地描绘当年mopsite的用户,是因为我非常羡慕――当年mopsite的用户确实是金子。



陈一舟喜欢说他很懂社区,我不知道是不是因为做过chinaren的CEO,就先天性地可以被“赋予”懂得社区。我不知道。我知道的是陈一舟收购mopsite之后,三下五除二地采取了一些“懂”社区的行动,结果是大量金子般珍贵的mopsite用户,走了,不玩mop了;与之对应,来了一大拨一大拨“小孩”。



有趣的是,过了几年,当myspace火遍全球的时候。mop投入一笔不菲的资金,搞了个轰轰烈烈的“极客行动”,试图找一些金子般的用户使用猫扑。当这个活动开始推广时,我觉得特别黑色幽默――早知今日,何必当初?!



现在回头看看,mopsite确实是最有可能成为中国的myspace网站,因为当时他们都是锁定了青少年用户,建立了青少年亚文化圈子。陈一舟收购mopsite的直觉是对的,但是他做的事情,伤害了自己的直觉。





时光流转到今天。此时此刻,mop上面多了两排频道导航。刚才我点进去看了,然后给朋友发消息说: “快和新浪出来看mop!”但说实在的,看到mop发展到现在,我已经没有了旁观者的幸灾乐祸,只是充满同情。我的一个朋友“肉唐僧”说过很漂亮的比喻:做网站的和网站的关系,就有点象人和自然的关系;你越是想征服自然,越是被自然戏弄。同理;你越是想改版你的网站,推出新的服务,用户往往逃得更快――社区“翻”出来做“频道”,是最容易的事情,但也是最错误的事情。



原本一片茂盛充满生机的草地,几年来,搭建了高高低低不同的各种临时建筑;让人一声叹息,不忍多言。而更关键的是时间慢慢流走――



你在这里“沉舟”,旁人自然“千帆而过”。



entry 2006-10-4, 17:32 PM
《7 HABITS》的第一个习惯就是:BE PROACTIVE,就是要积极主动,要自信。这个道理每个人都懂,都知道积极和自信是好事情,但是每次遇到困境的时候就是积极不起来,拼命命令自己自信也不行!我自己也是一样,直到我学会了一种方法,我才明白,原来自信除了天赋之外,还是有方法的。

《从优秀到卓越》这本书里面,有一个非常有名的“斯托克代尔悖论”。斯托克代尔是美越战争时候一个美国将领,后来被越南人给俘虏了,关在监狱里,他在里面英勇不屈地做斗争,回到美国以后,他被认为是民族英雄。写《从优秀到卓越》这本书的人专门采访了一下他,说为什么那么多人被关在监狱里,只有你可以回来呢?作者希望从斯托克代尔那里得到一种关于“乐观主义精神”的阐述。没想到斯托克代尔回答说,那些死去的人,是因为他们太乐观了。作者很惊讶,为什么呢?乐观不是一个最好的优势吗?斯托克代尔说我们在监狱里,那些乐观的人以为到了五一节,我们可以出去和家里人团聚了,可是到了五一的时候,越南人没有把我们放出去。六一的时候,又以为自己可以自由了,但是过了六一还是没有放掉我们,七一没放,八一没放,十一没放,圣诞没放,元旦还是没放。所以很多乐观的人,在极度乐观的情况下,屡受沉重打击,最后承受不了,在监狱里面就死了。斯托克代尔说,我的方法不是这样的,我的信念是,我一定能够出去,我一定可以回到美国,开始我美满的生活;但是原则是,今年圣诞之前,我肯定出不去。这就是一个非常非常重要的斯托克代尔悖论,既要有极其乐观的信念,同时保持直面残酷现实的原则,这是乐观和谨慎的高度结合,失去哪个方面都不可以。先把那些残酷的现实摆出来,不管你是否喜欢那些坏的方面,先把它们摆出来。


在农村,盖房子之前做的第一件事情,就是把你家的地先夯土。没有人愿意做这事情,看起来又没用,盖房子本来应该是往上盖的,但夯土是往下砸。可如果不夯土,你的楼盖得越高,塌得越狠。可能夯土的时候不是很舒服,但是夯得越实,盖的楼越稳固。夯土的案例告诉我们,在做战略的时候,做任何事情的时候,先把最残忍的事情摆出来,略微悲观一些,把心态放得低一点。在这个情况之上,建立自己的自信,制定出清晰的战略,这是一个非常重要的逻辑。我们来看三个案例:

1)有时候人们会活在一个虚妄的繁荣当中,这其中的自信其实并非真正的自信。隋炀帝在晚期的时候,把自己锁在扬州的陪都里面,外面的世界都不去打理,交给他的一个手下。那个手下跟他说,现在天底下没有什么事,无非就是有些小偷小摸在作乱,没关系。隋炀帝迷迷糊糊地信以为真,在这样的情况下,每天过着骄奢淫逸的生活,还觉得特别自信。然而对于不了解外界情况的自信,其实是自取灭亡的自信,只有对外界的各种情况保持清醒的认识,这种情况下建立的自信,才是真正的自信。

2)过去我们老讲乐观乐观,但是对外界情况不了解的乐观,是盲目的乐观,是虚幻的乐观,是自取灭亡的乐观。再给大家举一个例子,丘吉尔是二战当中非常伟大的一个领袖人物,可以说是他领导了整个英国的二次大战。二战当中,丘吉尔的意志非常坚定,他一直坚定不移地认为,大不列颠不仅仅会生存下来,而且应该成为是一个伟大的国家。下定决心一定要打败希特勒,绝不谈和。当时整个英国只有两件事情交织在一起,一个是德国的飞机天天来轰炸,第二件事情就是丘吉尔通过广播的讲话,那几乎是丘吉尔的广播讲话鼓舞了所有英国人,甚至所有欧洲人,去跟德国进行战斗。这正是丘吉尔乐观的一部分,但是他同时没有忘掉直面现实。丘吉尔建立了一个独立的部门,叫统计局,专门提供真实的情报,他说我不需要美好的梦境,事实胜于梦境,有多残酷的事情你都告诉我,没有关系,我可以承受得起。其实当时的情况怎么样呢?全世界的人都认为英国一定会投降,整个欧洲都投降了,只是不知道英国什么时候投降而已,整个欧洲大陆都被占领了,美国置身事外,希特勒只身对英国作战,情况极其危急。这就是伟大的丘吉尔,正是他这种“直面残酷现实,保持坚定信心”的原则和方法拯救了英国,后来美国、苏联和英国三大反战国家为核心的联盟,共同领导了二次大战的胜利。

3)2000年的时候,麦肯锡帮联想做了一个2001年到2003年的计划,他说联想2003年营业额将达到600亿,但结果到了2003年,还不到200亿,这跟他原来的目标差得太远了。2003年的时候,无论是杨元庆还是柳传志,都站出来对媒体做了很多的解释。事实上,2003年联想不但营业额没有达到预期的目标,战略布局方面也出现了问题。在麦肯锡这个战略报告里边,有三个层面的战略布局。第一层是它的主营PC业务,本来他们希望起到现金流的作用,结果主营业务没有起到这个作用。第二层服务器、手持、外设等相关业务,包括手机,没有突破性增长,甚至有些萎缩。再往外的信息服务,IT集成,结果信息服务没有了,卖给亚信了,联想放弃了这方面的业务。到底出了什么问题呢?是执行的问题吗?其实问题最开始就发生了,在2000年制定目标的时候太过于乐观了,没有直面残酷现实。而且当时制定目标是由上而下制定,过分依赖咨询公司的帮助,整个战略布局出现很大的问题。这是联想的一个教训。

通过这几个案例,我们应该明白,在做战略的时候,做分析是多么重要的一件事情。接下来向大家介绍一种工具,SWOT工具,用它分析对手,而不是评价对手。

1)直面残酷现实(WT):Weakness(弱势)、Threat(危险)(或者是竞争对手的优势和机会);
2)保持坚定信心(SO):Strength(优势)、Opportunity(机会)

如果没有SWOT原则,我们会评价这个对手,谁不行了,谁像瘦死的骆驼,太容易引入评价而不是分析。SWOT里面有两个线索,第一条线是W和T。W就是自己的弱势,T是你在竞争环境当中面临的危险,或者是竞争对手的优势和机会,这是直面残酷现实的部分,相当于夯土,把现实当中最肮脏的部分摆出来,不管你多么不喜欢它们。第二条线是S和O,S指的是你的优势,O是竞争当中的机会,是保持坚定信心的那一部分。


用诸葛亮著名的“隆中对”来对SWOT做一个介绍。






刘备三顾茅庐,终于在第三次见到了诸葛亮。两人在草堂里面彻夜长谈,诸葛亮当时做了一个非常有名的隆中对。其实现在来看,它就是一个非常出色的SWOT的分析,后来刘备的整个战局都是按照这个分析做出来的。

对于刘备来讲,他有什么弱势呢,第一,没有地盘,只是借踞在刘表的荆州里面;第二,没有兵马,几千上万的兵马而已。有将而无兵,只是一个皇叔的名头。刘备有什么样的威胁呢?当时江湖上有很多的豪杰,诸葛亮找到最主要的两个竞争对手,一个是曹操,另外一个是孙权。诸葛亮认为曹操得的天时,挟天子以令诸侯,孙权三代在江南,有地利。刘备没有天时也没有地利,同时他没有地盘没有兵马,这是非常残酷的一个现实。诸葛亮并没有忽略这些残酷的现实,把它全都摆出来。 之后诸葛亮也强调说,你刘备的优势是什么?你的优势第一是人和。曹操的天时,孙权的地利,刘备的人和,刘备在江湖上以道义而闻名,老百姓愿意跟着他,各地的豪杰愿意跟着他。另外刘备以皇叔的身份自居,以刘家正统血脉的身份自居,这是比较得道的,这是两个优势。当然你说它是优势就是优势,说它不是优势也不是,因为它是虚的,不是实实在在的。但是诸葛亮认为虽然是虚的,但仍是很大的优势。那么机会在哪儿呢?诸葛亮说,第一个机会就是刘表的荆州,第二机会是刘璋的益州,就是现在的四川。

果不其然,后来跟刘备相争的就是曹操和孙权这两个竞争对手而已。而刘备得以顺利发展也正是因为他得到了荆州和益州,尽管后来荆州又丢掉了,但是以益州为根据地发展起了自己的地盘。我们来看当时的地图,从地盘上看,蜀国也不算小,而且还比较富裕。这是一个非常漂亮的SWOT分析。诸葛亮是一个非常了不起的战略家。

直面残酷现实(WT)的分析方法有几个要点:

1)1%和99%原则:
即使自己有99%是好的,忘掉它们,因为他们已经是存在的了;关注那1%不好的方面,把它放大100倍来检讨。
即使别人有99%是不好的,忘掉他们,因为这些与你没有关系;关注那1%好的方面,把它放大100倍,看看有没有值得学习的地方。如果有,毫不犹豫地学习。因为反倒是竞争对手1%好的方面,可能会成为你的威胁,对竞争对手千万不要轻易一句话否定,要放百倍注意他。

2)No excuse原则:

要分析竞争对手而不是评价竞争对手。只要说一句贬低竞争对手或者为自己找理由的话,就关上了自己学习的大门。如果你不想做什么事,你有100个借口;如果你想做什么事,你有1009个方法!

3)夯土原则:

把自己的弱势分析得越透彻,把对手的优势看得越清楚,成功的可能性就越大。不要忽略竞争对手的优势,忽略自己的弱势。






在我的管理方法中,每个部门做自己的计划的时候,必须有自己部门的SWOT分析,这帮助我们以清醒而自信的心态面向未来,我受益匪浅。只有对外界的各种情况保持清醒的认识,这种情况下建立的自信,才是真正的自信。---直面残酷现实,保持坚定信念







entry 2006-9-18, 15:01 PM


雨枫前几天写了个文章,http://home.donews.com/donews/article/9/97415.html,列了几个原因,读起来颇有道理的说,不过依然感觉没有摆脱一种典型的评论思路。一件事情成功了,所有的步骤和计划就都是正确的,反之,则都是错误的。其实任何事情都有两面性,现在看上去愚蠢的的东西,一旦应用在成功的场景里,就全都是智慧的表现了,成与败虽然不是说如同掷色子那样毫无规律可言,但是往往其分界点仅仅是一点点的疏忽或大意,所谓高手过招,一招不甚,满盘皆输,就是这个道理,总不能说,一个人输了棋,那么全盘的每一步就都是错的。
雨枫认为淘宝的全民公决是走向错误的一个步骤,caoz不以为然,以马云的智慧,他不会不知道全民公决的下场,壮士断腕,这是他承认失败后为了挽回影响的一点补救罢了。caoz认为,从淘宝全民公决的第一天起,这场战役已经结束了,6月5日我在自己的blog上留了几句话,惹谁别惹马化腾,前击淘宝,后踹猫扑,着实了得。6月7日,又做了个简要总结,腾讯两战全胜,真TMD强悍。但是caoz一直没有把自己的想法整理出来,江湖上最近多事,caoz累了,不仅仅是手累了,心也累了,独守一隅,笑看风云起,也是一种乐事,可惜今天最终还是忍不住寂寞,爬起来刮噪几句。
首先,我们先看看招财进宝这个项目,如果抛开其他干扰因素,仅仅从商业模式分析,招财进宝这个创意是个极为经典的,教科书般的优秀商业模型的典范。一个优秀的商业模式,应具备足够的市场需求,足够的成长空间,可信赖,可持续,这些特征,在招财进宝这个项目上都可以体现,第一,招财进宝是有足够的用户付费需求的产品,这是成功商业模式的基础,请不要被那些反击和质疑所迷惑,相当部分商家愿意为自己发布的商品更加显著的体现而付费,这一需求强烈而且明显。淘宝的团队不是拍着脑袋做出的这个项目,大量的用户需求的采集和整理是存在的,我们即便看投票结果也能看到,8万个付费支持用户,接近40%的付费支持率,其实已经反证了其需求的强烈和明显。第二,这一商业模式完全满足边际效益理论,随着用户群的增加,随着小商家竞争的充分,该商业模式的收费前景极为广阔,以淘宝公开的数据表示,每天3700万的交易额,其中可以看到招财进宝几乎占据了所有显著的位置,可以估算,招财进宝产生的交易额,会达到总交易额的80%左右(作为反向证明,所有没加入招财进宝的商家,都声称交易减少了一个数量级)。第三,竞价,分众,这两个商业模式上最具有价值的概念都体现在了招财进宝这个项目上了,这是事实证明最有效攫取商业利润的一种模式,马云说,一天的收入不够买打印纸,这个烟雾蛋很容易理解,竞价模式是滚雪球式发展的,即便是google,百度这样的公司,在做竞价服务最初的几天里,收入也不够买打印纸的,淘宝的起点,只高不低。第四,相当长的时间内,整个c2c的市场空间仍然是以高速发展的,支持3年的超常规发展,是绰绰有余的。第五,按照成交付费的模式,可以让付费商家有效控制投入产出,实现服务商与小商家双赢效果。同时,成交量的引入也有效的防止和遏止了劣质商家的干扰和影响。虽然在实际操作中,一些恶意行为,欺诈行为仍然会出现,但是这都只是停留在一些具体的产品技术层面,并不是影响整个体系的致命因素,实际上淘宝也在不断的修订这些问题,并且其产品模式越来越趋于合理和完美,那么,为什么招财进宝还会失败?是准备不充分吗?
雨枫说招财进宝没有测试就推出,是失败的一个重要原因,不过没有测试,不代表没有作好准备,我们看看,招财进宝推出的时机以及前因是什么?马云拿下yahoo的时候,已经很明确的表示,搜索+c2c是完美结合,在这里,他隐藏着一个潜台词,那就是搜索竞价。实际上马云入主yahoo后,3721的实名策略全线弱化,竞价策略全线提升,这是第一步棋;淘宝迅猛发展这几年,一直在竞争和口水中度过,今年6月前,竞争格局大势已定,ebay被打击的退居二线,paipai仍然稚嫩,taobao当年恶意推广的舆论硝烟渐渐散去,从周边的竞争舆论环境而言,是淘宝难得的一段好日子,这是第二步。支付宝的使用率逐渐普及,在国内网络支付中介领域几乎没有对手,销售行为监控有了可靠的第三只眼,这是第三步。此外,淘宝的技术升级准备,客户服务准备,乃至舆论准备,从其事后针对一些问题的反应速度来看,还是相当的迅捷。马云是中国互联网叱诧风云的老江湖了,招财进宝是他亲自住抓的一个重头项目,而且显然动用了他最依赖的队伍,不可能毛躁行事,准备不足,并不是失败的借口。
但是,淘宝还是败了,几乎是一触即溃。
中国互联网有很多经典的误区在这个案例里可以体现,比如说,把商业模式奉为经典,以为可以通过正确的甚至优秀的商业模式获得成功,资本市场在中国栽过的跟头,几乎都与此有关。远的不说,ebay本身是在美国已经证明了的,非常优秀而且可持续发展的商业模式,结果在中国,被蛮不讲理的淘宝用不可思议的着数给击溃了,反过来,淘宝刚想脱下游击队服穿上西装,一群蛮不讲理的企鹅冲上来了,caoz不想说,腾讯是幕后黑手,无凭无据,而且恐怕也未必符合事实。但是推波助澜这四个字,腾讯绝对是当之无愧的。拍拍的蚂蚁搬家相当厉害,而且在淘宝宣布“招财进宝”很短的时间之后,就立即宣布自己是最大的免费拍卖站,淘宝苦心经营多年的唯一的优良口碑,被拍拍毫无成本的顺手拿走,这是马云所无法忍受的。比商业模式更重要的,是用户的口碑!
而另一个误区就是往往容易轻信一种看上去合理的市场调研和用户反馈,很多商家向淘宝反映,他们愿意支付一笔费用以换取更好的位置,有两个可以作为对比的案例,当年可口可乐曾经做过市场调查,以为他们的用户愿意接受某种改变,结果,造就了百事可乐的一夜成名。而另一个是两年前的奇瑞汽车,错信了一些车友在网上写的反馈,很多车友说,奇瑞车什么都好,就是发动机不好,如果换个好发动机,贵一些也可以,结果,配备宝马发动机而价格又提升了一截的旗云惨遭滑铁卢,风云旗云销量双双下降,直接导致孙勇下台(直到今天,整合后的新旗云仍然以廉价的改进型的老发为主力,才换来了第二春)。任何时候,你都不能轻视那些沉默的人们,他们不表态,不代表他们没有态度,不要改变现状,就是他们的态度!
马云并不是资本的奴才,也不是纯粹的本本主义者,他之所以能够挺过中国互联网最黑暗的年代,对这些误区还是有一定的抵抗力的,但是他仍然输在了两点,一是急躁了,正如雨枫所言,他把招财进宝的位置设置的太多了,他等于是强迫把淘宝的商家分成了两派,要不你跟我玩,要不你没的玩,没的选择,强烈的反弹由此而生,如果他只拿少数的位置,或者只从少数的词开始做,总会有一些中间力量会沉默,至少反对的声音会少很多,第二是低估了竞争对手,低估了拍拍和马化腾。为什么跨国企业在中国市场上不灵光?主要是跨国企业受制于管理制度和管理体系,缺乏一种敏锐的市场判断力和决断力,所以往往不能把握市场上瞬间即逝的战机,可以看出来一点,马云的调整速度是很快的,当他发现反弹和一些不良反映的时候,短短几天内策略就做出了多次重大调整,但是这次,他的对手不再是总慢他一拍的ebay了,而是同样在江湖里滚打出来的马化腾,高手过招,要的就是那一瞬的感觉,仅仅几天,拍拍的动作同样的快,发声明,搞活动,做奖励计划,每一招都是瞄着对手的命门。更令人瞠目结舌的是,在这期间,还有余力敲打一下有些扎刺的donews,这一战下来,caoz真觉得自己够幸运,幸好没得罪过腾讯,惹谁别惹马化腾,有感而发啊。
但是,马云是不是就彻底输了呢?还是那句话,全民公决是一种壮士断腕的举动,却不是一种受降的举动,实际上,这次招财进宝项目的动作,淘宝并没有失去其最关键的人群,也就是大量的买家用户,买家用户并不关心你的收费情况,也不关心网络上的口水仗,他们只关心能不能买到他们心仪的东西而已,由于有这些人群的存在,以及大量支持招财进宝的用户群,淘宝即便坚持下来,也不会受到致命的伤害,而且,招财进宝的收入,还会源源不绝且越来越丰厚,如果马云只追求财务报表和公司赢利水平,那么,这个故事完全会是另一种结局,但是,马云不能容忍的是拍拍借机迅速做大,更不能容忍自己的口碑和品牌被人攫取,全民公决马云的潜台词是“干,老子我还玩的起,谁也别tmd想浑水摸鱼”。
有些事情,答案就是这么简单,对比一下,华为为什么收购港湾?是为了产品?技术?还是财务报表?其实任正非的潜台词是“看TMD哪个二五崽还敢跟我叫板”。
不过,说来腾讯还是淘宝的徒弟,这次拍拍对付淘宝的着数,和当年淘宝对付Ebay,还是满象的,应了那句话,出来混,迟早要还的。这一仗结束了,但是这个故事没有结束,大幕刚刚拉开,好戏还在后面。




entry 2006-9-10, 12:45 PM
Ubuntu 6.06使用手冊
維護者 ssh



非官方 Ubuntu 5.04 使用者手冊正體中文版 (http://www.ubuntu.org.tw/ubguide/) by SSH 以及 whisky
開始的第一步
什麼是 Linux ?
http://linux.vbird.org/linux_basic/0110wha...php#whatislinux
http://zh.wikipedia.org/wiki/Linux
什麼是 distribution (distro) ?
http://linux.vbird.org/linux_basic/0110wha...p#torvalds_dist
什麼是 Ubuntu ?
http://www.ubuntu.com/ubuntu
http://zh.wikipedia.org/wiki/Ubuntu
誰是 Mark Shuttleworth ?
http://www.markshuttleworth.com/
http://zh.wikipedia.org/wiki/%E9%A9%AC%E5%...%B2%83%E6%96%AF
何處可以看到 Ubuntu 畫面擷取?
http://shots.osdir.com/slideshows/slidesho...+rc+screenshots
何處可以找到 Ubuntu 所有的程式/函式庫的清單?
http://packages.ubuntu.com/dapper/allpackages.en.txt.gz
http://packages.ubuntu.com/dapper/
http://distrowatch.com/table.php?distribution=ubuntu
何處可以下載?
http://www.ubuntu.com/download
何處可以*免費*索取官方光碟片?
http://shipit.ubuntu.com
申請索取後通常 4 ~ 6 個星期後會送到指定地址

何處可以找到更多關於 Ubuntu 的說明與幫助?
桌面選單上 系統 -> 關於 Ubuntu
Official Documentation Website (http://help.ubuntu.com)
Official User Documentation (wiki) (https://wiki.ubuntu.com/UserDocumentation)
Mailing lists (http://www.ubuntu.com/community/lists)
Web forums (http://www.ubuntuforums.org/)
Ubuntu 正體中文站 (http://www.ubuntu.org.tw/)
IRC Channel (irc://irc.freenode.net/ubuntu)
IRC Ubuntu-tw Channel (irc://irc.freenode.net/ubuntu-tw)
何處可以找到新的程式?
http://gnomefiles.org/
https://wiki.ubuntu.com/LoopList
http://freshmeat.net/
http://sourceforge.net/
何處可以找到美化桌面?
http://art.ubuntu.com/
http://gnome-look.org/
http://art.gnome.org/
我該如何自動安裝一些額外的軟體?
您可以參考 Automatx (Automated GUI installaction script) (http://ubuntuforums.org/showthread.php?t=177646) 友善的 Script,您可以很簡單安裝多媒體播放編碼、額外的字型、archivators、plugins以及有用的程式。

取得 Ubuntu 指南
wget http://wiki.ubuntu.org.tw/index.php/Ubuntu6.06Guidetw
安裝 Ubuntu
Ubuntu 安裝手冊
套件庫
套件庫區別
main Ubuntu 官方維護的自由軟體。
restricted Ubuntu 官方維護的非自由軟體。
universe 非 Ubuntu 官方維護的自由軟體。
multiverse 非 Ubuntu 官方維護的非自由軟體。
如何新增其他的套件庫?
請參閱 #基本備註
您可以透過 Synaptic 套件管理程式增加其他套件庫,請參閱 #如何用 Synaptic 增加額外套件庫。請參考下面指令,更換套件庫清單。
sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup
sudo gedit /etc/apt/sources.list
用下面內容取代
####
# Dapper
####

# apt.ubtw

deb http://apt.ubuntu.org.tw/ubuntu dapper-updates main restricted universe multiverse
deb-src http://apt.ubuntu.org.tw/ubuntu dapper-updates main restricted universe multiverse

deb http://apt.ubuntu.org.tw/ubuntu dapper main universe multiverse restricted
deb-src http://apt.ubuntu.org.tw/ubuntu dapper main universe multiverse restricted

deb http://apt.ubuntu.org.tw/ubuntu dapper-backports main universe multiverse restricted
deb-src http://apt.ubuntu.org.tw/ubuntu dapper-backports main universe multiverse restricted

deb http://apt.ubuntu.org.tw/ubuntu dapper-security main restricted universe multiverse
deb-src http://apt.ubuntu.org.tw/ubuntu dapper-security main restricted universe multiverse


# ubtw
deb http://apt.ubuntu.org.tw ubtw/
deb http://apt.ubuntu.org.tw ubtw-dapper/
#deb http://apt.ubuntu.org.tw ubtw-testing/

# PLF
# deb http://packages.freecontrib.org/ubuntu/plf/ dapper free non-free
# deb-src http://packages.freecontrib.org/ubuntu/plf/ dapper free non-free
如何用 Synaptic 增加額外套件庫
請參閱 #基本備註
請點選 系統 -> 管理 -> Synaptic 套件管理程式
請點選 設定 -> 套件庫 -> 新增
更新 Ubuntu
如何手動更新 Ubuntu ?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get update
sudo apt-get upgrade
或者
sudo apt-get update; sudo apt-get -y upgrade
如何用更新管理員更新 Ubuntu ?
請參閱 #基本備註
請點選 系統 -> 管理 -> 更新管理員
請點選 檢查 (更新資料)
請點選 安裝更新套件
如何清除已下載套件?
請參閱 #基本備註
sudo apt-get clean
在 Breezy Badger 升級至 Dapper Drake 後,如何重新更新所有設定?
請參閱 #基本備註
sudo update-alternatives --all
或者
sudo update-galternatives --all
新增其他應用程式 (Add-On Applications)
影音
如何安裝音樂播放程式 (amaroK)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
請參閱 #如何安裝播放多媒體編碼?
sudo apt-get install amarok
應用程式 -> 影音 -> amarok
如何安裝聲音編輯軟體 (Audacity)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
請參閱 #如何安裝播放多媒體編碼?
sudo apt-get install audacity
應用程式 -> 影音 -> Audacity
如何安裝播放音樂程式 (Beep Media Player)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install beep-media-player
應用程式 -> 影音 -> Beep Media Player
如何安裝編輯音樂程式 (Cowbell)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install cowbell
應用程式 -> 影音 -> Cowbell Music Organizer
如何安裝擷取DVD軟體 (dvd::rip)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
請參閱 #如何安裝播放多媒體編碼?
請參閱 #如何安裝播放DVD編碼?
請參閱 #如何安裝 Mozilla Firefox 外掛模組多媒體播放程式 (Totem)?
請參閱 #如何安裝 RAR 管理程式 (rar)?
sudo apt-get install dvdrip
sudo apt-get install vcdimager
sudo apt-get install cdrdao
sudo apt-get install subtitleripper
sudo ln -fs /usr/bin/rar /usr/bin/rar-2.80
sudo gedit /usr/share/applications/dvdrip.desktop
將以下內容貼上
[Desktop Entry]
Name=dvd::rip
Comment=dvd::rip
Exec=dvdrip
Icon=/usr/share/perl5/Video/DVDRip/icon.xpm
Terminal=false
Type=Application
Categories=Application;AudioVideo;
存檔
應用程式 -> 影音 -> dvd::rip
如何安裝編輯ID3標籤程式 (EasyTAG)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install easytag
應用程式 -> 影音 -> EasyTAG
如何安裝燒錄 CD/DVD 軟體 (GnomeBaker)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install gnomebaker
應用程式 -> 影音 -> GnomeBaker
如何安裝擷取CD軟體 (Goobox)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
請參閱 #如何安裝播放多媒體編碼?
sudo apt-get install goobox

應用程式 -> 影音 -> 光碟播放程式
如何安裝播放多媒體編碼?
注意 目前所有的編碼都能運作,除了 wmv 檔案

請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install gstreamer0.10-ffmpeg
sudo apt-get install gstreamer0.10-gl
sudo apt-get install gstreamer0.10-plugins-base
sudo apt-get install gstreamer0.10-plugins-good
sudo apt-get install gstreamer0.10-plugins-bad
sudo apt-get install gstreamer0.10-plugins-bad-multiverse
sudo apt-get install gstreamer0.10-plugins-ugly
sudo apt-get install gstreamer0.10-plugins-ugly-multiverse
請參閱 #如何不用重開機下重新啟動 GNOME ?
如何安裝燒錄 CD/DVD 軟體 (K3b)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install k3b
應用程式 -> 影音 -> K3b
如何安裝影片編輯軟體 (Kino)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
請參閱 #如何安裝播放多媒體編碼?
sudo apt-get install kino
sudo apt-get install kinoplus
應用程式 -> 影音 -> Kino
如何安裝播放DVD編碼?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install libdvdcss2
如何安裝 Mozilla Firefox 外掛模組多媒體播放程式 (Totem)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
請參閱 #如何安裝播放多媒體編碼?
請參閱 #如何安裝播放DVD編碼?
sudo apt-get install totem-gstreamer-firefox-plugin
重新啟動 Mozilla Firefox
如何安裝多媒體播放程式 (RealPlayer 10)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install realplay
應用程式 -> 影音 -> RealPlayer 10
如何安裝多媒體播放程式 (xine-ui)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
請參閱 #如何安裝播放多媒體編碼?
請參閱 #如何安裝播放DVD編碼?
sudo apt-get install xine-ui
指定用 xine-ui 播放多媒體檔案
gconftool-2 --type string --set /desktop/gnome/volume_manager/autoplay_dvd_command "xine dvd://"
sudo rm -f /usr/share/applnk/Multimedia/xine.desktop
sudo ln -fs /usr/share/xine/desktop/xine.desktop /usr/share/applications/
sudo cp /usr/share/applications/defaults.list /usr/share/applications/defaults.list_backup
sudo sed -e 's/totem.desktop/xine.desktop/g' /usr/share/applications/defaults.list_backup > /tmp/defaults.list
sudo mv /tmp/defaults.list /usr/share/applications/defaults.lists
請參閱 #如何重新更新 GNOME 面板?
請參閱 #如何重新更新 GNOME 桌面?
如何安裝音樂播放程式 (xmms)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
請參閱 #如何安裝播放多媒體編碼?
安裝 XMMS 面板小程式以及 XMMS 面板。
sudo apt-get install xmms
sudo apt-get install xmms-skins
sudo apt-get install xmms-status-plugin
安裝支援 wma 格式
wget -c http://easylinux.info/uploads/xmms-wma_1.0.4-2_i386.deb
sudo dpkg -i xmms-wma_1.0.4-2_i386.deb

設定 MP3/M3U/WAV 檔案預設用 XMMS 播放
sudo cp /usr/share/applications/defaults.list /usr/share/applications/defaults.list_backup
sudo cp /usr/share/applications/defaults.list /tmp/defaults.list_tmp
sudo sed -e 's/audio\/mpeg=.*/audio\/mpeg=XMMS.desktop/g' /tmp/default.list_tmp > /tmp/defaults.mp3
sudo sed -e 's/audio\/x-mpegurl=.*/audio\/x-mpegurl=XMMS.desktop/g' /tmp/defaults.mp3 > /tmp/defaults.m3u
sudo sed -e 's/audio\/x-wav=.*/audio\/x-wav=XMMS.desktop/g' /tmp/defaults.m3u > /tmp/defaults.list
sudo mv /tmp/defaults.list /usr/share/applications/defaults.list
sudo rm -rf /tmp/defaults.*
請參閱 #如何重新更新 GNOME 桌面?
應用程式 -> 影音 -> XMMS
啟動 XMMS 面板小程式
Ctrl-P -> 一般模組 -> 選擇 'Status Docklet Plugin' 以及點選 '啟動' 並點選確定
如何安裝多媒體播放程式 (RealPlayer 10)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install realplay
應用程式 -> 影音 -> RealPlayer 10
如何安裝串流音樂播放程式 (streamtuner)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install streamtuner
sudo apt-get install streamripper
請參閱 #如何重新更新 GNOME 面板?
應用程式 -> 影音 -> streamtuner
教育
如何安裝 KDE 系列教育軟體?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install kdeedu
應用程式 -> 教育 -> .....
如何安裝模擬星象軟體 (Stellarium)?
請參閱 #基本備註
sudo apt-get install stellarium
sudo gedit /usr/share/applications/stellarium.desktop
將以下
Categories=Application;Science;
內容修改
Categories=Application;Education;
應用程式 -> 教育 -> Stellarium
系統工具
如何安裝及使用Ethereal
如何安裝及使用Ethereal(現在叫做Wireshark)網路協定分析工具。
如何安裝防火牆 (Firestarter)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install firestarter
應用程式 -> 系統工具 -> Firestarter
如何安裝 VMware Player ?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
請參閱 #如何安裝基本編譯程式環境 (build-essential)?
sudo apt-get install linux-headers-`uname -r`
wget http://download3.vmware.com/software/vmpla....1-19317.tar.gz
tar xvzf VMware-player-1.0.1-19317.tar.gz
cd VMware-player-1.0.1-19317
sudo ./vmware-install.pl

安裝過程中,全部以預設值為主
應用程式 -> 系統工具 -> VMware Player
網際網路
如何安裝 P2P 使用端軟體 (aMule)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install amule
應用程式 -> 網際網路 -> aMule
如何安裝 P2P BitTorrent 使用端軟體 (Azureus)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
請參閱 #如何安裝 Mozilla Firefox 外掛模組 J2SE Runtime Environment (JRE)?
sudo apt-get install azureus
應用程式 -> 網際網路 -> Azureus
如何安裝下載檔案管理員 (Downloader for X)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install d4x
請參閱 #如何重新更新 GNOME 面板?
應用程式 -> 網際網路 -> Downloader for X
如何安裝網路封包分析軟體 (Ethereal)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install ethereal
應用程式 -> 網際網路 -> Ethereal
如何安裝 FTP使用端軟體 (gFTP)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install gftp
應用程式 -> 網際網路 -> gFTP
如何安裝 ppp 撥接軟體 (Gnome PPP)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install gnome-ppp
應用程式 -> 網際網路 -> GNOME PPP
如何安裝 Google Earth ?
請參閱 #基本備註
wget -c http://dl.google.com/earth/GE4/GoogleEarthLinux.bin
sudo sh GoogleEarthLinux.bin
安裝路徑是 /usr/local/google-earth
sudo cp /usr/local/google-earth/googleearth.desktop /usr/share/applications/
應用程式 -> 網際網路 -> Google Earth
如何安裝 Mozilla Firefox 外掛模組 J2SE Runtime Environment (JRE)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install sun-java5-jre sun-java5-plugin
若有詢問時,請同意 DLJ 授權。
如何安裝閱讀 RSS/RDF/Atom 程式 (Liferea)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install liferea
應用程式 -> 網際網路 -> Liferea Feed Reader
如何安裝 Mozilla Firefox 外掛模組 Flash 播放程式 (Macromedia Flash)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install flashplugin-nonfree
sudo update-flashplugin
請重新啟動 Mozilla Firefox
如何安裝弱點掃描軟體 (Nessus)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install nessus
應用程式 -> 網際網路 -> Nessus
如何安裝瀏覽器 (Opera)?
請參閱 #基本備註
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
sudo gedit /etc/apt/sources.list
將此行加到檔案最後面
# The Opera web browser repopsitory
deb http://deb.opera.com/opera etch non-free
存檔
sudo apt-get update
sudo apt-get install opera
應用程式 -> 網際網路 -> Opera
如何安裝新聞閱讀程式 (Pan)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install pan

應用程式 -> 網際網路 -> Pan Newsreader
如何安裝 BBS 連線軟體 (PCManX)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install pcmanx-gtk2
應用程式 -> 網際網路 -> PCManX
如何安裝 ADSL 撥接軟體 (RP-PPPoE)?
請參閱 #基本備註
請參閱 #如何安裝基本編譯程式環境 (build-essential)?
wget -c http://easylinux.info/uploads/rp-pppoe-3.6.tar.gz
sudo tar zxvf rp-pppoe-3.6.tar.gz -C /opt/
sudo chown -R root:root /opt/rp-pppoe-3.6/
sudo gedit /usr/share/applications/RP-PPPoE.desktop
請將以下內容貼上
[Desktop Entry]
Name=RP-PPPoE
Comment=RP-PPPoE
Exec=gksudo /opt/rp-pppoe-3.6/go-gui
Icon=
Terminal=false
Type=Application
Categories=Application;Network;
應用程式 -> 網際網路 -> RP-PPPoe
如何安裝網路電話 (Skype)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install skype
應用程式 -> 網際網路 -> Skype
如何安裝電子郵件使用端軟體 (Mozilla Thunderbird)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install mozilla-thunderbird
應用程式 -> 網際網路 -> Thunderbird Mail
美工繪圖
如何安裝 3D 模組工具軟體 (Blender 3d)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install blender
應用程式 -> 美工繪圖 -> Blender 3D modeller
如何安裝編輯流程圖軟體 (Dia)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install dia-gnome
應用程式 -> 美工繪圖 -> Dia
如何安裝圖片瀏覽軟體 (digiKam)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install digikam
應用程式 -> 美工繪圖 -> digiKam
如何安裝相片管理程式 (Picasa)?
請參閱 #基本備註
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
sudo gedit /etc/apt/sources.list
將此段加到檔案後面
# Google Picasa for Linux repository
deb http://dl.google.com/linux/deb/ stable non-free
存檔
sudo apt-get update
sudo apt-get install picasa
應用程式 -> 美工繪圖 -> Picasa
如何安裝出版軟體 (Scribus)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install scribus
應用程式 -> 美工繪圖 -> Scribus
如何安裝觀看 Compiled HTML Help 程式 (xCHM)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install xchm
應用程式 -> 美工繪圖 -> xCHM
軟體開發
如何安裝程式開發環境程式 (Anjuta)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install anjuta
應用程式 -> 軟體開發 -> Anjuta 整合式開發環境
如何安裝網頁設計軟體 (bluefish)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install bluefish
應用程式 -> 軟體開發 -> Bluefish Editor
如何安裝 MonoDevelop (C# IDE)
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install mono mono-gmcs mono-gac mono-utils monodevelop
應用程式 -> 軟體開發 -> MonoDevelop
如何安裝網站設計軟體 (Nvu)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install nvu
應用程式 -> 軟體開發 -> Nvu
如何安裝網頁設計軟體 (quanta plus)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install quanta
應用程式 -> 軟體開發 -> Quanta Plus
如何安裝嵌入式系統開發環境 (arm-elf-tools)?
想瞭解更多這方面的資訊,可以參考uClinux (http://www.uclinux.org), Linux 2.6 for MMU-less ARM (http://opensrc.sec.samsung.com), The ARM Linux Project (http://www.arm.linux.org.uk/)
請參閱 #基本備註
以Linux 2.6 for MMU-less ARM為例 (GCC 2.95.3 based)
sudo wget http://opensrc.sec.samsung.com/download/ar...ols-20040427.sh
sudo chmod +x ./arm-elf-tools-20040427.sh
sudo ./arm-elf-tools-20040427.sh
應用程式 -> 軟體開發 -> arm-elf-tools
辦公
如何安裝 Mozilla Firefox 外掛模組 PDF 閱讀程式 (Adobe Reader)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install acroread
sudo apt-get install mozilla-acroread
sudo apt-get install acroread-plugins
應用程式 -> 辦公 -> Adobe Reader
如何安裝帳戶管理程式 (GnuCash)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install gnucash
sudo rm -fr /usr/share/gnome/apps/Applications/
sudo gedit /usr/share/applications/GnuCash.desktop
將以下內容貼上
[Desktop Entry]
Name=GnuCash
Comment=GnuCash Personal Finance
Exec=gnucash
Icon=/usr/share/pixmaps/gnucash/gnucash-icon.png
Terminal=false
Type=Application
Categories=Application;Office;
存檔
應用程式 -> 辦公 -> GnuCash
如何安裝專案管理程式 (Planner)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install planner
應用程式 -> 辦公 -> 專案管理
遊戲
如何安裝遊戲 Tuxracer ?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install planetpenguin-racer
sudo apt-get install planetpenguin-racer-data
sudo apt-get install planetpenguin-racer-extras
應用程式 -> 遊戲 -> Planet Penguin Racer
如何安裝遊戲 Frozen-Bubble ?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install frozen-bubble
應用程式 -> 遊戲 -> Froze-Bubble
如何安裝遊戲 Scorched3D ?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install scorched3d
應用程式 -> 遊戲 -> Scorched 3D
附屬應用程式
如何安裝桌面小程式 (gDesklets)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install gdesklets
應用程式 -> 附屬應用程式 -> gDesklets
如何安裝 WinPopup (LinPopUp)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
請參閱 # 如何安裝 Samba 伺服器提供 檔案/資料夾 分享服務?
sudo apt-get install linpopup
sudo gedit /usr/share/applications/linpopup.desktop
將以下內容放到新檔案
[Desktop Entry]
Name=LinPopUp
Comment=LinPopUp
Exec=linpopup
Icon=/usr/share/pixmaps/linpopup.xpm
Terminal=false
Type=Application
Categories=Application;Utility;
將此檔存檔
請參閱 #如何重新更新 GNOME 面板?
應用程式 -> 附屬應用程式 -> LinPopUp
未分類
如何安裝基本編譯程式環境 (build-essential)?
請參閱 #基本備註
sudo apt-get install build-essential
如何安裝開機服務啟動管理員 (BUM)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install bum
系統 -> 管理 -> BootUp-Manager
如何安裝 Easy Ubuntu ?
請參閱 #基本備註
Easy Ubuntu 是個方便的工具,幫助使用者便利安裝關於多媒體編碼、字體、Macromedia Flash 以及 Sun Java。
wget http://robotgeek.org/eu/easyubuntu-3.0.tar.gz
tar -zxf easyubuntu-3.0.tar.gz
cd easyubuntu
sudo python easyubuntu.py
如何安裝編輯分割區程式 (GParted)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install gparted
系統 -> 管理 -> Gnome 分割區編輯器
如何安裝 RAR 管理程式 (rar)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install rar
如何安裝其他字體?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install xfonts-intl-arabic
sudo apt-get install xfonts-intl-asian
sudo apt-get install xfonts-intl-chinese
sudo apt-get install xfonts-intl-chinese-big
sudo apt-get install xfonts-intl-european
sudo apt-get install xfonts-intl-japanese
sudo apt-get install xfonts-intl-japanese-big
sudo apt-get install xfonts-intl-phonetic
sudo apt-get install gsfonts-x11
sudo apt-get install msttcorefonts
sudo fc-cache -f -v
請參閱 #如何不用重開機下重新啟動 GNOME ?
如何安裝其他字體(AR PL New Sung) ?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install ttf-arphic-newsung
sudo fc-cache -v
請參閱 #如何不用重開機下重新啟動 GNOME ?
如何安裝其他字體(cwTTF) ?
請參閱 #基本備註
wget http://cle.linux.org.tw/fonts/cwttf/deb/tt...s_1.0-1_all.deb
wget http://cle.linux.org.tw/fonts/cwttf/deb/tt...b_1.0-1_all.deb
wget http://cle.linux.org.tw/fonts/cwttf/deb/tt...i_1.0-1_all.deb
wget http://cle.linux.org.tw/fonts/cwttf/deb/tt...g_1.0-1_all.deb
wget http://cle.linux.org.tw/fonts/cwttf/deb/tt...n_1.0-1_all.deb
sudo dpkg -i ttf-cwtex-center-cwfs_1.0-1_all.deb
sudo dpkg -i ttf-cwtex-center-cwheib_1.0-1_all.deb
sudo dpkg -i ttf-cwtex-center-cwkai_1.0-1_all.deb
sudo dpkg -i ttf-cwtex-center-cwming_1.0-1_all.deb
sudo dpkg -i ttf-cwtex-center-cwyen_1.0-1_all.deb
sudo fc-cache -v
請參閱 #如何不用重開機下重新啟動 GNOME ?
如何安裝輸入法 (gcin)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install gcin
im-switch -z zh_TW -s gcin
系統 -> 管理 -> gcin進階設定
請按 Ctrl + Space 啟動輸入法
如何安裝輸入法 (scim)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install scim
sudo apt-get install scim-chinese
sudo apt-get install scim-config-socket
sudo apt-get install scim-gtk2-immodule
sudo apt-get install scim-qtimm
sudo apt-get install scim-chewing
sudo apt-get install scim-tables-zh
系統 -> 管理 -> SCIM輸入法設定
如何切換 gcin / scim 輸入法?
請參閱 #基本備註
sudo apt-get im-switch
將 gcin 設定為預設輸入法
im-switch -s gcin
將 scim 設定為預設輸入法
im-switch -s scim
改變預設輸入法時,請登出系統,再重新登入系統
如何安裝 Windows 模擬程式 (Wine)
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo gedit /etc/apt/sources.list
在檔案最後面加上
# Repository for wine
deb http://wine.budgetdedicated.com/apt dapper main
deb-src http://wine.budgetdedicated.com/apt dapper main
存檔
sudo apt-get update
sudo apt-get install wine
詳細資訊可以參考 http://www.winehq.com/
其他桌面環境
如何安裝 KDE
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install kubuntu-desktop
系統 -> 離開 -> 登出
按下F10選擇KDE
如何安裝 XFCE
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install xubuntu-desktop
系統 -> 離開 -> 登出
按下F10選擇 XFCE
Eye Candy
如何安裝 Xgl/Compiz (Nvidia)
想要了解更多這方面資訊,可以參考 http://ubuntuforums.org/showthread.php?t=148351
請參閱 #基本備註
請參閱 #如何安裝顯示卡驅動程式 (NVIDIA)?
sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf_backup
sudo gedit /etc/X11/xorg.conf
找到此段敘述
Section "Module"
Load "i2c"
Load "bitmap"
...
Load "type1"
Load "vbe"
EndSection
請將這兩行敘述註解
# Load "dri"
# Load "GLcore"
請確定是否有此行
Load "glx"
往下再找到此段敘述
Section "Device"
Identifier "NVIDIA Corporation NV34M [GeForce FX Go5200]"
Driver "nv"
BusID "PCI:1:0:0"
EndSection
請修改為
Section "Device"
Identifier "NVIDIA Corporation NV34M [GeForce FX Go5200]"
Driver "nvidia"
BusID "PCI:1:0:0"
Option "RenderAccel" "true"
Option "AllowGLXWithComposite" "true"
EndSection
candyz 說明:nv vs nvidia 以及 ati vs fglrx 差別是 nv and ati 是 open source 的驅動程式是沒有 3d accel 功能,而nvidia fglrx 則是顯示卡廠商發表出來的驅動程式有 3d accel 功能。 nvidia 和 fglrx 驅動程式都要另外裝,預設是用 nv and ati 驅動程式。而要跑 Xgl 則必須要用 3d accel 功能,所以必須使用 nvidia 和 fglrx 驅動程式

往下再找到此段敘述
Section "Screen"
Identifier "Default Screen"
Device "NVIDIA Corporation NV34M [GeForce FX Go5200]"
Monitor "Generic Monitor"
DefaultDepth 16
將顏色改變成 24 bit
DefaultDepth 24
存檔離開
安裝 Xgl/Compiz
sudo apt-get install compiz xserver-xgl libgl1-mesa xserver-xorg libglitz-glx1 compiz-gnome
sudo cp /etc/gdm/gdm.conf-custom /etc/gdm/gdm.conf-custom-backup
sudo gedit /etc/gdm/gdm.conf-custom
當檔案後面增加以下內容
[servers]
0=Xgl
[server-Xgl]
name=Xgl server
command=/usr/bin/Xgl :0 -fullscreen -ac -accel glx:pbuffer -accel xv:fbo
flexible=true
新增 Compiz 啟動程式
sudo gedit /usr/bin/thefuture
將以下敘述內容貼上
#!/bin/bash
gnome-window-decorator &
compiz --replace gconf decoration wobbly fade minimize cube rotate zoom scale move resize place switcher &
xmodmap /usr/share/xmodmap/xmodmap.us
存檔離開
給予執行能力
sudo chmod 755 /usr/bin/thefuture
啟動 Compiz
thefuture
自動執行 Compiz
系統 -> 偏好設定 -> 作業階段 -> 初使啟動程式 -> 新增 -> /usr/bin/thefuture
或者
echo "/usr/bin/thefuture" >> .gnomerc
請參閱 #如何不用重開機下重新啟動 GNOME ?
困難排除
如果 Xgl/Compiz 效果沒有呈現,請確定是否有執行 thefuture
如果在移動視窗時候感覺有點慢,請用 應用程式 -> 系統工具 -> 組態編輯器
apps/compiz/general/screen0/options
關閉 以及設定 refresh 為 60

若安裝最後有些問題,試著重開機一次看看
如果您使用的鍵盤設定不是預設,請在 系統 -> 偏好設定 -> 鍵盤 重新設定鍵盤
您可以設定 Windows 鍵為 Super-key
若想要停掉 Xgl/Compiz 請 將 /etc/gdm/gdm.conf-custom 關掉,以及關閉自動啟動 thefuture
小技巧
切換視窗 = Alt + Tab
排列所有視窗在桌面上 = F12
切換桌面 = Ctrl + Alt + 左/右 方向鍵
切換正在使用桌面 = Ctrl + Shift + Alt + 左/右 方向鍵
選轉方塊切換桌面 = Ctrl + Alt + 滑鼠左鍵
透明化視窗 = 適用於有 "transset" 功能的視窗
一次放大桌面 = Super-key + 右鍵
手動放大桌面 = Super-key + 滑鼠捲軸往上
手動縮小桌面 = Super-key + 滑鼠捲軸往下
移動視窗至另一個桌面 = Alt + 滑鼠左鍵
附著別的視窗 = Shift + 滑鼠左鍵
如何改變開機啟動圖檔 ?
請參閱 #基本備註
接下來會安裝 minimalistic splash screen ,這是開機和關機時的畫面
wget -c http://www.users.on.net/~stubby/usplash-minimalistic_0.1.deb
sudo dpkg -i usplash-minimalistic_0.1.deb
sudo update-alternatives --config usplash-artwork.so
選擇 minimalistic alternative
重新啟動電腦就會看到效果
商業應用程式
如何安裝 Windows 9X/ME/2000/XP (Win4Lin)?
http://www.win4lin.com
如何安裝 Windows 應用程式 (CrossOver Office)?
http://www.codeweavers.com
如何安裝 Windows 遊戲?
http://www.transgaming.com
使用者管理
如何 設定/改變/啟動 root 管理者密碼?
請參閱 #基本備註
sudo passwd root
如何關閉 root 管理者帳號?
請參閱 #基本備註
sudo passwd -l root
如何允許 root 管理者登入 GNOME?
請參閱 #基本備註
請參閱 # 如何 設定/改變/啟動 root 管理者密碼?
系統 -> 管理 -> 登入畫面
登入畫面
安全性 標籤 -> 安全性 -> 允許本地端系統管理員登入 (選取)

如何在終端機模式內切換成 root 管理者?
請參閱 #基本備註
sudo -s -H
Password: <使用者密碼>
如何 新增/編輯/刪除 系統使用者?
請參閱 #基本備註
系統 -> 管理 -> 使用者及群組
使用者及群組
使用者 標籤 -> 新增使用者/屬性/刪除

或是

sudo useradd jim
sudo userdel jim
參閱更多資訊
man usermod
如何 新增/編輯/刪除 系統群組?
請參閱 #基本備註
系統 -> 管理 -> 使用者及群組
使用者及群組
群組 標籤 -> 新增群組/屬性/刪除

如何自動登入 GNOME (這是不安全作法)?
請參閱 #基本備註
系統 -> 管理 -> 登入畫面
登入畫面
安全性 標籤 -> 啟用自動登入 (選取) -> 使用者:自動登入的使用者名稱
如何允許更多 sudoers ?
請參閱 #基本備註
sudo visudo
將以下的內容加到檔案最後
使用者名稱 ALL=(ALL) ALL
儲存檔案
'或者'

將使用者加入 admin 群組
sudo adduser 使用者名稱 admin
如何在使用 "sudo" 時候關掉詢問密碼 (這是不安全作法)?
請參閱 #基本備註
sudo visudo
找出此行
使用者名稱 ALL=(ALL) ALL
改成以下內容
使用者名稱 ALL=(ALL) NOPASSWD: ALL
儲存檔案
如何立即切斷 "sudo" session ?
請參閱 #基本備註
sudo -K
如何改變 檔案/資料夾 權限?
請參閱 #基本備註
用右鍵點選 檔案/資料夾 -> 屬性

權限 標籤 -> 讀取/寫入/執行 (選取 擁有者/群組/其他 的權限)

如何改變 檔案/資料夾 擁有者?
請參閱 #基本備註
sudo chown 使用者名稱 /檔案或資料夾的位置
如何改變 檔案/資料夾 群組擁有者?
請參閱 #基本備註
sudo chgrp 使用者名稱 /檔案或資料夾的位置
硬體
如何安裝顯示卡驅動程式 (NVIDIA)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install nvidia-glx
sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf_backup
sudo nvidia-glx-config enable
請參閱 #如何不用重開機下重新啟動 GNOME ?
如何關閉在 GNOME 啟動時的 NVIDIA 圖示?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo nvidia-xconfig --no-logo
請參閱 #如何不用重開機下重新啟動 GNOME ?
如何安裝顯示卡驅動程式 (ATI)?
請參閱 http://wiki.cchtml.com/index.php/Ubuntu_Installation_Guide
如何辨識數據機晶片?
請參閱 #基本備註
安裝辨識數據晶片程式
請參閱 #如何安裝基本編譯程式環境 (build-essential)?
wget -c http://easylinux.info/uploads/scanModem.gz
gunzip -c scanModem.gz > scanModem
chmod +x scanModem
sudo cp scanModem /usr/bin/
辨識數據晶片
sudo scanModem
gedit Modem/ModemData.txt
如何安裝數據機驅動程式 (SmartLink)?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
sudo apt-get install sl-modem-daemon
如何設定 PalmOS 裝置?
請參閱 #基本備註
sudo gedit /etc/udev/rules.d/10-custom.rules
請加入此行敘述
BUS="usb", SYSFS{product}="Palm Handheld*", KERNEL="ttyUSB*", NAME{ignore_remove}="pilot", MODE="666"
存檔
系統 -> 偏好設定 -> PlamOS 裝置
按照畫面指示進行
如何列出硬碟分割區清單?
請參閱 #基本備註
sudo fdisk -l
或是點選 系統 -> 管理 -> 磁碟管理
如何列出硬碟使用狀態?
請參閱 #基本備註
df -T -h
或是點選 系統 -> 管理 -> 磁碟管理
如何列出已掛載裝置?
請參閱 #基本備註
mount
如何列出 PCI 裝置?
請參閱 #基本備註
lspci
如何列出 USB 裝置?
請參閱 #基本備註
lsusb
如何加快 CD/DVD-ROM 讀取速度?
請參閱 #基本備註
假設 CD/DVD-ROM 的位置是 /dev/cdrom

sudo hdparm -d1 /dev/cdrom
sudo cp /etc/hdparm.conf /etc/hdparm.conf_backup
sudo gedit /etc/hdparm.conf
在檔案最後加上
/dev/cdrom {
dma = on
}
儲存檔案
如何手動 掛載/卸載 CD/DVD-ROM,並且顯示所有被隱藏以及相關的 檔案/資料夾?
請參閱 #基本備註
假設 CD/DVD-ROM 的位置是 /media/cdrom0/

掛載 CD/DVD-ROM
sudo mount /media/cdrom0/ -o unhide
卸載 CD/DVD-ROM
sudo umount /media/cdrom0/
如何強制手動卸載 CD/DVD-ROM?
請參閱 #基本備註
假設 CD/DVD-ROM 的位置是 /media/cdrom0

sudo umount /media/cdrom0 -l
如何不需重新開機重新掛載 /etc/fstab?
請參閱 #基本備註
sudo mount -a
CD/DVD 燒錄
如何格式化 CD-RW/DVD-RW
請參閱 #基本備註
假設 CD/DVD-ROM 的位置是 /dev/cdrom

sudo umount /dev/cdrom
cdrecord dev=/dev/cdrom blank=fast
如何將 檔案/資料夾 燒錄至 CD/DVD
請參閱 #基本備註
nautilus burn:///
檔案瀏覽器
前往 選單 -> CD/DVD 光碟製作程式

將 檔案/資料夾 拖曳到視窗

檔案 選單 -> 燒錄光碟 -> 燒錄

如何將映像檔 (ISO) 燒錄至 CD/DVD
請參閱 #基本備註
用右鍵點選映像檔 (ISO) -> 燒錄光碟 -> 燒錄

如何複製 CD/DVD?
如何從 CD/DVD 建立映像檔 (ISO)
請參閱 #基本備註
假設 CD/DVD-ROM 的位置是 /dev/cdrom

sudo umount /dev/cdrom
dd if=/dev/cdrom of=file.iso bs=1024
如何從資料夾建立影像檔 (ISO)?
請參閱 #基本備註
mkisofs -o file.iso /資料夾/
如何產生 MD5 檢查碼檔案?
請參閱 #基本備註
md5sum file.sio > file.iso.md5
如何檢查此檔的 MD5 檢查碼?
請參閱 #基本備註
假設 file.iso 以及 file.iso.md5 是在相同目錄下

md5sum -c file.iso.md5
如何不需透過燒錄而 掛載/卸載 影像檔 (ISO)?
請參閱 #基本備註
掛載 ISO 檔案
sudo mkdir /media/iso
sudo modprobe loop
sudo mount -t iso9660 -o loop file.iso /media/iso/
卸載 ISO 檔案
sudo umount /media/iso
如何 設定/改變 CD/DVD 燒錄速度?
請參閱 #基本備註
應用程式 -> 系統工具 -> 組態編輯器
組態設定
/ -> apps -> nautilus-cd-burner -> default_speed (設定/改變 此燒錄速度)
如何啟動 CD/DVD 燒錄 burnproof ?
請參閱 #基本備註
應用程式 -> 系統工具 -> 組態編輯器
組態設定
/ -> apps -> nautilus-cd-burner -> burnproff (勾選)
如何啟動 CD/DVD 燒錄 overburn ?
請參閱 #基本備註
應用程式 -> 系統工具 -> 組態編輯器
組態設定
/ -> apps -> nautilus-cd-burner -> overburn (勾選)
網路
如何設定 Google Talk ?
應用程式 -> 網際網路 -> Gaim 網路即時通
選擇 [帳號清單] -> [新增]
輸入以下資訊
通訊協定 : Jabber
帳號 : Gmail使用者名稱 在@gmail.com前的字串
密碼 : 輸入 Gmail 密碼
點選 [顯示細節]
Jabber 選項 : [TLS 可用則用] 勾選
通訊埠 : 5222
連結伺服器 : talk.google.com
儲存
請參考 [如何為 Google Talk 設定 GAIM ? (http://www.google.com/support/talk/bin/answer.py?answer=24073)]
如何安裝 Network-Manager 面板程式?
請參考#基本備註
請在面板增加 程式狀態通知區
sudo apt-get install network-manager-gnome
nm-applet &
因為 Ubuntu 有修改過 Network-Manager ,所以若要想要管理無線網卡部份,請繼續下列動作

sudo cp /etc/network/interfaces /etc/network/interfaces_bkup
sudo gedit /etc/network/interfaces
假設無線網卡是 eth1

請找到此段
auto eth1
iface eth1 inet dhcp
wireless-essid Shih_AP
將此三行註解
#auto eth1
#iface eth1 inet dhcp
#wireless-essid Shih_AP
存檔
重新開機
如何啟動/關閉網路連線?
請參閱#基本備註
系統 -> 管理 -> 網路
網路連線
連線分頁 -> 選擇 "乙太網連線" -> 啟動/停止啟動
如何設定網路連線?
請參閱#基本備註
系統 -> 管理 -> 網路
網路連線
連線分頁 -> 選擇 "乙太網連線" -> 屬性
介面屬性 -> 啟用這個連線 (勾選)
連線設定 -> 設定 : DHCP / 固定 IP 位址
DNS 分頁 -> DNS 伺服器 -> 新增/刪除
請參閱 #如何啟動/關閉網路連線?
如何設定撥接連線?
請參閱#基本備註
設定撥接
sudo pppconfig
連接撥接
sudo pon provider_name
撥接斷線
sudo poff
如何設定頻寬連線?
請參閱#基本備註
sudo pppoeconf
如何修改電腦名稱?
請參閱 #基本備註
系統 -> 管理 -> 網路
網路設定
一般 分頁 -> 主機設定 -> 主機名稱: 指定您的電腦名稱
儲存並關掉所有程式,重新開機
* Read #General Notes
* Read #How to install Samba Server for files/folders sharing service
如何修改電腦敘述?
請參閱 #基本備註
請參閱 #如何安裝 Samba 伺服器提供 檔案/資料夾 分享服務?
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
sudo gedit /etc/samba/smb.conf
找到此行
...
server string = %h server (Samba, Ubuntu)
...
將此行換掉
server string = 新的電腦敘述
儲存此檔案
sudo testparm
sudo /etc/init.d/samba restart
如何修改電腦網域/工作群組?
請參閱 #基本備註
請參閱 #如何安裝 Samba 伺服器提供 檔案/資料夾 分享服務?
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
sudo gedit /etc/samba/smb.conf
找到此行
...
workgroup = MSHOME
...
將此行換掉
workgroup = new_domain_or_workgroup
儲存此檔案
sudo testparm
sudo /etc/init.d/samba restart
如何動態使用免費 DynDNS 服務指定的電腦主機名稱?
請參閱 #基本備註
請參閱 #如何新增其他的套件庫?
請在 http://www.dyndns.com/services/dns/dyndns 註冊免費動態 DNS
sudo apt-get install ipcheck
sudo gedit /etc/ppp/ip-up.d/dyndns_update.sh
請將以下敘述寫入新檔案內
#!/bin/sh
USERNAME=myusername
PASSWORD=mypassword
HOSTNAME=myhostname.dyndns.org
cd /root/
if [ -f /root/ipcheck.dat ]; then
ipcheck -r checkip.dyndns.org:8245 $USERNAME $PASSWORD $HOSTNAME
else
ipcheck --makedat -r checkip.dyndns.org:8245 $USERNAME $PASSWORD $HOSTNAME
fi
存檔
sudo chmod 700 /etc/ppp/ip-up.d/dyndns_update.sh
sudo sh /etc/ppp/ip-up.d/dyndns_update.sh
如何簡單分享資料夾?
請參閱 #基本備註
請參閱 #如何安裝 Samba 伺服器提供 檔案/資料夾 分享服務?
在資料夾上點選右鍵 -> 共享資料夾
共享資料夾 -> 分享透過: 選擇 "SMB"
分享屬性 -> 名稱: 指定要分享名稱
如何瀏覽網路芳鄰?
請參閱 #基本備註
假設所有網路連線都是正常,如果還是無法找到電腦名稱或者網路資料夾,試著直接存取方式,請參閱 #如何直接存取網路資料夾?

位置 -> 網路伺服器
如何直接存取網路資料夾?
請參閱 #基本備註
假設網路連線是正常

網路電腦的IP:192.168.0.1

分享資料夾名稱:linux

按 'Alt+F2' (執行程式)並輸入
smb://192.168.0.1/linux
如何手動 掛載/卸載 網路資料夾,並允許所有使用者能讀取?
請參閱 #基本備註
請參閱 #如何安裝 Samba 伺服器提供 檔案/資料夾 分享服務?
假設網路連線是正常

網路電腦 IP:192.168.0.1

網路電腦使用者帳號:myusername

網路電腦使用者密碼:mypassword

分享資料夾名稱:linux

本機掛載資料夾名稱:/media/sharename

掛載網路資料夾
sudo mkdir /media/sharename
sudo mount //192.168.0.1/linux /media/sharename/ -o username=myusername,password=mypassword
卸載網路資料夾
sudo umount /media/sharename/
如何手動 掛載/卸載 網路資料夾,並允許所有使用者能 讀取/寫入?
請參閱 #基本備註
請參閱 #如何安裝 Samba 伺服器提供 檔案/資料夾 分享服務?
假設網路連線是正常

網路電腦 IP:192.168.0.1

網路電腦使用者帳號:myusername

網路電腦使用者密碼:mypassword

分享資料夾名稱:linux

本機掛載資料夾名稱:/media/sharename

掛載網路資料夾
sudo mkdir /media/sharename
sudo mount //192.168.0.1/linux /media/sharename/ -o username=myusername,password=mypassword,dmask=777,fmask=777
卸載網路資料夾
sudo umount /media/sharename/
如何開機時自動掛載網路資料夾,並允許所有使用者能讀取?
請參閱 #基本備註
請參閱 #如何安裝 Samba 伺服器提供 檔案/資料夾 分享服務?
假設網路連線是正常

網路電腦 IP:192.168.0.1

網路電腦使用者帳號:myusername

網路電腦使用者密碼:mypassword

分享資料夾名稱:linux

本機掛載資料夾名稱:/media/sharename

sudo mkdir /media/sharename
sudo gedit /root/.smbcredentials
請將以下內容貼至新檔案
username=myusername
password=mypassword
存檔
sudo chmod 700 /root/.smbcredentials
sudo cp /etc/fstab /etc/fstab_backup
sudo gedit /etc/fstab
將以下敘述加入最後一行
//192.168.0.1/linux /media/sharename smbfs credentials=/root/.smbcredentials 0 0
存檔
請參閱 #如何不需重新開機重新掛載 /etc/fstab?
如何開機時自動掛載網路資料夾,並允許所有使用者能 讀取/寫入?
請參閱 #基本備註
請參閱 #如何安裝 Samba 伺服器提供 檔案/資料夾 分享服務?
假設網路連線是正常

網路電腦 IP:192.168.0.1

網路電腦使用者帳號:myusername

網路電腦使用者密碼:mypassword

分享資料夾名稱:linux

本機掛載資料夾名稱:/media/sharename

sudo mkdir /media/sharename
sudo gedit /root/.smbcredentials
請將以下內容貼至新檔案
username=myusername
password=mypassword
存檔
sudo chmod 700 /root/.smbcredentials
sudo cp /etc/fstab /etc/fstab_backup
sudo gedit /etc/fstab
將以下敘述加入最後一行
//192.168.0.1/linux /media/sharename smbfs credentials=/root/.smbcredentials,dmask=777,fmask=777 0 0
存檔
請參閱 #如何不需重新開機重新掛載 /etc/fstab?
如何讓 ipw2000 以及 wpa 能運作?
請參閱 http://www.ubuntuforums.org/showpost.php?p=130227p=423584
如何設定以及啟動 PPTP tunnels (VPN)?
請參閱 #基本備註
請參閱 http://pptpclient.sourceforge.net/howto-ubuntu.phtml 自動安裝 PPTP 連線程式
或者

手動安裝
wget -c http://linux.edu.lv/uploads/content/pptp.tar.gz
tar zxvf pptp.tar.gz
sudo sh ./pptp/install
設定 PPTP 連線程式
sudo gedit /usr/share/applications/pptpconfig.desktop
將以下敘述增加至新檔案內
[Desktop Entry]
Name=PPTP Client
Comment=Configure and start PPTP tunnels (VPN)
Categories=Application;Network
Encoding=UTF-8
Exec=gksudo pptpconfig
Icon=gnome-remote-desktop.png
StartupNotify=true
Terminal=false
Type=Application
應用程式 -> 網際網路 -> PPTP Client
如何設定網路管理員支援 WPA 1 和 WPA 2 ?
遠端桌面
如何設定遠端桌面 (這是不安全作法)?
請參閱 #基本備註
注意!遠端桌面使用是用在 GNOME 登入狀況下,所以離開此電腦時是相當不安全,在離開電腦時候,請使用 (系統 -> 鎖住螢幕) 並且關掉螢幕。

系統 -> 偏好設定 -> 遠端桌面
遠端桌面偏好設定
共享 ->
允許其他使用者觀看您的桌面(勾選)
允許其他使用者控制您的桌面(勾選)
安全性 ->
詢問您以確認(勾選)
使用者需要輸入密碼(勾選)
密碼:指定的密碼
如何連到遠端 Ubuntu 桌面?
請參閱 #基本備註
假設遠端 Ubuntu 機器已經設定好遠端桌面,請參閱 #如何設定遠端桌面 (這是不安全作法)?

遠端 Ubuntu 機器:192.168.0.1

vncviewer -fullscreen 192.168.0.1:0
離開 vncviewer
按下 'F8' -> Quit viewer
如何透過 Windows 機器連到遠端 Ubuntu 桌面?
請參閱 #基本備註
假設遠端 Ubuntu 機器已經設定好遠端桌面,請參閱 #如何設定遠端桌面 (這是不安全作法)?

遠端 Ubuntu 機器:192.168.0.1

下載 VNC Viewer (http://fresh.t-systems-sfr.com/cgi-bin/warex?linux/src/vnc-4_1_1-x86_win32_viewer.zip:a/vnc-4_1_1-x86_win32_viewer.exe)
Windows
如何手動 掛載/卸載 Windows 分割區 (NTFS),並允許所有使用者能讀取?
請參閱 #基本備註
請參閱 #如何列出硬碟分割區清單?
假設 Windows 的分割區 (NTFS) 是 /dev/hda1 ,掛載的資料夾是 /media/windows

掛載 Windows 的分割區
sudo mkdir /media/windows
sudo mount /dev/hda1 /media/windows -t ntfs -o nls=utf8,umask=0222
卸載 Windows 的分割區
sudo umount /media/windows
如何手動 掛載/卸載 Windows 分割區 (FAT),並允許所有使用者能 讀取/寫入?
請參閱 #基本備註
請參閱 #如何列出硬碟分割區清單?
假設 Windows 的分割區 (FAT) 是 /dev/hda1 ,掛載的資料夾是 /media/windows

掛載 Windows 的分割區
sudo mkdir /media/windows
sudo mount /dev/hda1 /media/windows/ -t vfat -o iocharset=utf8,umask=000
卸載 Windows 的分割區
sudo umount /media/windows/
如何開機時自動掛載 Windows 分割區 (NTFS),並允許所有使用者能讀取?
請參閱 #基本備註
請參閱 #如何列出硬碟分割區清單?
假設 Windows 的分割區 (NTFS) 是 /dev/hda1 ,掛載的資料夾是 /media/windows

sudo mkdir /media/windows
sudo cp /etc/fstab /etc/fstab.backup
sudo gedit /etc/fstab
在最後加上
/dev/hda1 /media/windows ntfs nls=utf8,umask=0222 0 0
儲存檔案
請參閱 #如何不需重新開機重新掛載 /etc/fstab?
如何開機時自動掛載 Windows 分割區 (FAT),並允許所有使用者能 讀取/寫入?
請參閱 #基本備註
請參閱 #如何列出硬碟分割區清單?
假設 Windows 的分割區 (FAT) 是 /dev/hda1 ,掛載的資料夾是 /media/windows

sudo mkdir /media/windows
sudo cp /etc/fstab /etc/fstab.backup
sudo gedit /etc/fstab
在最後加上
/dev/hda1 /media/windows vfat iocharset=utf8,umask=000 0 0
儲存檔案
請參閱 #如何不需重新開機重新掛載 /etc/fstab?
系統安全
哪些是關於我的 Ubuntu 安全性上的必備基本知識?
請參閱 #基本備註
確定在BIOS開機順序中第一個是硬碟
防止入侵者使用 Linux 安裝光碟取得 root 帳號。
防止入侵者使用 Linux Live 光碟 (舉例 UBUNTU/KNOPPIX/MEPIS) 破壞/瀏覽/分享此硬碟資料。
防止入侵者安裝其他作業系統。
確定有設定BIOS密碼
防止入侵者修改BIOS開機順序。
確定電腦位於安全的地方
防止入侵者拔走硬碟,透過其他電腦進行 破壞/瀏覽/分享 此硬碟資料。 
防止入侵者拔走主機板電池,讓 BIOS 密碼重新設定。
確定系統密碼不容易被猜到
防止入侵者用暴力演算法破解密碼。
至少建立 8 個字元的密碼。
至少建立 字母/數字 以及大小寫混合的密碼。
確定 GRUB 選單關掉互動式編輯模式
防止入侵者透過修改 kernel 開機參數取得 root 帳號。
請參閱 #如何關掉 GRUB 選單編輯模式?
確定在主控台模式下關掉指令歷史紀錄
防止入侵者檢視先前指令
請參閱 #如何關掉主控台下指令歷史清單?
確定主控台模式下關掉 Ctrl+Alt+Del
防止入侵者重新開機
請參閱 [[#如何關掉主控台下使用 Ctrl+Alt+Del 重新開機?]]
確定主控式模式下使用移除、複製和搬動 檔案/資料夾 下加上互動式參數
防止誤砍或者覆蓋 檔案/資料夾
請參閱 #如何開啟主控台下使用 移除/覆蓋 檔案/資料夾 時能有提示字串?
平常工作登入時請用一般使用者帳號
防止誤砍或者覆蓋 檔案/資料夾
請參閱 #如何 新增/編輯/刪除 系統使用者?
關掉 root 帳號,用 "sudo" 代替
減少使用 root 特權處理時間,並降低因為 root 錯誤指令所造成的風險。
"sudo" 提供稽核紀錄 (/var/log/auth.log)
請參閱 #如何關閉 root 管理者帳號?
安裝防火牆
防火牆並不能提供完整安全,但是至少在大部份環境下,可以第一時間內阻擋一些網路攻擊。
請參閱 #如何安裝防火牆 (Firestarter)?
弱點攻擊測試
Nessus 是個強大工具,用來自動測試以及發現已知安全性問題
請參閱 #如何安裝弱點掃描軟體 (Nessus)?
如何關掉 GRUB 選單編輯模式?
請參閱 #基本備註
grub
grub> md5crypt
Password: ****** (ubuntu)
Encrypted: $1$ZWnke0$1fzDBVjUcT1Mpdd4u/T961 (編碼過的密碼)
grub> quit
sudo cp /boot/grub/menu.lst /boot/grub/menu.lst_backup
sudo gedit /boot/grub/menu.lst
找到此段
...
## password ['--md5'] passwd
# If used in the first section of a menu file, disable all interactive editing
# control (menu entry editor and command-line) and entries protected by the
# command 'lock'
# e.g. password topsecret
# password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/
# password topsecret
...
在後面加上此行敘述
password --md5 $1$ZWnke0$1fzDBVjUcT1Mpdd4u/T961 (剛剛編碼過的密碼)
找到此段
...
title Ubuntu, kernel 2.6.10-5-386 (recovery mode)
root (hd0,1)
kernel /boot/vmlinuz-2.6.10-5-386 root=/dev/hda2 ro single
initrd /boot/initrd.img-2.6.10-5-386
savedefault
boot
...
將此段全部註解
#title Ubuntu, kernel 2.6.10-5-386 (recovery mode)
#root (hd0,1)
#kernel /boot/vmlinuz-2.6.10-5-386 root=/dev/hda2 ro single
#initrd /boot/initrd.img-2.6.10-5-386
#savedefault
#boot
存檔
如何關掉主控台下指令歷史清單?
請參閱 #基本備註
rm -f $HOME/.bash_history
touch $HOME/.bash_history
chmod 000 $HOME/.bash_history
如何關掉主控台下使用 Ctrl+Alt+Del 重新開機?
請參閱 #基本備註
sudo cp /etc/inittab /etc/inittab_backup
sudo gedit /etc/inittab
找到此段
...
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
...
註解此段
#ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
存檔
sudo telinit q
如何開啟主控台下使用 移除/覆蓋 檔案/資料夾 時能有提示字串?
請參閱 #基本備註
sudo cp /etc/bash.bashrc /etc/bash.bashrc_backup
sudo gedit /etc/bash.bashrc
加上此段敘述
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i

entry 2006-7-19, 19:00 PM
原文出处:http://www.amk.ca/python/howto/regex/ 原文作者:A.M. Kuchling (amk@amk.ca) 授权许可:创作共用协议 翻译人员:FireHare 校对人员:Leal 适用版本:Python 1.5 及后续版本 简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。Python 1.5之前版本则是通过 regex 模块提供 Emecs 风格的模式。Emacs 风格模式可读性稍差些,而且功能也不强,因此编写新代码时尽量不要再使用 regex 模块,当然偶尔你还是可能在老代码里发现其踪影。 就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。使用这个小型语言,你可以为想要匹配的相应字符串集指定规则;该字符串集可能包含英文语句、e-mail地址、TeX命令或任何你想搞定的东西。然后你可以问诸如“这个字符串匹配该模式吗?”或“在这个字符串中是否有部分匹配该模式呢?”。你也可以使用 RE 以各种方式来修改或分割字符串。 正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。在高级用法中,也许还要仔细留意引擎是如何执行给定 RE ,如何以特定方式编写 RE 以令生产的字节码运行速度更快。本文并不涉及优化,因为那要求你已充分掌握了匹配引擎的内部机制。 正则表达式语言相对小型和受限(功能有限),因此并非所有字符串处理都能用正则表达式完成。当然也有些任务可以用正则表达式完成,不过最终表达式会变得异常复杂。碰到这些情形时,编写 Python 代码进行处理可能反而更好;尽管 Python 代码比一个精巧的正则表达式要慢些,但它更易理解。 简单模式 我们将从最简单的正则表达式学习开始。由于正则表达式常用于字符串操作,那我们就从最常见的任务:字符匹配 下手。 有关正则表达式底层的计算机科学上的详细解释(确定性和非确定性有限自动机),你可以查阅编写编译器相关的任何教科书。 1. 字符匹配 大多数字母和字符一般都会和自身匹配。例如,正则表达式 test 会和字符串“test”完全匹配。(你也可以使用大小写不敏感模式,它还能让这个 RE 匹配“Test”或“TEST”;稍后会有更多解释。) 这个规则当然会有例外;有些字符比较特殊,它们和自身并不匹配,而是会表明应和一些特殊的东西匹配,或者它们会影响到 RE 其它部分的重复次数。本文很大篇幅专门讨论了各种元字符及其作用。 这里有一个元字符的完整列表;其含义会在本指南余下部分进行讨论。 . ^ $ * + ? { [ ] \ | ( ) 我们首先考察的元字符是 "[" 和 "]"。它们常用来指定一个字符类别,所谓字符类别就是你想匹配的一个字符集。字符可以单个列出,也可以用“-”号分隔的两个给定字符来表示一个字符区间。例如,[abc] 将匹配"a", "b", 或 "c"中的任意一个字符;也可以用区间[a-c]来表示同一字符集,和前者效果一致。如果你只想匹配小写字母,那么 RE 应写成 [a-z]。 元字符在类别里并不起作用。例如,[akm$]将匹配字符"a", "k", "m", 或 "$" 中的任意一个;"$"通常用作元字符,但在字符类别里,其特性被除去,恢复成普通字符。 你可以用补集来匹配不在区间范围内的字符。其做法是把"^"作为类别的首个字符;其它地方的"^"只会简单匹配 "^" 字符本身。例如,[^5] 将匹配除 "5" 之外的任意字符。 也许最重要的元字符是反斜杠"\"。 做为 Python 中的字符串字母,反斜杠后面可以加不同的字符以表示不同特殊意义。它也可以用于取消所有的元字符,这样你就可以在模式中匹配它们了。举个例子,如果你需要匹配字符 "[" 或 "\",你可以在它们之前用反斜杠来取消它们的特殊意义: \[ 或 \\。 一些用 "\" 开始的特殊字符所表示的预定义字符集通常是很有用的,象数字集,字母集,或其它非空字符集。下列是可用的预设特殊字符: \d 匹配任何十进制数;它相当于类 [0-9]。 \D 匹配任何非数字字符;它相当于类 [^0-9]。 \s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。 \S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。 \w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。 \W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。 这样特殊字符都可以包含在一个字符类中。如,[\s,.]字符类将匹配任何空白字符或","或"."。 本节最后一个元字符是 . 。它匹配除了换行字符外的任何字符,在 alternate 模式(re.DOTALL)下它甚至可以匹配换行。"." 通常被用于你想匹配“任何字符”的地方。 2. 重复 正则表达式第一件能做的事是能够匹配不定长的字符集,而这是其它能作用在字符串上的方法所不能做到的。 不过,如果那是正则表达式唯一的附加功能的话,那么它们也就不那么优秀了。它们的另一个功能就是你可以指定正则表达式的一部分的重复次数。 我们讨论的第一个重复功能的元字符是 *。* 并不匹配字母字符 "*";相反,它指定前一个字符可以被匹配零次或更多次,而不是只有一次。 举个例子,ca*t 将匹配 "ct" (0 个 "a" 字符), "cat" (1 个 "a"), "caaat" (3 个 "a" 字符)等等。RE 引擎有各种来自 C 的整数类型大小的内部限制,以防止它匹配超过2亿个 "a" 字符;你也许没有足够的内存去建造那么大的字符串,所以将不会累计到那个限制。 象 * 这样地重复是“贪婪的”;当重复一个 RE 时,匹配引擎会试着重复尽可能多的次数。如果模式的后面部分没有被匹配,匹配引擎将退回并再次尝试更小的重复。 一步步的示例可以使它更加清晰。让我们考虑表达式 a[bcd]*b。它匹配字母 "a",零个或更多个来自类 [bcd]中的字母,最后以 "b" 结尾。现在想一想该 RE 对字符串 "abcbd" 的匹配。 Step Matched Explanation 1 a a 匹配模式 2 abcbd 引擎匹配 [bcd]*,并尽其所能匹配到字符串的结尾 3 Failure 引擎尝试匹配 b,但当前位置已经是字符的最后了,所以失败 4 abcb 退回,[bcd]*尝试少匹配一个字符。 5 Failure 再次尝次b,但在当前最后一位字符是"d"。 6 abc 再次退回,[bcd]*只匹配 "bc"。 7 abcb 再次尝试 b ,这次当前位上的字符正好是 "b" RE 的结尾部分现在可以到达了,它匹配 "abcb"。这证明了匹配引擎一开始会尽其所能进行匹配,如果没有匹配然后就逐步退回并反复尝试 RE 剩下来的部分。直到它退回尝试匹配 [bcd] 到零次为止,如果随后还是失败,那么引擎就会认为该字符串根本无法匹配 RE 。 另一个重复元字符是 +,表示匹配一或更多次。请注意 * 和 + 之间的不同;* 匹配零或更多次,所以根本就可以不出现,而 + 则要求至少出现一次。用同一个例子,ca+t 就可以匹配 "cat" (1 个 "a"), "caaat" (3 个 "a"), 但不能匹配 "ct"。 还有更多的限定符。问号 ? 匹配一次或零次;你可以认为它用于标识某事物是可选的。例如:home-?brew 匹配 "homebrew" 或 "home-brew"。 最复杂的重复限定符是 {m,n},其中 m 和 n 是十进制整数。该限定符的意思是至少有 m 个重复,至多到 n 个重复。举个例子,a/{1,3}b 将匹配 "a/b","a//b" 和 "a///b"。它不能匹配 "ab" 因为没有斜杠,也不能匹配 "a////b" ,因为有四个。 你可以忽略 m 或 n;因为会为缺失的值假设一个合理的值。忽略 m 会认为下边界是 0,而忽略 n 的结果将是上边界为无穷大 -- 实际上是先前我们提到的 2 兆,但这也许同无穷大一样。 细心的读者也许注意到其他三个限定符都可以用这样方式来表示。 {0,} 等同于 *,{1,} 等同于 +,而{0,1}则与 ? 相同。如果可以的话,最好使用 *,+,或?。很简单因为它们更短也再容易懂。 使用正则表达式 现在我们已经看了一些简单的正则表达式,那么我们实际在 Python 中是如何使用它们的呢? re 模块提供了一个正则表达式引擎的接口,可以让你将 REs 编译成对象并用它们来进行匹配。 1. 编译正则表达式 正则表达式被编译成 RegexObject 实例,可以为不同的操作提供方法,如模式匹配搜索或字符串替换。 切换行号显示 1 >>> import re 2 >>> p = re.compile('ab*') 3 >>> print p 4 re.compile() 也接受可选的标志参数,常用来实现不同的特殊功能和语法变更。我们稍后将查看所有可用的设置,但现在只举一个例子: 切换行号显示 1 >>> p = re.compile('ab*', re.IGNORECASE) RE 被做为一个字符串发送给 re.compile()。REs 被处理成字符串是因为正则表达式不是 Python 语言的核心部分,也没有为它创建特定的语法。(应用程序根本就不需要 REs,因此没必要包含它们去使语言说明变得臃肿不堪。)而 re 模块则只是以一个 C 扩展模块的形式来被 Python 包含,就象 socket 或 zlib 模块一样。 将 REs 作为字符串以保证 Python 语言的简洁,但这样带来的一个麻烦就是象下节标题所讲的。 2. 反斜杠的麻烦 在早期规定中,正则表达式用反斜杠字符 ("\") 来表示特殊格式或允许使用特殊字符而不调用它的特殊用法。这就与 Python 在字符串中的那些起相同作用的相同字符产生了冲突。 让我们举例说明,你想写一个 RE 以匹配字符串 "\section",可能是在一个 LATEX 文件查找。为了要在程序代码中判断,首先要写出想要匹配的字符串。接下来你需要在所有反斜杠和元字符前加反斜杠来取消其特殊意义。 字符 阶段 \section 要匹配的字符串 \\section 为 re.compile 取消反斜杠的特殊意义 "\\\\section" 为字符串取消反斜杠 简单地说,为了匹配一个反斜杠,不得不在 RE 字符串中写 '\\\\',因为正则表达式中必须是 "\\",而每个反斜杠按 Python 字符串字母表示的常规必须表示成 "\\"。在 REs 中反斜杠的这个重复特性会导致大量重复的反斜杠,而且所生成的字符串也很难懂。 解决的办法就是为正则表达式使用 Python 的 raw 字符串表示;在字符串前加个 "r" 反斜杠就不会被任何特殊方式处理,所以 r"\n" 就是包含"\" 和 "n" 的两个字符,而 "\n" 则是一个字符,表示一个换行。正则表达式通常在 Python 代码中都是用这种 raw 字符串表示。 常规字符串 Raw 字符串 "ab*" r"ab*" "\\\\section" r"\\section" "\\w+\\s+\\1" r"\w+\s+\1" 3. 执行匹配 一旦你有了已经编译了的正则表达式的对象,你要用它做什么呢?RegexObject 实例有一些方法和属性。这里只显示了最重要的几个,如果要看完整的列表请查阅 Library Refference。 方法/属性 作用 match() 决定 RE 是否在字符串刚开始的位置匹配 search() 扫描字符串,找到这个 RE 匹配的位置 findall() 找到 RE 匹配的所有子串,并把它们作为一个列表返回 finditer() 找到 RE 匹配的所有子串,并把它们作为一个迭代器返回 如果没有匹配到的话,match() 和 search() 将返回 None。如果成功的话,就会返回一个 MatchObject 实例,其中有这次匹配的信息:它是从哪里开始和结束,它所匹配的子串等等。 你可以用采用人机对话并用 re 模块实验的方式来学习它。如果你有 Tkinter 的话,你也许可以考虑参考一下 Tools/scripts/redemo.py,一个包含在 Python 发行版里的示范程序。 首先,运行 Python 解释器,导入 re 模块并编译一个 RE: 切换行号显示 1 Python 2.2.2 (#1, Feb 10 2003, 12:57:01) 2 >>> import re 3 >>> p = re.compile('[a-z]+') 4 >>> p 5 <_sre.SRE_Pattern object at 80c3c28> ERROR: EOF in multi-line statement 现在,你可以试着用 RE 的 [a-z]+ 去匹配不同的字符串。一个空字符串将根本不能匹配,因为 + 的意思是 “一个或更多的重复次数”。 在这种情况下 match() 将返回 None,因为它使解释器没有输出。你可以明确地打印出 match() 的结果来弄清这一点。 切换行号显示 1 >>> p.match("") 2 >>> print p.match("") 3 None 现在,让我们试着用它来匹配一个字符串,如 "tempo"。这时,match() 将返回一个 MatchObject。因此你可以将结果保存在变量里以便后面使用。 切换行号显示 1 >>> m = p.match( 'tempo') 2 >>> print m 3 <_sre.SRE_Match object at 80c4f68> 现在你可以查询 MatchObject 关于匹配字符串的相关信息了。MatchObject 实例也有几个方法和属性;最重要的那些如下所示: 方法/属性 作用 group() 返回被 RE 匹配的字符串 start() 返回匹配开始的位置 end() 返回匹配结束的位置 span() 返回一个元组包含匹配 (开始,结束) 的位置 试试这些方法不久就会清楚它们的作用了: 切换行号显示 1 >>> m.group() 2 'tempo' 3 >>> m.start(), m.end() 4 (0, 5) 5 >>> m.span() 6 (0, 5) group() 返回 RE 匹配的子串。start() 和 end() 返回匹配开始和结束时的索引。span() 则用单个元组把开始和结束时的索引一起返回。因为匹配方法检查到如果 RE 在字符串开始处开始匹配,那么 start() 将总是为零。然而, RegexObject 实例的 search 方法扫描下面的字符串的话,在这种情况下,匹配开始的位置就也许不是零了。 切换行号显示 1 >>> print p.match('::: message') 2 None 3 >>> m = p.search('::: message') ; print m 4 5 >>> m.group() 6 'message' 7 >>> m.span() 8 (4, 11) 在实际程序中,最常见的作法是将 MatchObject 保存在一个变量里,然后检查它是否为 None,通常如下所示: 切换行号显示 1 p = re.compile( ... ) 2 m = p.match( 'string goes here' ) 3 if m: 4 print 'Match found: ', m.group() 5 else: 6 print 'No match' 两个 RegexObject 方法返回所有匹配模式的子串。findall()返回一个匹配字符串列表: 切换行号显示 1 >>> p = re.compile('\d+') 2 >>> p.findall('12 drummers drumming, 11 pipers piping, 10 lords a-leaping') 3 ['12', '11', '10'] findall() 在它返回结果时不得不创建一个列表。在 Python 2.2中,也可以用 finditer() 方法。 切换行号显示 1 >>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...') 2 >>> iterator 3 4 >>> for match in iterator: 5 ... print match.span() 6 ... 7 (0, 2) 8 (22, 24) 9 (29, 31) 4. 模块级函数 你不一定要产生一个 RegexObject 对象然后再调用它的方法;re 模块也提供了顶级函数调用如 match()、search()、sub() 等等。这些函数使用 RE 字符串作为第一个参数,而后面的参数则与相应 RegexObject 的方法参数相同,返回则要么是 None 要么就是一个 MatchObject 的实例。 切换行号显示 1 >>> print re.match(r'From\s+', 'Fromage amk') 2 None 3 >>> re.match(r'From\s+', 'From amk Thu May 14 19:12:10 1998') 4 Under the hood, 这些函数简单地产生一个 RegexOject 并在其上调用相应的方法。它们也在缓存里保存编译后的对象,因此在将来调用用到相同 RE 时就会更快。 你将使用这些模块级函数,还是先得到一个 RegexObject 再调用它的方法呢?如何选择依赖于怎样用 RE 更有效率以及你个人编码风格。如果一个 RE 在代码中只做用一次的话,那么模块级函数也许更方便。如果程序包含很多的正则表达式,或在多处复用同一个的话,那么将全部定义放在一起,在一段代码中提前编译所有的 REs 更有用。从标准库中看一个例子,这是从 xmllib.py 文件中提取出来的: 切换行号显示 1 ref = re.compile( ... ) 2 entityref = re.compile( ... ) 3 charref = re.compile( ... ) 4 starttagopen = re.compile( ... ) 我通常更喜欢使用编译对象,甚至它只用一次,but few people will be as much of a purist about this as I am。 5. 编译标志 编译标志让你可以修改正则表达式的一些运行方式。在 re 模块中标志可以使用两个名字,一个是全名如 IGNORECASE,一个是缩写,一字母形式如 I。(如果你熟悉 Perl 的模式修改,一字母形式使用同样的字母;例如 re.VERBOSE的缩写形式是 re.X。)多个标志可以通过按位 OR-ing 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志: 这有个可用标志表,对每个标志后面都有详细的说明。 标志 含义 DOTALL, S 使 . 匹配包括换行在内的所有字符 IGNORECASE, I 使匹配对大小写不敏感 LOCALE, L 做本地化识别(locale-aware)匹配 MULTILINE, M 多行匹配,影响 ^ 和 $ VERBOSE, X 能够使用 REs 的 verbose 状态,使之被组织得更清晰易懂 I IGNORECASE 使匹配对大小写不敏感;字符类和字符串匹配字母时忽略大小写。举个例子,[A-Z]也可以匹配小写字母,Spam 可以匹配 "Spam", "spam", 或 "spAM"。这个小写字母并不考虑当前位置。 L LOCALE 影响 \w, \W, \b, 和 \B,这取决于当前的本地化设置。 locales 是 C 语言库中的一项功能,是用来为需要考虑不同语言的编程提供帮助的。举个例子,如果你正在处理法文文本,你想用 \w+ 来匹配文字,但 \w 只匹配字符类 [A-Za-z];它并不能匹配 "é" 或 "ç"。如果你的系统配置适当且本地化设置为法语,那么内部的 C 函数将告诉程序 "é" 也应该被认为是一个字母。当在编译正则表达式时使用 LOCALE 标志会得到用这些 C 函数来处理 \w 后的编译对象;这会更慢,但也会象你希望的那样可以用 \w+ 来匹配法文文本。 M MULTILINE (此时 ^ 和 $ 不会被解释; 它们将在 4.1 节被介绍.) 使用 只匹配字符串的开始,而 $ 则只匹配字符串的结尾和直接在换行前(如果有的话)的字符串结尾。当本标志指定后, 匹配字符串的开始和字符串中每行的开始。同样的, $ 元字符匹配字符串结尾和字符串中每行的结尾(直接在每个换行之前)。 S DOTALL 使 "." 特殊字符完全匹配任何字符,包括换行;没有这个标志, "." 匹配除了换行外的任何字符。 X VERBOSE 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。当该标志被指定时,在 RE 字符串中的空白符被忽略,除非该空白符在字符类中或在反斜杠之后;这可以让你更清晰地组织和缩进 RE。它也可以允许你将注释写入 RE,这些注释会被引擎忽略;注释用 "#"号 来标识,不过该符号不能在字符串或反斜杠之后。 举个例子,这里有一个使用 re.VERBOSE 的 RE;看看读它轻松了多少? 切换行号显示 1 charref = re.compile(r""" 2 &[#] # Start of a numeric entity reference 3 ( 4 [0-9]+[^0-9] # Decimal form 5 | 0[0-7]+[^0-7] # Octal form 6 | x[0-9a-fA-F]+[^0-9a-fA-F] # Hexadecimal form 7 ) 8 """, re.VERBOSE) 没有 verbose 设置, RE 会看起来象这样: 切换行号显示 1 charref = re.compile("&#([0-9]+[^0-9]" 2 "|0[0-7]+[^0-7]" 3 "|x[0-9a-fA-F]+[^0-9a-fA-F])") 在上面的例子里,Python 的字符串自动连接可以用来将 RE 分成更小的部分,但它比用 re.VERBOSE 标志时更难懂。 更多模式功能 到目前为止,我们只展示了正则表达式的一部分功能。在本节,我们将展示一些新的元字符和如何使用组来检索被匹配的文本部分。 1. 更多的元字符 还有一些我们还没展示的元字符,其中的大部分将在本节展示。 剩下来要讨论的一部分元字符是零宽界定符(zero-width assertions)。它们并不会使引擎在处理字符串时更快;相反,它们根本就没有对应任何字符,只是简单的成功或失败。举个例子, \b 是一个在单词边界定位当前位置的界定符(assertions),这个位置根本就不会被 \b 改变。这意味着零宽界定符(zero-width assertions)将永远不会被重复,因为如果它们在给定位置匹配一次,那么它们很明显可以被匹配无数次。 | 可选项,或者 "or" 操作符。如果 A 和 B 是正则表达式,A|B 将匹配任何匹配了 "A" 或 "B" 的字符串。| 的优先级非常低,是为了当你有多字符串要选择时能适当地运行。Crow|Servo 将匹配"Crow" 或 "Servo", 而不是 "Cro", 一个 "w" 或 一个 "S", 和 "ervo"。 为了匹配字母 "|",可以用 \|,或将其包含在字符类中,如[|]。 ^ 匹配行首。除非设置 MULTILINE 标志,它只是匹配字符串的开始。在 MULTILINE 模式里,它也可以直接匹配字符串中的每个换行。 例如,如果你只希望匹配在行首单词 "From",那么 RE 将用 ^From。 切换行号显示 1 >>> print re.search('^From', 'From Here to Eternity') 2 3 >>> print re.search('^From', 'Reciting From Memory') 4 None $ 匹配行尾,行尾被定义为要么是字符串尾,要么是一个换行字符后面的任何位置。 切换行号显示 1 >>> print re.search('}$', '{block}') 2 3 >>> print re.search('}$', '{block} ') 4 None 5 >>> print re.search('}$', '{block}\n') 6 匹配一个 "$",使用 \$ 或将其包含在字符类中,如[$]。 \A 只匹配字符串首。当不在 MULTILINE 模式,\A 和 实际上是一样的。然而,在 MULTILINE 模式里它们是不同的;\A 只是匹配字符串首,而 还可以匹配在换行符之后字符串的任何位置。 \Z Matches only at the end of the string. 只匹配字符串尾。 \b 单词边界。这是个零宽界定符(zero-width assertions)只用以匹配单词的词首和词尾。单词被定义为一个字母数字序列,因此词尾就是用空白符或非字母数字符来标示的。 下面的例子只匹配 "class" 整个单词;而当它被包含在其他单词中时不匹配。 切换行号显示 1 >>> p = re.compile(r'\bclass\b') 2 >>> print p.search('no class at all') 3 4 >>> print p.search('the declassified algorithm') 5 None 6 >>> print p.search('one subclass is') 7 None 当用这个特殊序列时你应该记住这里有两个微妙之处。第一个是 Python 字符串和正则表达式之间最糟的冲突。在 Python 字符串里,"\b" 是反斜杠字符,ASCII值是8。如果你没有使用 raw 字符串时,那么 Python 将会把 "\b" 转换成一个回退符,你的 RE 将无法象你希望的那样匹配它了。下面的例子看起来和我们前面的 RE 一样,但在 RE 字符串前少了一个 "r" 。 切换行号显示 1 >>> p = re.compile('\bclass\b') 2 >>> print p.search('no class at all') 3 None 4 >>> print p.search('\b' + 'class' + '\b') 5 第二个在字符类中,这个限定符(assertion)不起作用,\b 表示回退符,以便与 Python 字符串兼容。 \B 另一个零宽界定符(zero-width assertions),它正好同 \b 相反,只在当前位置不在单词边界时匹配。 2. 分组 你经常需要得到比 RE 是否匹配还要多的信息。正则表达式常常用来分析字符串,编写一个 RE 匹配感兴趣的部分并将其分成几个小组。举个例子,一个 RFC-822 的头部用 ":" 隔成一个头部名和一个值,这就可以通过编写一个正则表达式匹配整个头部,用一组匹配头部名,另一组匹配头部值的方式来处理。 组是通过 "(" 和 ")" 元字符来标识的。 "(" 和 ")" 有很多在数学表达式中相同的意思;它们一起把在它们里面的表达式组成一组。举个例子,你可以用重复限制符,象 *, +, ?, 和 {m,n},来重复组里的内容,比如说(ab)* 将匹配零或更多个重复的 "ab"。 切换行号显示 1 >>> p = re.compile('(ab)*') 2 >>> print p.match('ababababab').span() 3 (0, 10) 组用 "(" 和 ")" 来指定,并且得到它们匹配文本的开始和结尾索引;这就可以通过一个参数用 group()、start()、end() 和 span() 来进行检索。组是从 0 开始计数的。组 0 总是存在;它就是整个 RE,所以 MatchObject 的方法都把组 0 作为它们缺省的参数。稍后我们将看到怎样表达不能得到它们所匹配文本的 span。 切换行号显示 1 >>> p = re.compile('(a)b') 2 >>> m = p.match('ab') 3 >>> m.group() 4 'ab' 5 >>> m.group(0) 6 'ab' 小组是从左向右计数的,从1开始。组可以被嵌套。计数的数值可以能过从左到右计算打开的括号数来确定。 切换行号显示 1 >>> p = re.compile('(a(cool.gifc)d') 2 >>> m = p.match('abcd') 3 >>> m.group(0) 4 'abcd' 5 >>> m.group(1) 6 'abc' 7 >>> m.group(2) 8 'b' group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 切换行号显示 1 >>> m.group(2,1,2) 2 ('b', 'abc', 'b') The groups() 方法返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 切换行号显示 1 >>> m.groups() 2 ('abc', 'b') 模式中的逆向引用允许你指定先前捕获组的内容,该组也必须在字符串当前位置被找到。举个例子,如果组 1 的内容能够在当前位置找到的话,\1 就成功否则失败。记住 Python 字符串也是用反斜杠加数据来允许字符串中包含任意字符的,所以当在 RE 中使用逆向引用时确保使用 raw 字符串。 例如,下面的 RE 在一个字符串中找到成双的词。 切换行号显示 1 >>> p = re.compile(r'(\b\w+)\s+\1') 2 >>> p.search('Paris in the the spring').group() 3 'the the' 象这样只是搜索一个字符串的逆向引用并不常见 -- 用这种方式重复数据的文本格式并不多见 -- 但你不久就可以发现它们用在字符串替换上非常有用。 3. 无捕获组和命名组 精心设计的 REs 也许会用很多组,既可以捕获感兴趣的子串,又可以分组和结构化 RE 本身。在复杂的 REs 里,追踪组号变得困难。有两个功能可以对这个问题有所帮助。它们也都使用正则表达式扩展的通用语法,因此我们来看看第一个。 Perl 5 对标准正则表达式增加了几个附加功能,Python 的 re 模块也支持其中的大部分。选择一个新的单按键元字符或一个以 "\" 开始的特殊序列来表示新的功能,而又不会使 Perl 正则表达式与标准正则表达式产生混乱是有难度的。如果你选择 "&" 做为新的元字符,举个例子,老的表达式认为 "&" 是一个正常的字符,而不会在使用 \& 或 [&] 时也不会转义。 Perl 开发人员的解决方法是使用 (?...) 来做为扩展语法。"?" 在括号后面会直接导致一个语法错误,因为 "?" 没有任何字符可以重复,因此它不会产生任何兼容问题。紧随 "?" 之后的字符指出扩展的用途,因此 (?=foo) Python 新增了一个扩展语法到 Perl 扩展语法中。如果在问号后的第一个字符是 "P",你就可以知道它是针对 Python 的扩展。目前有两个这样的扩展: (?P...) 定义一个命名组,(?P=name) 则是对命名组的逆向引用。如果 Perl 5 的未来版本使用不同的语法增加了相同的功能,那么 re 模块也将改变以支持新的语法,这是为了兼容性的目的而保持的 Python 专用语法。 现在我们看一下普通的扩展语法,我们回过头来简化在复杂 REs 中使用组运行的特性。因为组是从左到右编号的,而且一个复杂的表达式也许会使用许多组,它可以使跟踪当前组号变得困难,而修改如此复杂的 RE 是十分麻烦的。在开始时插入一个新组,你可以改变它之后的每个组号。 首先,有时你想用一个组去收集正则表达式的一部分,但又对组的内容不感兴趣。你可以用一个无捕获组: (?:...) 来实现这项功能,这样你可以在括号中发送任何其他正则表达式。 切换行号显示 1 >>> m = re.match("([abc])+", "abc") 2 >>> m.groups() 3 ('c',) 4 >>> m = re.match("(?:[abc])+", "abc") 5 >>> m.groups() 6 () 除了捕获匹配组的内容之外,无捕获组与捕获组表现完全一样;你可以在其中放置任何字符,可以用重复元字符如 "*" 来重复它,可以在其他组(无捕获组与捕获组)中嵌套它。(?:...) 对于修改已有组尤其有用,因为你可以不用改变所有其他组号的情况下添加一个新组。捕获组和无捕获组在搜索效率方面也没什么不同,没有哪一个比另一个更快。 其次,更重要和强大的是命名组;与用数字指定组不同的是,它可以用名字来指定。 命令组的语法是 Python 专用扩展之一: (?P...)。名字很明显是组的名字。除了该组有个名字之外,命名组也同捕获组是相同的。MatchObject 的方法处理捕获组时接受的要么是表示组号的整数,要么是包含组名的字符串。命名组也可以是数字,所以你可以通过两种方式来得到一个组的信息: 切换行号显示 1 >>> p = re.compile(r'(?P\b\w+\b)') 2 >>> m = p.search( '(((( Lots of punctuation )))' ) 3 >>> m.group('word') 4 'Lots' 5 >>> m.group(1) 6 'Lots' 命名组是便于使用的,因为它可以让你使用容易记住的名字来代替不得不记住的数字。这里有一个来自 imaplib 模块的 RE 示例: 切换行号显示 1 InternalDate = re.compile(r'INTERNALDATE "' 2 r'(?P[ 123][0-9])-(?P[A-Z][a-z][a-z])-' 3 r'(?P[0-9][0-9][0-9][0-9])' 4 r' (?P[0-9][0-9])sad.gif?P[0-9][0-9])sad.gif?P[0-9][0-9])' 5 r' (?P[-+])(?P[0-9][0-9])(?P[0-9][0-9])' 6 r'"') 很明显,得到 m.group('zonem') 要比记住得到组 9 要容易得多。 因为逆向引用的语法,象 (...)\1 这样的表达式所表示的是组号,这时用组名代替组号自然会有差别。还有一个 Python 扩展:(?P=name) ,它可以使叫 name 的组内容再次在当前位置发现。正则表达式为了找到重复的单词,(\b\w+)\s+\1 也可以被写成 (?P\b\w+)\s+(?P=word): 切换行号显示 1 >>> p = re.compile(r'(?P\b\w+)\s+(?P=word)') 2 >>> p.search('Paris in the the spring').group() 3 'the the' 4. 前向界定符 另一个零宽界定符(zero-width assertion)是前向界定符。前向界定符包括前向肯定界定符和后向肯定界定符,所下所示: (?=...) 前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。 (?!...) 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功 通过示范在哪前向可以成功有助于具体实现。考虑一个简单的模式用于匹配一个文件名,并将其通过 "." 分成基本名和扩展名两部分。如在 "news.rc" 中,"news" 是基本名,"rc" 是文件的扩展名。 匹配模式非常简单: .*[.].*$ 注意 "." 需要特殊对待,因为它是一个元字符;我把它放在一个字符类中。另外注意后面的 $; 添加这个是为了确保字符串所有的剩余部分必须被包含在扩展名中。这个正则表达式匹配 "foo.bar"、"autoexec.bat"、 "sendmail.cf" 和 "printers.conf"。 现在,考虑把问题变得复杂点;如果你想匹配的扩展名不是 "bat" 的文件名?一些不正确的尝试: .*[.][^b].*$ 上面的第一次去除 "bat" 的尝试是要求扩展名的第一个字符不是 "b"。这是错误的,因为该模式也不能匹配 "foo.bar"。 .*[.]([^b]..|.[^a].|..[^t])$ 当你试着修补第一个解决方法而要求匹配下列情况之一时表达式更乱了:扩展名的第一个字符不是 "b"; 第二个字符不是 "a";或第三个字符不是 "t"。这样可以接受 "foo.bar" 而拒绝 "autoexec.bat",但这要求只能是三个字符的扩展名而不接受两个字符的扩展名如 "sendmail.cf"。我们将在努力修补它时再次把该模式变得复杂。 .*[.]([^b].?.?|.[^a]?.?|..?[^t]?)$ 在第三次尝试中,第二和第三个字母都变成可选,为的是允许匹配比三个字符更短的扩展名,如 "sendmail.cf"。 该模式现在变得非常复杂,这使它很难读懂。更糟的是,如果问题变化了,你想扩展名不是 "bat" 和 "exe",该模式甚至会变得更复杂和混乱。 前向否定把所有这些裁剪成: .*[.](?!bat$).*$ 前向的意思:如果表达式 bat 在这里没有匹配,尝试模式的其余部分;如果 bat$ 匹配,整个模式将失败。后面的 $ 被要求是为了确保象 "sample.batch" 这样扩展名以 "bat" 开头的会被允许。 将另一个文件扩展名排除在外现在也容易;简单地将其做为可选项放在界定符中。下面的这个模式将以 "bat" 或 "exe" 结尾的文件名排除在外。 .*[.](?!bat$|exe$).*$ 修改字符串 到目前为止,我们简单地搜索了一个静态字符串。正则表达式通常也用不同的方式,通过下面的 RegexObject 方法,来修改字符串。 方法/属性 作用 split() 将字符串在 RE 匹配的地方分片并生成一个列表, sub() 找到 RE 匹配的所有子串,并将其用一个不同的字符串替换 subn() 与 sub() 相同,但返回新的字符串和替换次数 1. 将字符串分片 RegexObject 的 split() 方法在 RE 匹配的地方将字符串分片,将返回列表。它同字符串的 split() 方法相似但提供更多的定界符;split()只支持空白符和固定字符串。就象你预料的那样,也有一个模块级的 re.split() 函数。 split(string [, maxsplit = 0]) 通过正则表达式将字符串分片。如果捕获括号在 RE 中使用,那么它们的内容也会作为结果列表的一部分返回。如果 maxsplit 非零,那么最多只能分出 maxsplit 个分片。 你可以通过设置 maxsplit 值来限制分片数。当 maxsplit 非零时,最多只能有 maxsplit 个分片,字符串的其余部分被做为列表的最后部分返回。在下面的例子中,定界符可以是非数字字母字符的任意序列。 切换行号显示 1 >>> p = re.compile(r'\W+') 2 >>> p.split('This is a test, short and sweet, of split().') 3 ['This', 'is', 'a', 'test', 'short', 'and', 'sweet', 'of', 'split', ''] 4 >>> p.split('This is a test, short and sweet, of split().', 3) 5 ['This', 'is', 'a', 'test, short and sweet, of split().'] 有时,你不仅对定界符之间的文本感兴趣,也需要知道定界符是什么。如果捕获括号在 RE 中使用,那么它们的值也会当作列表的一部分返回。比较下面的调用: 切换行号显示 1 >>> p = re.compile(r'\W+') 2 >>> p2 = re.compile(r'(\W+)') 3 >>> p.split('This... is a test.') 4 ['This', 'is', 'a', 'test', ''] 5 >>> p2.split('This... is a test.') 6 ['This', '... ', 'is', ' ', 'a', ' ', 'test', '.', ''] 模块级函数 re.split() 将 RE 作为第一个参数,其他一样。 切换行号显示 1 >>> re.split('[\W]+', 'Words, words, words.') 2 ['Words', 'words', 'words', ''] 3 >>> re.split('([\W]+)', 'Words, words, words.') 4 ['Words', ', ', 'words', ', ', 'words', '.', ''] 5 >>> re.split('[\W]+', 'Words, words, words.', 1) 6 ['Words', 'words, words.'] 2. 搜索和替换 其他常见的用途就是找到所有模式匹配的字符串并用不同的字符串来替换它们。sub() 方法提供一个替换值,可以是字符串或一个函数,和一个要被处理的字符串。 sub(replacement, string[, count = 0]) 返回的字符串是在字符串中用 RE 最左边不重复的匹配来替换。如果模式没有发现,字符将被没有改变地返回。 可选参数 count 是模式匹配后替换的最大次数;count 必须是非负整数。缺省值是 0 表示替换所有的匹配。 这里有个使用 sub() 方法的简单例子。它用单词 "colour" 替换颜色名。 切换行号显示 1 >>> p = re.compile( '(blue|white|red)') 2 >>> p.sub( 'colour', 'blue socks and red shoes') 3 'colour socks and colour shoes' 4 >>> p.sub( 'colour', 'blue socks and red shoes', count=1) 5 'colour socks and red shoes' subn() 方法作用一样,但返回的是包含新字符串和替换执行次数的两元组。 切换行号显示 1 >>> p = re.compile( '(blue|white|red)') 2 >>> p.subn( 'colour', 'blue socks and red shoes') 3 ('colour socks and colour shoes', 2) 4 >>> p.subn( 'colour', 'no colours at all') 5 ('no colours at all', 0) 空匹配只有在它们没有紧挨着前一个匹配时才会被替换掉。 切换行号显示 1 >>> p = re.compile('x*') 2 >>> p.sub('-', 'abxd') 3 '-a-b-d-' 如果替换的是一个字符串,任何在其中的反斜杠都会被处理。"\n" 将会被转换成一个换行符,"\r"转换成回车等等。未知的转义如 "\j" 是 left alone。逆向引用,如 "\6",被 RE 中相应的组匹配而被子串替换。这使你可以在替换后的字符串中插入原始文本的一部分。 这个例子匹配被 "{" 和 "}" 括起来的单词 "section",并将 "section" 替换成 "subsection"。 切换行号显示 1 >>> p = re.compile('section{ ( [^}]* ) }', re.VERBOSE) 2 >>> p.sub(r'subsection{\1}','section{First} section{second}') 3 'subsection{First} subsection{second}' 还可以指定用 (?P...) 语法定义的命名组。"\g" 将通过组名 "name" 用子串来匹配,并且 "\g" 使用相应的组号。所以 "\g<2>" 等于 "\2",但能在替换字符串里含义不清,如 "\g<2>0"。("\20" 被解释成对组 20 的引用,而不是对后面跟着一个字母 "0" 的组 2 的引用。) 切换行号显示 1 >>> p = re.compile('section{ (?P [^}]* ) }', re.VERBOSE) 2 >>> p.sub(r'subsection{\1}','section{First}') 3 'subsection{First}' 4 >>> p.sub(r'subsection{\g<1>}','section{First}') 5 'subsection{First}' 6 >>> p.sub(r'subsection{\g}','section{First}') 7 'subsection{First}' 替换也可以是一个甚至给你更多控制的函数。如果替换是个函数,该函数将会被模式中每一个不重复的匹配所调用。在每个调用时,函数被作为 MatchObject 的匹配函属,并可以使用这个信息去计算预期的字符串并返回它。 在下面的例子里,替换函数将十进制翻译成十六进制: 切换行号显示 1 >>> def hexrepl( match ): 2 ... "Return the hex string for a decimal number" 3 ... value = int( match.group() ) 4 ... return hex(value) 5 ... 6 >>> p = re.compile(r'\d+') 7 >>> p.sub(hexrepl, 'Call 65490 for printing, 49152 for user code.') 8 'Call 0xffd2 for printing, 0xc000 for user code.' 当使用模块级的 re.sub() 函数时,模式作为第一个参数。模式也许是一个字符串或一个 RegexObject;如果你需要指定正则表达式标志,你必须要么使用 RegexObject 做第一个参数,或用使用模式内嵌修正器,如 sub("(?i)b+", "x", "bbbb BBBB") returns 'x x'。 常见问题 正则表达式对一些应用程序来说是一个强大的工具,但在有些时候它并不直观而且有时它们不按你期望的运行。本节将指出一些最容易犯的常见错误。 1. 使用字符串方式 有时使用 re 模块是个错误。如果你匹配一个固定的字符串或单个的字符类,并且你没有使用 re 的任何象 IGNORECASE 标志的功能,那么就没有必要使用正则表达式了。字符串有一些方法是对固定字符串进行操作的,它们通常快很多,因为都是一个个经过优化的C 小循环,用以代替大的、更具通用性的正则表达式引擎。 举个用一个固定字符串替换另一个的例子;如,你可以把 "deed" 替换成 "word"。re.sub() seems like the function to use for this, but consider the replace() method. 注意 replace() 也可以在单词里面进行替换,可以把 "swordfish" 变成 "sdeedfish",不过 RE 也是可以做到的。(为了避免替换单词的一部分,模式将写成 \bword\b,这是为了要求 "word" 两边有一个单词边界。这是个超出替换能力的工作)。 另一个常见任务是从一个字符串中删除单个字符或用另一个字符来替代它。你也许可以用象 re.sub('\n',' ',S) 这样来实现,但 translate() 能够实现这两个任务,而且比任何正则表达式操作起来更快。 总之,在使用 re 模块之前,先考虑一下你的问题是否可以用更快、更简单的字符串方法来解决。 2. match() vs search() match() 函数只检查 RE 是否在字符串开始处匹配,而 search() 则是扫描整个字符串。记住这一区别是重要的。记住,match() 只报告一次成功的匹配,它将从 0 处开始;如果匹配不是从 0 开始的,match() 将不会报告它。 切换行号显示 1 >>> print re.match('super', 'superstition').span() 2 (0, 5) 3 >>> print re.match('super', 'insuperable') 4 None 另一方面,search() 将扫描整个字符串,并报告它找到的第一个匹配。 切换行号显示 1 >>> print re.search('super', 'superstition').span() 2 (0, 5) 3 >>> print re.search('super', 'insuperable').span() 4 (2, 7) 有时你可能倾向于使用 re.match(),只在RE的前面部分添加 .* 。请尽量不要这么做,最好采用 re.search() 代替之。正则表达式编译器会对 REs 做一些分析以便可以在查找匹配时提高处理速度。一个那样的分析机会指出匹配的第一个字符是什么;举个例子,模式 Crow 必须从 "C" 开始匹配。分析机可以让引擎快速扫描字符串以找到开始字符,并只在 "C" 被发现后才开始全部匹配。 添加 .* 会使这个优化失败,这就要扫描到字符串尾部,然后回溯以找到 RE 剩余部分的匹配。使用 re.search() 代替。 3. 贪婪 vs 不贪婪 当重复一个正则表达式时,如用 a*,操作结果是尽可能多地匹配模式。当你试着匹配一对对称的定界符,如 HTML 标志中的尖括号时这个事实经常困扰你。匹配单个 HTML 标志的模式不能正常工作,因为 .* 的本质是“贪婪”的 切换行号显示 1 >>> s = 'Title' 2 >>> len(s) 3 32 4 >>> print re.match('<.*>', s).span() 5 (0, 32) 6 >>> print re.match('<.*>', s).group() 7 Title RE 匹配 在 "" 中的 "<",.* 消耗掉子符串的剩余部分。在 RE 中保持更多的左,虽然 > 不能匹配在字符串结尾,因此正则表达式必须一个字符一个字符地回溯,直到它找到 > 的匹配。最终的匹配从 "" 中的 ">",这并不是你所想要的结果。 在这种情况下,解决方案是使用不贪婪的限定符 *?、+?、?? 或 {m,n}?,尽可能匹配小的文本。在上面的例子里, ">" 在第一个 "<" 之后被立即尝试,当它失败时,引擎一次增加一个字符,并在每步重试 ">"。这个处理将得到正确的结果: 切换行号显示 1 >>> print re.match('<.*?>', s).group() 2 (注意用正则表达式分析 HTML 或 XML 是痛苦的。变化混乱的模式将处理常见情况,但 HTML 和 XML 则是明显会打破正则表达式的特殊情况;当你编写一个正则表达式去处理所有可能的情况时,模式将变得非常复杂。象这样的任务用 HTML 或 XML 解析器。 4. 不用 re.VERBOSE 现在你可能注意到正则表达式的表示是十分紧凑,但它们非常不好读。中度复杂的 REs 可以变成反斜杠、圆括号和元字符的长长集合,以致于使它们很难读懂。 在这些 REs 中,当编译正则表达式时指定 re.VERBOSE 标志是有帮助的,因为它允许你可以编辑正则表达式的格式使之更清楚。 re.VERBOSE 标志有这么几个作用。在正则表达式中不在字符类中的空白符被忽略。这就意味着象 dog | cat 这样的表达式和可读性差的 dog|cat 相同,但 [a b] 将匹配字符 "a"、"b" 或 空格。另外,你也可以把注释放到 RE 中;注释是从 "#" 到下一行。当使用三引号字符串时,可以使 REs 格式更加干净: 切换行号显示 1 pat = re.compile(r""" 2 \s* # Skip leading whitespace 3 (?P
[^:]+) # Header name 4 \s* : # Whitespace, and a colon 5 (?P.*?) # The header's value -- *? used to 6 # lose the following trailing whitespace 7 \s*$ # Trailing whitespace to end-of-line 8 """, re.VERBOSE) 这个要难读得多: 切换行号显示 1 pat = re.compile(r"\s*(?P
[^:]+)\s*sad.gif?P.*?)\s*$") 反馈 正则表达式是一个复杂的主题。本文能否有助于你理解呢?那些部分是否不清晰,或在这儿没有找到你所遇到的问题?如果是那样的话,请将建议发给作者以便改进。 描述正则表达式最全面的书非Jeffrey Friedl 写的《精通正则表达式》莫属,该书由O'Reilly 出版。可惜该书只专注于 Perl 和 Java 风格的正则表达式,不含任何 Python 材料,所以不足以用作Python编程时的参考。(第一版包含有 Python 现已过时的 regex 模块,自然用处不大)。

entry 2006-7-14, 14:37 PM
emule for help

emule Forum

entry 2006-6-21, 01:53 AM
oneleaf 编译



以下是一句话技巧。


安装

查看软件xxx安装内容
dpkg -L xxx
查找软件
apt-cache search 正则表达式
查找文件属于哪个包
dpkg -S filename
apt-file search filename
查询软件xxx依赖哪些包
apt-cache depends xxx
查询软件xxx被哪些包依赖
apt-cache rdepends xxx
增加一个光盘源
sudo apt-cdrom add
系统升级
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
清除所以删除包的残余配置文件
dpkg -l |grep ^rc|awk '{print $2}' |tr ["\n"] [" "]|sudo xargs dpkg -P -
编译时缺少h文件的自动处理
sudo auto-apt run ./configure
查看安装软件时下载包的临时存放目录
ls /var/cache/apt/archives
备份当前系统安装的所有包的列表
dpkg --get-selections | grep -v deinstall > ~/somefile

从上面备份的安装包的列表文件恢复所有包
dpkg --set-selections < ~/somefile
sudo dselect

清理旧版本的软件缓存
sudo apt-get autoclean
清理所有软件缓存
sudo apt-get clean
删除系统不再使用的孤立软件
sudo apt-get autoremove
系统

查看内核
uname -a
查看Ubuntu版本
cat /etc/issue
查看内核加载的模块
lsmod
查看PCI设备
lspci
查看USB设备
lsusb
查看网卡状态
sudo ethtool eth0
查看CPU信息
cat /proc/cpuinfo
显示当前硬件信息
lshw
硬盘

查看硬盘的分区
sudo fdisk -l
查看IDE硬盘信息
sudo hdparm -i /dev/hda
查看STAT硬盘信息
sudo hdparm -I /dev/sda

sudo apt-get install blktool
sudo blktool /dev/sda id
查看硬盘剩余空间
df -h
df -H
查看目录占用空间
du -hs 目录名
优盘没法卸载
sync
fuser -km /media/usbdisk
内存

查看当前的内存使用情况
free -m
进程

查看当前有哪些进程
ps -A
中止一个进程
kill 进程号(就是ps -A中的第一列的数字)
或者 killall 进程名
强制中止一个进程(在上面进程中止不成功的时候使用)
kill -9 进程号
或者 killall -9 进程名
图形方式中止一个程序
xkill 出现骷髅标志的鼠标,点击需要中止的程序即可
查看当前进程的实时状况
top
查看进程打开的文件
lsof -p
ADSL

配置 ADSL
sudo pppoeconf
ADSL手工拨号
sudo pon dsl-provider
激活 ADSL
sudo /etc/ppp/pppoe_on_boot
断开 ADSL
sudo poff
查看拨号日志
sudo plog
网络

根据IP查网卡地址
arping IP地址
查看当前IP地址
ifconfig eth0 |awk '/inet addr/ {split($2,x,":");print x[2]}'
查看当前外网的IP地址
w3m -no-cookie -dump www.ip138.com|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
w3m -no-cookie -dump ip.loveroot.com|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
查看当前监听80端口的程序
lsof -i :80
查看当前网卡的物理地址
arp -a | awk '{print $4}'
ifconfig eth0 | head -1 | awk '{print $5}'
立即让网络支持nat
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -I POSTROUTING -j MASQUERADE
查看路由信息
netstat -rn
sudo route -n

手工增加删除一条路由
sudo route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1
sudo route del -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1
修改网卡MAC地址的方法
sudo ifconfig eth0 down #关闭网卡
sudo ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE #然后改地址
sudo ifconfig eth0 up #然后启动网卡
统计当前IP连接的个数
netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n
netstat -na|grep SYN|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n
统计当前20000个IP包中大于100个IP包的IP地址
tcpdump -tnn -c 20000 -i eth0 | awk -F "." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | awk ' $1 > 100 '
屏蔽IPV6
echo "blacklist ipv6" | sudo tee /etc/modprobe.d/blacklist-ipv6
服务

添加一个服务
sudo update-rc.d 服务名 defaults 99
删除一个服务
sudo update-rc.d 服务名 remove
临时重启一个服务
/etc/init.d/服务名 restart
临时关闭一个服务
/etc/init.d/服务名 stop
临时启动一个服务
/etc/init.d/服务名 start
设置

配置默认Java使用哪个
sudo update-alternatives --config java
修改用户资料
sudo chfn userid
给apt设置代理
export http_proxy=http://xx.xx.xx.xx:xxx
修改系统登录信息
sudo vim /etc/motd
中文

转换文件名由GBK为UTF8
sudo apt-get install convmv
convmv -r -f cp936 -t utf8 --notest --nosmart *
转换文件内容由GBK为UTF8
iconv -f gbk -t utf8 $i > newfile
转换 mp3 标签编码
sudo apt-get install python-mutagen
find . -iname “*.mp3” -execdir mid3iconv -e GBK {} \;
控制台下显示中文
sudo apt-get install zhcon
使用时,输入zhcon即可
文件

快速查找某个文件
whereis filenamefind 目录 -name 文件名
查看文件类型
file filename
显示xxx文件倒数6行的内容
tail -n 6 xxx
让tail不停地读地最新的内容
tail -n 10 -f /var/log/apache2/access.log
查看文件中间的第五行(含)到第10行(含)的内容
sed -n '5,10p' /var/log/apache2/access.log
查找包含xxx字符串的文件
grep -l -r xxx .
查找关于xxx的命令
apropos xxx
man -k xxx
通过ssh传输文件
scp -rp /path/filename username@remoteIP:/path #将本地文件拷贝到服务器上
scp -rp username@remoteIP:/path/filename /path #将远程文件从服务器下载到本地
查看某个文件被哪些应用程序读写
lsof 文件名
把所有文件的后辍由rm改为rmvb
rename 's/.rm$/.rmvb/' *
把所有文件名中的大写改为小写
rename 'tr/A-Z/a-z/' *
删除特殊文件名的文件,如文件名:--help.txt
rm -- --help.txt 或者 rm ./--help.txt
查看当前目录的子目录
ls -d */. 或 echo */.
将当前目录下最近30天访问过的文件移动到上级back目录
find . -type f -atime -30 -exec mv {} ../back \;
将当前目录下最近2小时到8小时之内的文件显示出来
find . -mmin +120 -mmin -480 -exec more {} \;
删除修改时间在30天之前的所有文件
find . -type f -mtime +30 -mtime -3600 -exec rm {} \;
查找guest用户的以avi或者rm结尾的文件并删除掉
find . -name '*.avi' -o -name '*.rm' -user 'guest' -exec rm {} \;
查找的不以java和xml结尾,并7天没有使用的文件删除掉
find . ! -name *.java ! -name ‘*.xml’ -atime +7 -exec rm {} \;
统计当前文件个数
ls /usr/bin|wc -w
显示当前目录下2006-01-01的文件名
ls -l |grep 2006-01-01 |awk '{print $8}'
压缩

解压缩 xxx.tar.gz
tar -zxvf xxx.tar.gz
解压缩 xxx.tar.bz2
tar -jxvf xxx.tar.bz2
压缩aaa bbb目录为xxx.tar.gz
tar -zcvf xxx.tar.gz aaa bbb
压缩aaa bbb目录为xxx.tar.bz2
tar -jcvf xxx.tar.bz2 aaa bbb
Nautilus

显示隐藏文件
Ctrl+h
显示地址栏
Ctrl+l
特殊 URI 地址
* computer:/// - 全部挂载的设备和网络
* network:/// - 浏览可用的网络
* burn:/// - 一个刻录 CDs/DVDs 的数据虚拟目录
* smb:/// - 可用的 windows/samba 网络资源
* x-nautilus-desktop:/// - 桌面项目和图标
* file:/// - 本地文件
* trash:/// - 本地回收站目录
* ftp:// - FTP 文件夹
* ssh:// - SSH 文件夹
* fonts:/// - 字体文件夹,可将字体文件拖到此处以完成安装
* themes:/// - 系统主题文件夹

查看已安装字体
在nautilus的地址栏里输入”fonts:///“,就可以查看本机所有的fonts
程序

详细显示程序的运行信息
strace -f -F -o outfile <cmd>
日期和时间

设置日期
#date -s mm/dd/yy
设置时间
#date -s HH:MM
将时间写入CMOS
hwclock --systohc
读取CMOS时间
hwclock --hctosys
控制台

不同控制台间切换
Ctrl + ALT + ←
Ctrl + ALT + →
指定控制台切换
Ctrl + ALT + Fn(n:1~7)
控制台下滚屏
SHIFT + pageUp/pageDown
控制台抓图
setterm -dump n(n:1~7)
数据库

mysql的数据库存放在地方
/var/lib/mysql
从mysql中导出和导入数据
mysqldump 数据库名 > 文件名 #导出数据库
mysqladmin create 数据库名 #建立数据库
mysql 数据库名 < 文件名 #导入数据库
忘了mysql的root口令怎么办
sudo /etc/init.d/mysql stop
sudo mysqld_safe --skip-grant-tables &
sudo mysqladmin -u user password 'newpassword''
sudo mysqladmin flush-privileges
修改mysql的root口令
sudo mysqladmin -uroot -p password '你的新密码'
其它

下载网站文档
wget -r -p -np -k http://www.21cn.com
· -r:在本机建立服务器端目录结构;
· -p: 下载显示HTML文件的所有图片;
· -np:只下载目标站点指定目录及其子目录的内容;
· -k: 转换非相对链接为相对链接。
如何删除Totem电影播放机的播放历史记录
rm ~/.recently-used
如何更换gnome程序的快捷键
点击菜单,鼠标停留在某条菜单上,键盘输入任意你所需要的键,可以是组合键,会立即生效;
如果要清除该快捷键,请使用backspace

2 页 V < 1 2  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30



我的 Blog 链接


无端网游
无端网游

无端游戏
无端网游

无端网游
无端网游

英雄之门
无端网游
英雄之门

盛大英雄之门
盛大英雄之门

英雄之门盛大
英雄之门盛大

英雄之门官网
英雄之门盛大

英雄之门webgame
英雄之门盛大

英雄之门网页游戏
英雄之门盛大

webgame英雄之门
英雄之门盛大

网页游戏英雄之门
网页游戏英雄之门

英雄之门评论
英雄之门评论

英雄之门主页
英雄之门主页

英雄之门官方主页
英雄之门官方主页