<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hello, Linux!</title>
	<atom:link href="http://www.hellolinux.org/feed" rel="self" type="application/rss+xml" />
	<link>http://www.hellolinux.org</link>
	<description>专注Linux &#124; Linux编程 &#124; Linux VPS &#124; 主机,域名信息</description>
	<lastBuildDate>Tue, 21 Feb 2012 02:42:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Linux命令速查手册</title>
		<link>http://www.hellolinux.org/2012/02/linux-command-quick-reference-handbook.html</link>
		<comments>http://www.hellolinux.org/2012/02/linux-command-quick-reference-handbook.html#comments</comments>
		<pubDate>Tue, 21 Feb 2012 02:38:26 +0000</pubDate>
		<dc:creator>Hello,Linux</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.hellolinux.org/?p=135</guid>
		<description><![CDATA[一. 启动,关机,登入,登出相关命令 [login] 登录 [logout] 登出 [exit] 登出 [shutdown] 停止系统 [halt] 停止系统 [reboot] 重启动 [poweroff] 切断电源 [sync] 把内存里的内容写入磁盘 [lilo] 安装lilo启动管理程序 [grub] 安装lilo启动管理程序 二. Shell相关命令 [chsh] 切换Shell [history] 显示命令履历 [alias] 设置命令别名 [unalias] 取消命令别名 [which] 显示命令所在位置 [type] 查询命令种类 [echo] 显示字符串或者变量内容 [set] 设置/显示Shell变量 &#8230; <a href="http://www.hellolinux.org/2012/02/linux-command-quick-reference-handbook.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>一. 启动,关机,登入,登出相关命令</strong>    <br />[login] 登录    <br />[logout] 登出    <br />[exit] 登出    <br />[shutdown] 停止系统    <br />[halt] 停止系统    <br />[reboot] 重启动    <br />[poweroff] 切断电源    <br />[sync] 把内存里的内容写入磁盘    <br />[lilo] 安装lilo启动管理程序    <br />[grub] 安装lilo启动管理程序</p>
<p><span id="more-135"></span>
<p><strong>二. Shell相关命令</strong>    <br />[chsh] 切换Shell    <br />[history] 显示命令履历    <br />[alias] 设置命令别名    <br />[unalias] 取消命令别名    <br />[which] 显示命令所在位置    <br />[type] 查询命令种类    <br />[echo] 显示字符串或者变量内容    <br />[set] 设置/显示Shell变量    <br />[printenv] 显示环境变量    <br />[export] 设置环境变量    <br />[env] 设置临时环境变量    <br />[unset] 释放环境变量    <br />[setenv] 设置环境变量    <br />[unsetenv] 释放环境变量    <br /> 执行文件当中的命令    <br />[man] 查询命令手册    <br />[info] 查询超文本命令手册    <br />[whatis] 显示命令简介    <br />[apropos] 通过关键字查询手册</p>
<p><strong>三. 用户管理相关命令</strong>    <br />[<a href="http://www.9usb.net/200812/linux-su.html">su</a>] 切换到其他用户    <br />[useradd] 追加用户    <br />[adduser] 追加用户    <br />[userdel] 删除用户    <br />[usermod] 修改用户设置    <br />[chfn] 修改用户私人信息    <br />[groupadd] 追加组    <br />[groupdel] 删除组    <br />[groupmod] 修改组设置    <br />[passwd] 更改密码    <br />[whoami] 显示用户名    <br />[logname] 显示登录用户帐号    <br />[users] 显示所有登录用户信息    <br />[who] 查询登录用户信息    <br />[w] 查询登录用户信息    <br />[id] 显示指定用户的ID信息    <br />[groups] 显示指定用户的所属组    <br />[finger] 显示指定用户的个人信息    <br />[mesg] 开关与他人收发消息    <br />[write] 给其他用户发消息    <br />[wall] 给所有用户发消息    <br />[talk] 和其他用户聊天</p>
<p><strong>四. 系统消息相关命令</strong>    <br />[top] 提供了实时的对系统处理器的状态监视    <br />[date] 显示/设置当前时间    <br />[uptime] 显示系统运行时间    <br />[arch] 显示机器的核心构架（如i386）    <br />[uname] 显示操作系统信息    <br />[tty] 显示终端名    <br />[last] 显示登录/登出在履历    <br />[lastb] 显示非法登录信息    <br />[dumpkeys] 显示当前键盘配置    <br />[loadkeys] 变更键盘配置    <br />[df] 查询磁盘使用信息    <br />[du] 查询磁盘使用信息    <br />[dmesg] 显示系统启动消息    <br />[script] 保存输入输出到文件</p>
<p><strong>五. 文件操作相关命令</strong>    <br />[ls] 显示文件列表    <br />[tree] 显示目录树    <br />[pwd] 显示当前路径    <br />[cd] 更改当前路径    <br />[pushd] 追加路径到目录堆栈    <br />[popd] 从目录堆栈删除路径    <br />[dirs] 显示目录堆栈的内容    <br />[mkdir] 创建路径    <br />[rmdir] 删除路径    <br />[cp] 复制文件/目录    <br />[rm] 删除文件/目录    <br />[mv] 移动文件/目录，修改文件名    <br />[chown] 更改文件/目录的所有者    <br />[chgrp] 修改文件/目录的所有组    <br />[chmod] 修改文件/目录的权限    <br />[touch] 更改文件时间    <br />[ln] 建立文件/目录链接    <br />[find] 查找文件    <br />[whereis] 显示文件存在的路径名    <br />[file] 查询文件种类    <br />[size] 查询文件大小</p>
<p><strong>六. 文件编辑相关命令</strong>    <br />[cat] 显示文件内容    <br />[tee] 输出到文件和屏幕    <br />[more] 分屏显示文件内容    <br />[less] 分屏显示文件内容    <br />[head] 显示文件头部内容    <br />[tail] 显示文件尾部内容    <br />[fold] 折叠显示长行    <br />[sort] 排列文件的行    <br />[cmp] 比较文件内容    <br /> 显示文件差异    <br />[nkf] 更改日语文件编码    <br />[dd] 变更文件之后复制    <br />[wc] 统计文本单词数，文件大小等    <br />[split] 分割文件    <br />[paste] 以行连接文件    <br />[join] 以字段连接文件    <br />[grep] 查询文字    <br />[uniq] 过滤重复部分显示文件内容    <br />[tr] 替换文字    <br />[sed] 替换文字    <br />[vi] vi文字编辑器</p>
<p><strong>七. 压缩/解压缩相关命令</strong>    <br />[tar] 压缩/解压缩文件    <br />[compress] 压缩/解压缩文件    <br />[uncompress] 解压缩    <br />[gzip] 压缩/解压缩文件    <br />[gunzip] 解压缩    <br />[zcat] 显示压缩文件的内容    <br />[lha] 压缩/解压缩文件    <br />[uuencode] 把二进制文件编码为文本文件    <br />[uudecode] 把经过编码的文本文件还原为二进制文件</p>
<p><strong>八. MS-DOS工具集</strong></p>
<p>[mtools]命令   <br />[mdir] 显示文件列表    <br />[mcd] 改变当前目录    <br />[mmd] 新建目录    <br />[mrd] 删除目录    <br />[mdeltree] 删除目录树    <br />[mcopy] 复制文件    <br />[mdel] 删除文件    <br />[mmove] 移动文件    <br />[mren] 更改文件或目录名    <br />[mattrib] 修改文件属性    <br />[mtype] 显示文件内容    <br />[mdu] 查询文件或目录大小    <br />[minfo] 显示磁盘信息    <br />[mformat] 以MS-DOS方式格式化磁盘    <br />[mlabel] 设置磁盘标签</p>
<p><strong>九. 控制外部设备相关命令</strong>    <br />[mount] mount上设备    <br />[umount] 解除已经mount上的设备    <br />[eject] 弹出（CD/DVD等）    <br />[fdformat] 格式化软盘    <br />[fdisk] 配置/显示硬盘分区    <br />[mkfs] 格式化磁盘分区    <br />[fsck] 检查/修复磁盘错误    <br />[lpr] 打印到打印机    <br />[lprm] 中断打印任务    <br />[lpq] 显示打印任务的状态    <br />[lpc] 管理/控制打印任务    <br />[ifconfig] 显示/设定NIC配置</p>
<p><strong>十. 进程及任务管理相关命令</strong>    <br /> 显示正在运行的进程    <br />[jobs] 显示后台运行任务    <br />[fg] 把任务切换到前台    <br />[bg] 把任务切换到后台    <br />[kill] 中止进程或任务    <br />[killall] 中止进程或任务    <br />[wait] 等待进程或任务的结束    <br />[at] 设置定时执行任务    <br />[atq] 显示尚未执行的任务    <br />[atrm] 删除定时执行任务    <br />[batch] 在系统负荷减轻的时候执行任务    <br />[nice] 改变优先度并执行任务    <br />[nohup] 在后台执行任务，Logout之后也不退出    <br />[sleep] 休眠一定的时间    <br />[crond] 用来定期执行程序的命令    <br />[screen] 可以在多个进程之间多路复用一个物理终端的窗口管理器</p>
<p><strong>十一. 网络管理相关命令</strong>    <br />[netstat] 显示当前网络连接状况    <br />[route] 显示/设置路由    <br />[host] 显示网络主机情况    <br />[hostname] 显示/设置当前主机的名字    <br />[ping] 确认和远程机器的连接情况    <br />[traceroute] 显示路由信息    <br />[rwho] 查询网上机器的登陆用户    <br />[ruptime] 查询网上机器的系统运行时间    <br />[rlogin] 登陆到远程机器    <br />[telnet] 用telnet登陆到远程机器    <br />[rsh] 给远程机器发送命令    <br />[rcp] 在远程机器之间复制文件    <br />[mail] 收取邮件    <br />[sendmail] 发送邮件    <br />[mailq] 确认邮件队列    <br />[ftp] 用ftp传输文件</p>
<p><strong>十二. 其他命令</strong>    <br />[cal] 显示日历    <br />[clear] 清屏    <br />[gcc] 编译C语言代码    <br />[as] 汇编    <br />[bc] 计算    <br />[rpm] Redhat的包管理    <br />[dpkg] Debian的包管理    <br />[installpkg] Slackware的包安装（删除命令则是removepkg）    <br />[xf86setup ,turboxfg,Xconfigurator] 配置 X 服务器    <br />[startx] 启动 X-Window 系统</p>
<p>&#160;</p>
<p>原文：<a title="http://www.9usb.net/200903/linux-shouce.html" href="http://www.9usb.net/200903/linux-shouce.html">http://www.9usb.net/200903/linux-shouce.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hellolinux.org/2012/02/linux-command-quick-reference-handbook.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux目录结构（Linux文件系统结构）</title>
		<link>http://www.hellolinux.org/2012/02/linux%e7%9b%ae%e5%bd%95%e7%bb%93%e6%9e%84%ef%bc%88linux%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f%e7%bb%93%e6%9e%84%ef%bc%89.html</link>
		<comments>http://www.hellolinux.org/2012/02/linux%e7%9b%ae%e5%bd%95%e7%bb%93%e6%9e%84%ef%bc%88linux%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f%e7%bb%93%e6%9e%84%ef%bc%89.html#comments</comments>
		<pubDate>Sat, 11 Feb 2012 07:08:05 +0000</pubDate>
		<dc:creator>Hello,Linux</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[file system]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.hellolinux.org/?p=133</guid>
		<description><![CDATA[Have you wondered why certain programs are located under /bin, or /sbin, or /usr/bin, or /usr/sbin? For example, less command is located under /usr/bin directory. Why not /bin, or /sbin, or /usr/sbin? What is the different between all these directories? &#8230; <a href="http://www.hellolinux.org/2012/02/linux%e7%9b%ae%e5%bd%95%e7%bb%93%e6%9e%84%ef%bc%88linux%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f%e7%bb%93%e6%9e%84%ef%bc%89.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Have you wondered why certain programs are located under /bin, or /sbin, or /usr/bin, or /usr/sbin?</p>
<p>For example, less command is located under /usr/bin directory. Why not /bin, or /sbin, or /usr/sbin? What is the different between all these directories?</p>
<p>In this article, let us review the Linux filesystem structures and understand the meaning of individual high-level directories.</p>
<p><span id="more-133"></span>
<p>&#160;</p>
<p><a href="http://www.hellolinux.org/wp-content/uploads/2012/02/linux_category.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="linux_category" border="0" alt="linux_category" src="http://www.hellolinux.org/wp-content/uploads/2012/02/linux_category_thumb.png" width="562" height="817" /></a></p>
<h6>1. / – Root</h6>
<ul>
<li>Every single file and directory starts from the root directory. </li>
<li>Only root user has write privilege under this directory. </li>
<li>Please note that /root is root user’s home directory, which is not same as /. </li>
</ul>
<h6>2. /bin – User Binaries</h6>
<ul>
<li>Contains binary executables. </li>
<li>Common linux commands you need to use in single-user modes are located under this directory. </li>
<li>Commands used by all the users of the system are located here. </li>
<li>For example: ps, ls, ping, grep, cp. </li>
</ul>
<h6>3. /sbin – System Binaries</h6>
<ul>
<li>Just like /bin, /sbin also contains binary executables. </li>
<li>But, the linux commands located under this directory are used typically by system aministrator, for system maintenance purpose. </li>
<li>For example: iptables, reboot, fdisk, ifconfig, swapon </li>
</ul>
<h6>4. /etc – Configuration Files</h6>
<ul>
<li>Contains configuration files required by all programs. </li>
<li>This also contains startup and shutdown shell scripts used to start/stop individual programs. </li>
<li>For example: /etc/resolv.conf, /etc/logrotate.conf </li>
</ul>
<h6>5. /dev – Device Files</h6>
<ul>
<li>Contains device files. </li>
<li>These include terminal devices, usb, or any device attached to the system. </li>
<li>For example: /dev/tty1, /dev/usbmon0 </li>
</ul>
<h6>6. /proc – Process Information</h6>
<ul>
<li>Contains information about system process. </li>
<li>This is a pseudo filesystem contains information about running process. For example: /proc/{pid} directory contains information about the process with that particular pid. </li>
<li>This is a virtual filesystem with text information about system resources. For example: /proc/uptime </li>
</ul>
<h6>7. /var – Variable Files</h6>
<ul>
<li>var stands for variable files. </li>
<li>Content of the files that are expected to grow can be found under this directory. </li>
<li>This includes — system log files (/var/log); packages and database files (/var/lib); emails (/var/mail); print queues (/var/spool); lock files (/var/lock); temp files needed across reboots (/var/tmp); </li>
</ul>
<h6>8. /tmp – Temporary Files</h6>
<ul>
<li>Directory that contains temporary files created by system and users. </li>
<li>Files under this directory are deleted when system is rebooted. </li>
</ul>
<h6>9. /usr – User Programs</h6>
<ul>
<li>Contains binaries, libraries, documentation, and source-code for second level programs. </li>
<li>/usr/bin contains binary files for user programs. If you can’t find a user binary under /bin, look under /usr/bin. For example: at, awk, cc, less, scp </li>
<li>/usr/sbin contains binary files for system administrators. If you can’t find a system binary under /sbin, look under /usr/sbin. For example: atd, cron, sshd, useradd, userdel </li>
<li>/usr/lib contains libraries for /usr/bin and /usr/sbin </li>
<li>/usr/local contains users programs that you install from source. For example, when you install apache from source, it goes under /usr/local/apache2 </li>
</ul>
<h6>10. /home – Home Directories</h6>
<ul>
<li>Home directories for all users to store their personal files. </li>
<li>For example: /home/john, /home/nikita </li>
</ul>
<h6>11. /boot – Boot Loader Files</h6>
<ul>
<li>Contains boot loader related files. </li>
<li>Kernel initrd, vmlinux, grub files are located under /boot </li>
<li>For example: initrd.img-2.6.32-24-generic, vmlinuz-2.6.32-24-generic </li>
</ul>
<h6>12. /lib – System Libraries</h6>
<ul>
<li>Contains library files that supports the binaries located under /bin and /sbin </li>
<li>Library filenames are either ld* or lib*.so.* </li>
<li>For example: ld-2.11.1.so, libncurses.so.5.7 </li>
</ul>
<h6>13. /opt – Optional add-on Applications</h6>
<ul>
<li>opt stands for optional. </li>
<li>Contains add-on applications from individual vendors. </li>
<li>add-on applications should be installed under either /opt/ or /opt/ sub-directory. </li>
</ul>
<h6>14. /mnt – Mount Directory</h6>
<ul>
<li>Temporary mount directory where sysadmins can mount filesystems. </li>
</ul>
<h6>15. /media – Removable Media Devices</h6>
<ul>
<li>Temporary mount directory for removable devices. </li>
<li>For examples, /media/cdrom for CD-ROM; /media/floppy for floppy drives; /media/cdrecorder for CD writer </li>
</ul>
<h6>16. /srv – Service Data</h6>
<ul>
<li>srv stands for service. </li>
<li>Contains server specific services related data. </li>
<li>For example, /srv/cvs contains CVS related data. </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.hellolinux.org/2012/02/linux%e7%9b%ae%e5%bd%95%e7%bb%93%e6%9e%84%ef%bc%88linux%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f%e7%bb%93%e6%9e%84%ef%bc%89.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>正则表达式30分钟入门教程</title>
		<link>http://www.hellolinux.org/2012/02/regex-course.html</link>
		<comments>http://www.hellolinux.org/2012/02/regex-course.html#comments</comments>
		<pubDate>Thu, 09 Feb 2012 15:59:20 +0000</pubDate>
		<dc:creator>Hello,Linux</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[text]]></category>

		<guid isPermaLink="false">http://www.hellolinux.org/?p=124</guid>
		<description><![CDATA[国人翻译的《The 30 Minute Regex Tutorial》。和大家分享一下！另外推荐《精通正则表达式》，传说中正则只需要着一本书就足够了，我看过前三章，非常不错，其余的慢慢看，书不是很贵，可以买一本！ 目录 本文目标 如何使用本教程 正则表达式到底是什么？ 入门 测试正则表达式 元字符 字符转义 重复 字符类 反义 替换 分组 后向引用 零宽断言 负向零宽断言 注释 贪婪与懒惰 处理选项 平衡组/递归匹配 还有些什么东西没提到 一些我认为你可能已经知道的术语的参考 网上的资源及本文参考文献 本文目标 30分钟内让你明白正则表达式是什么，并对它有一些基本的了解，让你可以在自己的程序或网页里使用它。 如何使用本教程 最重要的是&#8212;&#8212;请给我30分钟，如果你没有使用正则表达式的经验，请不要试图在30秒内入门。当然，如果你是超人，那自然得另当别论。 别被下面那些复杂的表达式吓倒，只要跟着我一步一步来，你会发现正则表达式其实并没有你 想像中的那么困难。当然，如果你看完了这篇教程之后，发现自己明白了很多，却又几乎什么都记不得，那也是很正常的&#8212;&#8212;我认为，没接触过正则表达式的人在看 完这篇教程后，能把提到过的语法记住80%以上的可能性为零。这里只是让你明白基本的原理，以后你还需要多练习，多使用，才能熟练掌握正则表达式。 除了作为入门教程之外，本文还试图成为可以在日常工作中使用的正则表达式语法参考手册。就作者本人的经历来说，这个目标还是完成得不错的&#8212;&#8212;你看，我自己也没能把所有的东西记下来，不是吗？ 文本格式约定：专业术语&#160;元字符/语法格式&#160;正则表达式&#160;正则表达式中的一部分(用于分析)&#160;用于在其中搜索的字符串&#160;对正则表达式或其中一部分的说明 正则表达式到底是什么？ 在编写处理字符串的程序或网页时，经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说，正则表达式就是记录文本规则的代码。 很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard)，也就是&#160;和?。如果你想查找某个目录下的所有的Word文档的话，你会搜索.doc。在这里，*会被解释成任意的字符串。和通配符类似，正则表达式也是用来进行文本匹配的工具，只不过比起通配符，它能更精确地描述你的需求&#8212;&#8212;当然，代价就是更复杂&#8212;&#8212;比如你可以编写一个正则表达式，用来查找所有以0开头，后面跟着2-3个数字，然后是一个连字号&#8220;-&#8221;，最后是7或8位数字的字符串(像010-12345678或0376-7654321)。 &#8230; <a href="http://www.hellolinux.org/2012/02/regex-course.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>国人翻译的《<a href="http://www.codeproject.com/Articles/9099/The-30-Minute-Regex-Tutorial" target="_blank">The 30 Minute Regex Tutorial</a>》。和大家分享一下！另外推荐《精通正则表达式》，传说中正则只需要着一本书就足够了，我看过前三章，非常不错，其余的慢慢看，书不是很贵，可以买一本！<span id="more-124"></span></p>
<h2 id="contents" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">目录</h2>
<ol>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#mission">本文目标</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#howtouse">如何使用本教程</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#introduction">正则表达式到底是什么？</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#getstarted">入门</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#testing">测试正则表达式</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#metacode">元字符</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#escape">字符转义</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#repeat">重复</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#charclass">字符类</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#negation">反义</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#alternative">替换</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#grouping">分组</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#backreference">后向引用</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#lookaround">零宽断言</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#negativelookaround">负向零宽断言</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#commenting">注释</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#greedyandlazy">贪婪与懒惰</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#regexoptions">处理选项</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#balancedgroup">平衡组/递归匹配</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#more">还有些什么东西没提到</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#reference">一些我认为你可能已经知道的术语的参考</a></li>
<li><a href="http://www.hellolinux.org/2012/02/regex-course.html#resources">网上的资源及本文参考文献</a></li>
</ol>
<h2 id="mission" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">本文目标</h2>
<p>30分钟内让你明白正则表达式是什么，并对它有一些基本的了解，让你可以在自己的程序或网页里使用它。</p>
<h2 id="howtouse" style="background: none repeat scroll 0% 0% #eeeeee; border-left: 3px solid #aaaaaa; padding: 3px;">如何使用本教程</h2>
<p class="important">最重要的是&mdash;&mdash;请给我<em>30分钟</em>，如果你没有使用正则表达式的经验，请不要试图在30<em>秒</em>内入门。当然，如果你是超人，那自然得另当别论。</p>
<p>别被下面那些复杂的表达式吓倒，只要跟着我一步一步来，你会发现正则表达式其实并<span lang="zh-cn">没有</span>你 想像中的那么困难。当然，如果你看完了这篇教程之后，发现自己明白了很多，却又几乎什么都记不得，那也是很正常的&mdash;&mdash;我认为，没接触过正则表达式的人在看 完这篇教程后，能把提到过的语法记住80%以上的可能性为零。这里只是让你明白基本的原理，以后你还需要多练习，多使用，才能熟练掌握正则表达式。</p>
<p>除了作为入门教程之外，本文还试图成为可以在日常工作中使用的正则表达式语法参考手册。就作者本人的经历来说，这个目标还是完成得不错的&mdash;&mdash;你看，我自己也没能把所有的东西记下来，不是吗？</p>
<p>文本格式约定：<span class="name">专业术语</span>&nbsp;<span class="code">元字符/语法格式</span>&nbsp;<span class="regex">正则表达式</span>&nbsp;<span class="part">正则表达式中的一部分(用于分析)</span>&nbsp;<span class="string">用于在其中搜索的字符串</span>&nbsp;<span class="desc">对正则表达式或其中一部分的说明</span></p>
<h2 id="introduction" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">正则表达式到底是什么？</h2>
<p>在编写处理字符串的程序或网页时，经常会有查找符合某些复杂规则的字符串的需要。<span class="name">正则表达式</span>就是用于描述这些规则的工具。换句话说，正则表达式就是记录文本规则的代码。</p>
<p>很可能你使用过Windows/Dos下用于文件查找的<span class="name">通配符(wildcard)</span>，也就是<span class="code"><em>&nbsp;</em></span><em>和<span class="code">?</span>。如果你想查找某个目录下的所有的Word文档的话，你会搜索</em>.doc。在这里，<span class="code">*</span>会被解释成任意的字符串。和通配符类似，正则表达式也是用来进行文本匹配的工具，只不过比起通配符，它能更精确地描述你的需求&mdash;&mdash;当然，代价就是更复杂&mdash;&mdash;比如你可以编写一个正则表达式，用来查找<span class="desc">所有以0开头，后面跟着2-3个数字，然后是一个连字号&ldquo;-&rdquo;，最后是7或8位数字的字符串</span>(像<span class="string">010-12345678</span>或<span class="string">0376-7654321</span>)。</p>
<p id="match">正则表达式是用于进行文本匹配的工具，所以本文里多次提到了在字符串里搜索/查找，这种说法的意思是在给定的字符串中，寻找与给定的正则表达式相匹配的部分。有可能字符串里有不止一个部分满足给定的正则表达式，这时每一个这样的部分被称为一个匹配。<span class="name">匹配</span>在本文里可能会有三种意思：一种是形容词性的，比如说一个字符串匹配一个表达式；一种是动词性的，比如说在字符串里匹配正则表达式；还有一种是名词性的，就是刚刚说到的&ldquo;字符串中满足给定的正则表达式的一部分&rdquo;。</p>
<h2 id="getstarted" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">入门</h2>
<p>学习正则表达式的最好方法是从例子开始，理解例子之后再自己对例子进行修改，实验。下面给出了不少简单的例子，并对它们作了详细的说明。</p>
<p>假设你在一篇英文小说里查找<span class="desc">hi</span>，你可以使用正则表达式<span class="regex">hi</span>。</p>
<p>这是最简单的正则表达式了，它可以精确匹配这样的字符串：<span class="desc">由两个字符组成，前一个字符是h,后一个是i</span>。通常，处理正则表达式的工具会提供一个忽略大小写的选项，如果选中了这个选项，它可以匹配<span class="string">hi</span>,<span class="string">HI</span>,<span class="string">Hi</span>,<span class="string">hI</span>这四种情况中的任意一种。</p>
<p>不幸的是，很多单词里包含<span class="string">hi</span>这两个连续的字符，比如<span class="string">him</span>,<span class="string">history</span>,<span class="string">high</span>等等。用<span class="regex">hi</span>来查找的话，这里边的<span class="string">hi</span>也会被找出来。如果要<span class="desc">精确地查找hi这个单词</span>的话，我们应该使用<span class="regex">\bhi\b</span>。</p>
<p><span class="part">\b</span>是正则表达式规定的一个特殊代码（好吧，某些人叫它<span class="name">元字符，metacharacter</span>），代表着<span class="desc">单词的开头或结尾，也就是单词的分界处</span>。虽然通常英文的单词是由空格或标点符号或换行来分隔的，但是<span class="code">\b</span>并不匹配这些单词分隔符中的任何一个，它<strong>只匹配一个位置</strong>。（如果需要更精确的说法，<span class="code">\b</span>匹配这样的位置：它的前一个字符和后一个字符不全是(一个是,一个不是或不存在)<span class="code">\w</span>）</p>
<p>假如你要找的是<span class="desc">hi后面不远处跟着一个Lucy</span>，你应该用<span class="regex">\bhi\b.*\bLucy\b</span>。</p>
<p>这里，<span class="part">.</span>是另一个元字符，匹配<span class="desc">除了换行符以外的任意字符</span>。<span class="part"><em>&nbsp;</em></span><em>同样是元字符，不过它代表的不是字符，也不是位置，而是数量&mdash;&mdash;它指定</em><span class="desc">前边的内容可以连续重复出现任意次以使整个表达式得到匹配</span>。因此，<span class="part">.<em>&nbsp;</em></span><em>连在一起就意味着<span class="desc">任意数量的不包含换行的字符</span>。现在<span class="regex">\bhi\b.</span></em>\bLucy\b的意思就很明显了：<span class="desc">先是一个单词hi,然后是任意个任意字符(但不能是换行)，最后是Lucy这个单词</span>。</p>
<p>如果同时使用其它的一些元字符，我们就能构造出功能更强大的正则表达式。比如下面这个例子：</p>
<p><span class="regex">0\d\d-\d\d\d\d\d\d\d\d</span>匹配这样的字符串：<span class="desc">以0开头，然后是两个数字，然后是一个连字号&ldquo;-&rdquo;，最后是8个数字</span>(也就是中国的电话号码。当然，这个例子只能匹配区号为3位的情形)。</p>
<p>这里的<span class="part">\d</span>是一个新的元字符，匹配<span class="desc">任意的数字(0，或1，或2，或&hellip;&hellip;)</span>。<span class="part">-</span>不是元字符，只匹配它本身&mdash;&mdash;连字号。</p>
<p>为了避免那么多烦人的重复，我们也可以这样写这个表达式：<span class="regex">0\d{2}-\d{8}</span>。         这里<span class="part">\d</span>后面的<span class="part">{2}</span>(<span class="part">{8}</span>)的意思是前面<span class="part">\d</span><span class="desc">必须连续重复匹配2次(8次)</span>。</p>
<h2 id="testing" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">测试正则表达式</h2>
<p>如果你不觉得正则表达式很难读写的话，要么你是一个天才，要么，你不是地球人。正则表达式的语法很令人头疼，即使对经常使用它的人来说也是如此。由于难于读写，容易出错，所以很有必要创建一种工具来测试正则表达式。</p>
<p>由于在不同的环境下正则表达式的一些细节是不相同的，本教程介绍的是Microsoft .Net 2.0下正则表达式的行为，所以，我向你介绍一个.Net下的工具<a title="转到RegexTester的官方网站（英文）" href="http://www.dotnet2themax.com/blogs/fbalena/PermaLink,guid,13bce26d-7755-441e-92b3-1eb5f9e859f9.aspx">Regex             Tester</a>。首先你确保已经安装了<a title="转到下载.Net Framework 2.0的页面" href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&amp;FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5">.Net Framework 2.0</a>，然后<a title="从www.unibetter.com下载Regex Tester, 75KB" href="http://www.unibetter.com/deerchao/downloads/RegexTester.zip">下载Regex Tester</a>。这是个绿色软件，下载完后打开压缩包,直接运行RegexTester.exe就可以了。</p>
<p>下面是Regex Tester运行时的截图：</p>
<p><img src="http://www.cssrain.cn/demo/images/RegexTester.jpg" alt="Regex Tester运行时的截图" /></p>
<h2 id="metacode" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">元字符</h2>
<p>现在你已经知道几个很有用的元字符了，如<span class="code">\b</span>,<span class="code">.</span>,<span class="code">*</span>，还有<span class="code">\d</span>.当然还有更多的元字符可用，比如<span class="code">\s</span>匹配<span class="desc">任意的空白符，包括空格，制表符(Tab)，换行符，中文全角空格等</span>。<span class="code">\w</span>匹配<span class="desc">字母或数字或下划线或汉字等</span>。</p>
<p>下面来试试更多的例子：</p>
<p><span class="regex">\ba\w<em>\b</em></span><em>匹配<span class="desc">以字母<span class="part">a</span>开头的单词&mdash;&mdash;先是某个单词开始处(<span class="part">\b</span>)，然后是字母<span class="part">a</span>,然后是任意数量的字母或数字(<span class="part">\w</span></span></em>)，最后是单词结束处(<span class="part">\b</span>)（好吧，现在我们说说正则表达式里的单词是什么意思吧：就是几个连续的<span class="code">\w</span>。不错，这与学习英文时要背的成千上万个同名的东西的确关系不大）。</p>
<p><span class="regex">\d+</span>匹配<span class="desc">1个或更多连续的数字</span>。这里的<span class="part">+</span>是和<span class="code"><em>&nbsp;</em></span><em>类似的元字符，不同的是</em>匹配<span class="desc">重复任意次(可能是0次)</span>，而<span class="code">+</span>则匹配<span class="desc">重复1次或更多次</span>。</p>
<p><span class="regex">\b\w{6}\b</span> 匹配<span class="desc">刚好6个字母/数字的单词</span>。</p>
<table cellspacing="0">
<caption> 表1.常用的元字符</caption>
<tbody>
<tr>
<th> 代码</th>
<th> 说明</th>
</tr>
<tr>
<td><span class="code">.</span></td>
<td><span class="desc">匹配除换行符以外的任意字符</span></td>
</tr>
<tr>
<td><span class="code">\w</span></td>
<td><span class="desc">匹配字母或数字或下划线或汉字</span></td>
</tr>
<tr>
<td><span class="code">\s</span></td>
<td><span class="desc">匹配任意的空白符</span></td>
</tr>
<tr>
<td><span class="code">\d</span></td>
<td><span class="desc">匹配数字</span></td>
</tr>
<tr>
<td><span class="code">\b</span></td>
<td><span class="desc">匹配单词的开始或结束</span></td>
</tr>
<tr>
<td><span class="code">^</span></td>
<td><span class="desc">匹配字符串的开始</span></td>
</tr>
<tr>
<td><span class="code">$</span></td>
<td><span class="desc">匹配字符串的结束</span></td>
</tr>
</tbody>
</table>
<p>元字符<span class="code">^</span>（和数字6在同一个键位上的符号）以及<span class="code">$</span>和<span class="code">\b</span>有点类似，都匹配一个位置。<span class="code">^</span>匹配你要用来查找的字符串的开头，<span class="code">$</span>匹配结尾。这两个代码在验证输入的内容时非常有用，比如一个网站如果要求你填写的QQ号必须为5位到12位数字时，可以使用：<span class="regex">^\d{5,12}$</span>。</p>
<p>这里的<span class="part">{5,12}</span>和前面介绍过的<span class="part">{2}</span>是类似的，只不过<span class="part">{2}</span>匹配<span class="desc">只能不多不少重复2次</span>，<span class="part">{5,12}</span>则是<span class="desc">重复的次数不能少于5次，不能多于12次</span>，否则都不匹配。</p>
<p>因为使用了<span class="part">^</span>和<span class="part">$</span>，所以输入的整个字符串都要用来和<span class="part">\d{5,12}</span>来匹配，也就是说整个输入<span class="desc">必须是5到12个数字</span>，因此如果输入的QQ号能匹配这个正则表达式的话，那就符合要求了。</p>
<p>和忽略大小写的选项类似，有些正则表达式处理工具还有一个处理多行的选项。如果选中了这个选项，<span class="code">^</span>和<span class="code">$</span>的意义就变成了<span class="desc">匹配行的开始处和结束处</span>。</p>
<h2 id="escape" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">字符转义</h2>
<p>如果你想查找元字符本身的话，比如你查找<span class="desc">.</span>,或者<span class="desc"><em>&nbsp;</em></span><em>,就出现了问题：你没法指定它们，因为它们会被解释成其它的意思。这时你就必须使用<span class="code">\</span>来取消这些字符的特殊意义。因此，你应该使用<span class="regex">.</span>和</em>。当然，要查找<span class="desc">\</span>本身，你也得用<span class="regex">\</span>.</p>
<p>例如：<span class="regex">www.unibetter.com</span>匹配<span class="desc">www.unibetter.com</span>，<span class="regex">c:\Windows</span>匹配<span class="desc">c:\Windows</span>。</p>
<h2 id="repeat" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">重复</h2>
<p>你已经看过了前面的<span class="code"><em>&nbsp;</em></span><em>,<span class="code">+</span>,<span class="code">{2}</span>,<span class="code">{5,12}</span>这几个匹配重复的方式了。下面是正则表达式中所有的限定符(指定数量的代码，例如</em>,{5,12}等)：</p>
<table cellspacing="0">
<caption> 表2.常用的限定符</caption>
<tbody>
<tr>
<th> 代码/语法</th>
<th> 说明</th>
</tr>
<tr>
<td><span class="code">*</span></td>
<td><span class="desc">重复零次或更多次</span></td>
</tr>
<tr>
<td><span class="code">+</span></td>
<td><span class="desc">重复一次或更多次</span></td>
</tr>
<tr>
<td><span class="code">?</span></td>
<td><span class="desc">重复零次或一次</span></td>
</tr>
<tr>
<td><span class="code">{n}</span></td>
<td><span class="desc">重复n次</span></td>
</tr>
<tr>
<td><span class="code">{n,}</span></td>
<td><span class="desc">重复n次或更多次</span></td>
</tr>
<tr>
<td><span class="code">{n,m}</span></td>
<td><span class="desc">重复n到m次</span></td>
</tr>
</tbody>
</table>
<p>下面是一些使用重复的例子：</p>
<p><span class="regex">Windows\d+</span>匹配<span class="desc">Windows后面跟1个或更多数字</span></p>
<p><span class="regex">13\d{9}</span>匹配<span class="desc">13后面跟9个数字(中国的手机号)</span></p>
<p><span class="regex">^\w+</span>匹配<span class="desc">一行的第一个单词(或整个字符串的第一个单词，具体匹配哪个意思得看选项设置)</span></p>
<h2 id="charclass" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">字符类</h2>
<p>要想查找数字，字母或数字，空白是很简单的，因为已经有了对应这些字符集合的元字符，但是如果你想匹配没有预定义元字符的字符集合(比如元音字母a,e,i,o,u),应该怎么办？</p>
<p>很简单，你只需要在中括号里列出它们就行了，像<span class="regex">[aeiou]</span>就匹配<span class="desc">任何一个英文元音字母</span>，<span class="regex">[.?!]</span>匹配<span class="desc">标点符号(.或?或!)</span>(英文语句通常只以这三个标点结束)。</p>
<p>我们也可以轻松地指定一个字符<span class="name">范围</span>，像<span class="regex">[0-9]</span>代表的含意与<span class="regex">\d</span>就是完全一致的：<span class="desc">一位数字</span>，同理<span class="regex">[a-z0-9A-Z_]</span>也完全等同于<span class="code">\w</span>（如果只考虑英文的话）。</p>
<p>下面是一个更复杂的表达式：<span class="regex">(?0\d{2}[) -]?\d{8}</span>。</p>
<p>这个表达式可以匹配<span class="desc">几种格式的电话号码</span>，像<span class="string">(010)88886666</span>，或<span class="string">022-22334455</span>，或<span class="string">02912345678</span>等。我们对它进行一些分析吧：首先是一个转义字符<span class="part">(</span>,它能出现0次或1次(<span class="part">?</span>),然后是一个<span class="part">0</span>，后面跟着2个数字(<span class="part">\d{2}</span>)，然后是<span class="part">)</span>或<span class="part">-</span>或<span class="part">空格</span>中的一个，它出现1次或不出现(<span class="part">?</span>)，最后是8个数字(<span class="part">\d{8}</span>)。不幸的是，它也能匹配<span class="string">010)12345678</span>或<span class="string">(022-87654321</span>这样的&ldquo;不正确&rdquo;的格式。要解决这个问题，请在本教程的下面查找答案。</p>
<h2 id="negation" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">反义</h2>
<p>有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外，其它任意字符都行的情况，这时需要用到<span class="name">反义</span>：</p>
<table cellspacing="0">
<caption> 表3.常用的反义代码</caption>
<tbody>
<tr>
<th> 代码/语法</th>
<th> 说明</th>
</tr>
<tr>
<td><span class="code">\W</span></td>
<td><span class="desc">匹配任意不是字母，数字，下划线，汉字的字符</span></td>
</tr>
<tr>
<td><span class="code">\S</span></td>
<td><span class="desc">匹配任意不是空白符的字符</span></td>
</tr>
<tr>
<td><span class="code">\D</span></td>
<td><span class="desc">匹配任意非数字的字符</span></td>
</tr>
<tr>
<td><span class="code">\B</span></td>
<td><span class="desc">匹配不是单词开头或结束的位置</span></td>
</tr>
<tr>
<td><span class="code">[^x]</span></td>
<td><span class="desc">匹配除了x以外的任意字符</span></td>
</tr>
<tr>
<td><span class="code">[^aeiou]</span></td>
<td><span class="desc">匹配除了aeiou这几个字母以外的任意字符</span></td>
</tr>
</tbody>
</table>
<p>例子：<span class="regex">\S+</span>匹配<span class="desc">不包含空白符的字符串</span>。</p>
<p><span class="regex">&lt;a[^&gt;]+&gt;</span>匹配<span class="desc">用尖括号括起来的以a开头的字符串</span>。</p>
<h2 id="alternative" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">替换</h2>
<p>好了，现在终于到了解决3位或4位区号问题的时间了。正则表达式里的<span class="name">替换</span>指的是有几种规则，如果满足其中任意一种规则都应该当成匹配，具体方法是用<span class="code">|</span>把不同的规则分隔开。听不明白？没关系，看例子：</p>
<p><span class="regex">0\d{2}-\d{8}|0\d{3}-\d{7}</span>这个表达式能<span class="desc">匹配两种以连字号分隔的电话号码：一种是三位区号，8位本地号(如010-12345678)，一种是4位区号，7位本地号(0376-2233445)</span>。</p>
<p><span class="regex">(0\d{2})[- ]?\d{8}|0\d{2}[- ]?\d{8}</span>这个表达式<span class="desc">匹配3位区号的电话号码，其中区号可以用小括号括起来，也可以不用，区号与本地号间可以用连字号或空格间隔，也可以没有间隔</span>。你可以试试用替换|把这个表达式扩展成也支持4位区号的。</p>
<p><span class="regex">\d{5}-\d{4}|\d{5}</span>这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字，或者用连字号间隔的9位数字。之所以要给出这个例子是因为它能说明一个问题：<strong>使用替换时，顺序是很重要的</strong>。如果你把它改成<span class="regex">\d{5}|\d{5}-\d{4}</span>的话，那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配替换时，将会从左到右地测试每个分枝条件，如果满足了某个分枝的话，就不会去管其它的替换条件了。</p>
<p><span class="regex">Windows98|Windows2000|WindosXP</span>这个例子是为了告诉你替换不仅仅能用于两种规则，也能用于更多种规则。</p>
<h2 id="grouping" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">分组</h2>
<p>我们已经提到了怎么重复单个字符（直接在字符后面加上限定符就行了）；但如果想要重复多个字符又该怎么办？你可以用小括号来指定<span class="name">子表达式</span>(也叫做<span class="name">分组</span>)，然后你就可以指定这个子表达式的重复次数了，你也可以对子表达式进行其它一些操作(后面会有介绍)。</p>
<p><span class="regex">(\d{1,3}.){3}\d{1,3}</span>是一个<span class="desc">简单的IP地址匹配</span>表达式。要理解这个表达式，请按下列顺序分析它：<span class="part">\d{1,3}</span>匹配<span class="desc">1到3位的数字</span>，<span class="part">(\d{1,3}.){3}</span>匹配<span class="desc">三位数字加上一个英文句号(这个整体也就是这个<span class="name">分组</span>)重复3次</span>，最后再加上<span class="desc">一个一到三位的数字</span>(<span class="part">\d{1,3}</span>)。</p>
<p>不幸的是，它也将匹配<span class="string">256.300.888.999</span>这种不可能存在的IP地 址(IP地址中每个数字都不能大于255。题外话，好像反恐24小时第三季的编剧不知道这一点，汗&#8230;)。如果能使用算术比较的话，或许能简单地解决这 个问题，但是正则表达式中并不提供关于数学的任何功能，所以只能使用冗长的分组，选择，字符类来描述一个正确的IP地址：<span class="regex">((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)</span>。</p>
<p>理解这个表达式的关键是理解<span class="part">2[0-4]\d|25[0-5]|[01]?\d\d?</span>，这里我就不细说了，你自己应该能分析得出来它的意义。</p>
<h2 id="backreference" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">后向引用</h2>
<p>使用小括号指定一个子表达式后，<strong>匹配这个子表达式的文本</strong>(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下，每个分组会自动拥有一个<span class="name">组号</span>，规则是：从左向右，以分组的左括号为标志，第一个出现的分组的组号为1，第二个为2，以此类推。</p>
<p><span class="name">后向引用</span>用于重复搜索前面某个分组匹配的文本。例如，<span class="part">\1</span>代表<span class="desc">分组1匹配的文本</span>。难以理解？请看示例：</p>
<p><span class="regex">\b(\w+)\b\s+\1\b</span>可以用来匹配<span class="desc">重复的单词</span>，像<span class="string">go go</span>, <span class="string">kitty kitty</span>。首先是<span class="desc">一个单词</span>，也就是<span class="desc">单词开始处和结束处之间的多于一个的字母或数字</span>(<span class="part">\b(\w+)\b</span>)，然后是<span class="desc">1个或几个空白符</span>(<span class="part">\s+</span>)，最后是<span class="desc">前面匹配的那个单词</span>(<span class="part">\1</span>)。</p>
<p>你也可以自己指定子表达式的<span class="name">组名</span>。要指定一个子表达式的组名，请使用这样的语法：<span class="code">(?&lt;Word&gt;\w+)</span>(或者把尖括号换成<span class="code">&#8216;</span>也行：<span class="code">(?&#8217;Word&#8217;\w+)</span>),这样就把<span class="part">\w+</span>的组名指定为<span class="part">Word</span>了。要反向引用这个分组<span class="name">捕获</span>的内容，你可以使用<span class="code">\k&lt;Word&gt;</span>,所以上一个例子也可以写成这样：<span class="regex">\b(?&lt;Word&gt;\w+)\b\s+\k&lt;Word&gt;\b</span>。</p>
<p>使用小括号的时候，还有很多特定用途的语法。下面列出了最常用的一些：</p>
<table cellspacing="0">
<caption> 表4.分组语法</caption>
<tbody>
<tr>
<th colspan="2"> 捕获</th>
</tr>
<tr>
<td><span class="code">(exp)</span></td>
<td><span class="desc">匹配exp,并捕获文本到自动命名的组里</span></td>
</tr>
<tr>
<td><span class="code">(?&lt;name&gt;exp)</span></td>
<td><span class="desc">匹配exp,并捕获文本到名称为name的组里，也可以写成(?&#8217;name&#8217;exp)</span></td>
</tr>
<tr>
<td><span class="code">(?:exp)</span></td>
<td><span class="desc">匹配exp,不捕获匹配的文本，也不给此分组分配组号</span></td>
</tr>
<tr>
<th colspan="2"> 零宽断言</th>
</tr>
<tr>
<td><span class="code">(?=exp)</span></td>
<td><span class="desc">匹配exp前面的位置</span></td>
</tr>
<tr>
<td><span class="code">(?&lt;=exp)</span></td>
<td><span class="desc">匹配exp后面的位置</span></td>
</tr>
<tr>
<td><span class="code">(?!exp)</span></td>
<td><span class="desc">匹配后面跟的不是exp的位置</span></td>
</tr>
<tr>
<td><span class="code">(?&lt;!exp)</span></td>
<td><span class="desc">匹配前面不是exp的位置</span></td>
</tr>
<tr>
<th colspan="2"> 注释</th>
</tr>
<tr>
<td><span class="code">(?#comment)</span></td>
<td><span class="desc">这种类型的组不对正则表达式的处理产生任何影响，用于提供注释让人阅读</span></td>
</tr>
</tbody>
</table>
<p>我们已经讨论了前两种语法。第三个<span class="code">(?:exp)</span>不会改变正则表达式的处理方式，只是这样的组匹配的内容<span class="desc">不会像前两种那样被捕获到某个组里面</span>。</p>
<h2 id="lookaround" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">零宽断言</h2>
<p>接下来的四个用于查找在某些内容(但并不包括这些内容)之前或之后的东西，也就是说它们像<span class="code">\b</span>,<span class="code">^</span>,<span class="code">$</span>那样用于指定一个位置，这个位置应该满足一定的条件(断言)，因此它们也被称为<span class="name">零宽断言</span>。最好还是拿例子来说明吧：</p>
<p><span class="code">(?=exp)</span>也叫<span class="name">零宽度正预测先行断言</span>，它<span class="desc">断言自身出现的位置的后面能匹配表达式exp</span>。比如<span class="regex">\b\w+(?=ing\b)</span>，匹配<span class="desc">以ing结尾的单词的前面部分(除了ing以外的部分)</span>，如查找<span class="string">I&#8217;m singing while you&#8217;re dancing.</span>时，它会匹配<span class="desc">sing</span>和<span class="desc">danc</span>。</p>
<p><span class="code">(?&lt;=exp)</span>也叫<span class="name">零宽度正回顾后发断言</span>，它<span class="desc">断言自身出现的位置的前面能匹配表达式exp</span>。比如<span class="regex">(?&lt;=\bre)\w+\b</span>会匹配<span class="desc">以re开头的单词的后半部分(除了re以外的部分)</span>，例如在查找<span class="string">reading a book</span>时，它匹配<span class="desc">ading</span>。</p>
<p>假如你想要给一个很长的数字中每三位间加一个逗号(当然是从右边加起了)，你可以这样查找需要在前面和里面添加逗号的部分：<span class="regex">((?&lt;=\d)\d{3})*\b</span>，用它对<span class="string">1234567890</span>进行查找时结果是<span class="desc">234567890</span>。</p>
<p>下面这个例子同时使用了这两种断言：<span class="regex">(?&lt;=\s)\d+(?=\s)</span>匹配<span class="desc">以空白符间隔的数字(再次强调，不包括这些空白符)</span>。</p>
<h2 id="negativelookaround" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">负向零宽断言</h2>
<p>前面我们提到过怎么查找<strong>不是某个字符或不在某个字符类里</strong>的字符的方法(反义)。但是如果我们只是想要<strong>确保某个字符没有出现，但并不想去匹配它</strong>时怎么办？例如，如果我们想查找这样的单词&#8211;它里面出现了字母q,但是q后面跟的不是字母u,我们可以尝试这样：</p>
<p><span class="regex">\b\w<em>q[^u]\w</em>\b</span>匹配<span class="desc">包含<strong>后面不是字母u的字母q</strong>的单词</span>。但是如果多做测试(或者你思维足够敏锐，直接就观察出来了)，你会发现，如果q出现在单词的结尾的话，像<strong>Iraq</strong>,<strong>Benq</strong>，这个表达式就会出错。这是因为<span class="part">[^u]</span>总要匹配一个字符，所以如果q是单词的最后一个字符的话，后面的<span class="part">[^u]</span>将会匹配q后面的单词分隔符(可能是空格，或者是句号或其它的什么)，后面的<span class="part">\w<em>\b</em></span><em>将会匹配下一个单词，于是<span class="regex">\b\w</span></em>q[^u]\w<em>\b就能匹配整个<span class="string">Iraq fighting</span>。<span class="name">负向零宽断言</span>能解决这样的问题，因为它只匹配一个位置，并不<strong>消费</strong>任何字符。现在，我们可以这样来解决这个问题：<span class="regex">\b\w</span></em>q(?!u)\w*\b。</p>
<p><span class="name">零宽度负预测先行断言</span><span class="code">(?!exp)</span>，<span class="desc">断言此位置的后面不能匹配表达式exp</span>。例如：<span class="regex">\d{3}(?!\d)</span>匹配<span class="desc">三位数字，而且这三位数字的后面不能是数字</span>；<span class="regex">\b((?!abc)\w)+\b</span>匹配<span class="desc">不包含连续字符串abc的单词</span>。</p>
<p>同理，我们可以用<span class="code">(?&lt;!exp)</span>,<span class="name">零宽度正回顾后发断言</span>来<span class="desc">断言此位置的前面不能匹配表达式exp</span>：<span class="regex">(?&lt;![a-z])\d{7}</span>匹配<span class="desc">前面不是小写字母的七位数字</span>。</p>
<p>一个更复杂的例子：<span class="regex">(?&lt;=&lt;(\w+)&gt;).<em>(?=&lt;\/\1&gt;)</em></span><em>匹配<span class="desc">不包含属性的简单HTML标签内里的内容</span>。<span class="code">(&lt;?(\w+)&gt;)</span>指定了这样的<span class="name">前缀</span>：<span class="desc">被尖括号括起来的单词</span>(比如可能是&lt;b&gt;)，然后是<span class="part">.</span></em>(任意的字符串),最后是一个<span class="name">后缀</span><span class="part">(?=&lt;\/\1&gt;)</span>。注意后缀里的<span class="part">\/</span>，它用到了前面提过的字符转义；<span class="part">\1</span>则是一个反向引用，引用的正是<span class="desc">捕获的第一组</span>，前面的<span class="part">(\w+)</span>匹配的内容，这样如果前缀实际上是&lt;b&gt;的话，后缀就是&lt;/b&gt;了。整个表达式匹配的是&lt;b&gt;和&lt;/b&gt;之间的内容(再次提醒，不包括前缀和后缀本身)。</p>
<h2 id="commenting" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">注释</h2>
<p>小括号的另一种用途是通过语法<span class="code">(?#comment)</span>来包含注释。例如：<span class="regex">2[0-4]\d(?#200-249)|25<a href="http://scribefire-next/#250-255">0-5</a>|[01]?\d\d?(?#0-199)</span>。</p>
<p>要包含注释的话，最好是启用&ldquo;忽略模式里的空白符&rdquo;选项，这样在编写表达式时能任意的添加空格，Tab，换行，而实际使用时这些都将被忽略。启用这个选项后，在#后面到这一行结束的所有文本都将被当成注释忽略掉。</p>
<p>例如，我们可以前面的一个表达式写成这样：</p>
<pre class="regex">      (?&lt;=    # 断言要匹配的文本的前缀
      &lt;(\w+)&gt; # 查找尖括号括起来的字母或数字(即HTML/XML标签)
      )       # 前缀结束
      .*      # 匹配任意文本
      (?=     # 断言要匹配的文本的后缀
      &lt;\/\1&gt;  # 查找尖括号括起来的内容：前面是一个"/"，后面是先前捕获的标签
      )       # 后缀结束
</pre>
<h2 id="greedyandlazy" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">贪婪与懒惰</h2>
<p>当正则表达式中包含能接受重复的限定符时，通常的行为是（在使整个表达式能得到匹配的前提下）匹配<strong>尽可能多</strong>的字符。考虑这个表达式：<span class="regex">a.*b</span>，它将会匹配<span class="desc">最长的以a开始，以b结束的字符串</span>。如果用它来搜索<span class="string">aabab</span>的话，它会匹配整个字符串<span class="desc">aabab</span>。这被称为<span class="name">贪婪</span>匹配。</p>
<p>有时，我们更需要<span class="name">懒惰</span>匹配，也就是匹配<strong>尽可能少</strong>的字符。前面给出的限定符都可以被转化为懒惰匹配模式，只要在它后面加上一个问号<span class="code">?</span>。这样<span class="regex">.*?</span>就意味着<span class="desc">匹配任意数量的重复，但是在能使整个匹配成功的前提下使用最少的重复</span>。现在看看懒惰版的例子吧：</p>
<p><span class="regex">a.*?b</span>匹配<span class="desc">最短的，以a开始，以b结束的字符串</span>。如果把它应用于<span class="string">aabab</span>的话，它会匹配<span class="desc">aab</span>和<span class="desc">ab</span>（为什么第一个匹配是aab而不是ab？简单地说，因为正则表达式有另一条规则，比懒惰／贪婪规则的优先级更高：最先开始的匹配拥有最高的优先权&mdash;&mdash;The Match That Begins Earliest Wins）。</p>
<table cellspacing="0">
<caption> 表5.懒惰限定符</caption>
<tbody>
<tr>
<td><span class="code">*?</span></td>
<td><span class="desc">重复任意次，但尽可能少重复</span></td>
</tr>
<tr>
<td><span class="code">+?</span></td>
<td><span class="desc">重复1次或更多次，但尽可能少重复</span></td>
</tr>
<tr>
<td><span class="code">??</span></td>
<td><span class="desc">重复0次或1次，但尽可能少重复</span></td>
</tr>
<tr>
<td><span class="code">{n,m}?</span></td>
<td><span class="desc">重复n到m次，但尽可能少重复</span></td>
</tr>
<tr>
<td><span class="code">{n,}?</span></td>
<td><span class="desc">重复n次以上，但尽可能少重复</span></td>
</tr>
</tbody>
</table>
<h2 id="regexoptions" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">处理选项</h2>
<p>上面介绍了几个选项如忽略大小写，处理多行等，这些选项能用来改变处理正则表达式的方式。下面是.Net中常用的正则表达式选项：</p>
<table cellspacing="0">
<caption>表6.常用的处理选项</caption>
<thead>
<tr>
<th>名称</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>IgnoreCase(忽略大小写)</td>
<td>匹配时不区分大小写。</td>
</tr>
<tr>
<td>Multiline(多行模式)</td>
<td>更改<span class="code">^</span>和<span class="code">$</span>的含义，使它们分别在任意一行的行首和行尾匹配，而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,<span class="code">$</span>的精确含意是:匹配\n之前的位置以及字符串结束前的位置.)</td>
</tr>
<tr>
<td>Singleline(单行模式)</td>
<td>更改<span class="code">.</span>的含义，使它与每一个字符匹配（包括换行符\n）。</td>
</tr>
<tr>
<td>IgnorePatternWhitespace(忽略空白)</td>
<td>忽略表达式中的非转义空白并启用由<span class="code">#</span>标记的注释。</td>
</tr>
<tr>
<td>RightToLeft(从右向左查找)</td>
<td>匹配从右向左而不是从左向右进行。</td>
</tr>
<tr>
<td>ExplicitCapture(显式捕获)</td>
<td>仅捕获已被显式命名的组。</td>
</tr>
<tr>
<td>ECMAScript(JavaScript兼容模式)</td>
<td>使表达式的行为与它在JavaScript里的行为一致。</td>
</tr>
</tbody>
</table>
<p>一个经常被问到的问题是：是不是只能同时使用多行模式和单行模式中的一种？答案是：不是。这两个选项之间没有任何关系，除了它们的名字比较相似（以至于让人感到疑惑）以外。</p>
<h2 id="balancedgroup" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">平衡组/递归匹配</h2>
<p class="important">注意：这里介绍的平衡组语法是由.Net Framework支持的；其它语言／库不一定支持这种功能，或者支持此功能但需要使用不同的语法。</p>
<p>有时我们需要匹配像<span class="desc">( 100 * ( 50 + 15 ) )这样的可嵌套的层次性结构</span>，这时简单地使用<span class="code">(.+)</span>则只会匹配到最左边的左括号和最右边的右括号之间的内容(这里我们讨论的是贪婪模式，懒惰模式也有下面的问题)。假如原来的字符串里的左括号和右括号出现的次数不相等，比如<span class="string">( 5 / ( 3 + 2 ) ) )</span>，那我们的匹配结果里两者的个数也不会相等。有没有办法在这样的字符串里匹配到最长的，配对的括号之间的内容呢？</p>
<p>为了避免<span class="code">(</span>和<span class="code">(</span>把你的大脑彻底搞糊涂，我们还是用尖括号代替圆括号吧。现在我们的问题变成了如何把<span class="string">xx &lt;aa &lt;bbb&gt; &lt;bbb&gt; aa&gt; yy</span>这样的字符串里，最长的配对的尖括号内的内容捕获出来？</p>
<p>这里需要用到以下的语法构造：</p>
<ul>
<li><span class="code">(?&#8217;group&#8217;)</span> 把捕获的内容命名为group,并压入堆栈</li>
<li><span class="code">(?&#8217;-group&#8217;)</span> 从堆栈上弹出最后压入堆栈的名为group的捕获内容，如果堆栈本来为空，则本分组的匹配失败</li>
<li><span class="code">(?(group)yes|no)</span> 如果堆栈上存在以名为group的捕获内容的话，继续匹配yes部分的表达式，否则继续匹配no部分</li>
<li><span class="code">(?!)</span> 零宽负向先行断言，由于没有后缀表达式，试图匹配总是失败</li>
</ul>
<p>如果你不是一个程序员（或者你是一个对堆栈的概念不熟的程序员），你就这样理解上面的三种语法吧：第一个就是在黑板上写一个 “group”，第二个就是从黑板上擦掉一个”group”，第三个就是看黑板上写的还有没有”group”，如果有就继续匹配yes部分，否则就匹配 no部分。</p>
<p>我们需要做的是每碰到了左括号，就在黑板上写一个”group”，每碰到一个右括号，就擦掉一个，到了最后就看看黑板上还有没有－－如果有那就证明左括号比右括号多，那匹配就应该失败。</p>
<pre class="regex">&lt;                         #最外层的左括号
    [^&lt;&gt;]*                #最外层的左括号后面的不是括号的内容
    (
        (
            (?'Open'&lt;)    #碰到了左括号，在黑板上写一个"Open"
            [^&lt;&gt;]*       #匹配左括号后面的不是括号的内容
        )+
        (
            (?'-Open'&gt;)   #碰到了右括号，擦掉一个"Open"
            [^&lt;&gt;]*        #匹配右括号后面不是括号的内容
        )+
    )*
    (?(Open)(?!))         #在遇到最外层的右括号前面，判断黑板上还有没有没擦掉的"Open"；如果还有，则匹配失败
&gt;                         #最外层的右括号
</pre>
<p>平衡组的一个最常见的应用就是匹配HTML,下面这个例子可以匹配<span class="desc">嵌套的&lt;div&gt;标签</span>：<span class="regex">&lt;div[^&gt;]<em>&gt;[^&lt;&gt;]</em>(((?&#8217;Open&#8217;&lt;div[^&gt;]<em>&gt;)[^&lt;&gt;]</em>)+((?&#8217;-Open&#8217;&lt;/div&gt;)[^&lt;&gt;]<em>)+)</em>(?(Open)(?!))&lt;/div&gt;</span>.</p>
<h2 id="more" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">还有些什么东西没提到</h2>
<p>我已经描述了构造正则表达式的大量元素，还有一些我没有提到的东西。下面是未提到的元素的列表，包含语法和简单的说明。你可以在网上找到更详细的参考资料来学习它们&#8211;当你需要用到它们的时候。如果你安装了MSDN         Library,你也可以在里面找到关于.net下正则表达式详细的文档。</p>
<table cellspacing="0">
<caption> 表7.尚未详细讨论的语法</caption>
<tbody>
<tr>
<td><span class="code">\a</span></td>
<td><span class="desc">报警字符(打印它的效果是电脑嘀一声)</span></td>
</tr>
<tr>
<td><span class="code">\b</span></td>
<td><span class="desc">通常是单词分界位置，但如果在字符类里使用代表退格</span></td>
</tr>
<tr>
<td><span class="code">\t</span></td>
<td><span class="desc">制表符，Tab</span></td>
</tr>
<tr>
<td><span class="code">\r</span></td>
<td><span class="desc">回车</span></td>
</tr>
<tr>
<td><span class="code">\v</span></td>
<td><span class="desc">竖向制表符</span></td>
</tr>
<tr>
<td><span class="code">\f</span></td>
<td><span class="desc">换页符</span></td>
</tr>
<tr>
<td><span class="code">\n</span></td>
<td><span class="desc">换行符</span></td>
</tr>
<tr>
<td><span class="code">\e</span></td>
<td><span class="desc">Escape</span></td>
</tr>
<tr>
<td><span class="code">\0nn</span></td>
<td><span class="desc">ASCII代码中八进制代码为nn的字符</span></td>
</tr>
<tr>
<td><span class="code">\xnn</span></td>
<td><span class="desc">ASCII代码中十六进制代码为nn的字符</span></td>
</tr>
<tr>
<td><span class="code">\unnnn</span></td>
<td><span class="desc">Unicode代码中十六进制代码为nnnn的字符</span></td>
</tr>
<tr>
<td><span class="code">\cN</span></td>
<td><span class="desc">ASCII控制字符。比如\cC代表Ctrl+C</span></td>
</tr>
<tr>
<td><span class="code">\A</span></td>
<td><span class="desc">字符串开头(类似^，但不受处理多行选项的影响)</span></td>
</tr>
<tr>
<td><span class="code">\Z</span></td>
<td><span class="desc">字符串结尾或行尾(不受处理多行选项的影响)</span></td>
</tr>
<tr>
<td><span class="code">\z</span></td>
<td><span class="desc">字符串结尾(类似$，但不受处理多行选项的影响)</span></td>
</tr>
<tr>
<td><span class="code">\G</span></td>
<td><span class="desc">当前搜索的开头</span></td>
</tr>
<tr>
<td><span class="code">\p{name}</span></td>
<td><span class="desc">Unicode中命名为name的字符类，例如\p{IsGreek}</span></td>
</tr>
<tr>
<td><span class="code">(?&gt;exp)</span></td>
<td><span class="desc">贪婪子表达式</span></td>
</tr>
<tr>
<td><span class="code">(?&lt;x&gt;-&lt;y&gt;exp)</span></td>
<td><span class="desc">平衡组</span></td>
</tr>
<tr>
<td><span class="code">(?im-nsx:exp)</span></td>
<td><span class="desc">在子表达式exp中改变处理选项</span></td>
</tr>
<tr>
<td><span class="code">(?im-nsx)</span></td>
<td><span class="desc">为表达式后面的部分改变处理选项</span></td>
</tr>
<tr>
<td><span class="code">(?(exp)yes|no)</span></td>
<td><span class="desc">把exp当作零宽正向先行断言，如果在这个位置能匹配，使用yes作为此组的表达式；否则使用no</span></td>
</tr>
<tr>
<td><span class="code">(?(exp)yes)</span></td>
<td><span class="desc">同上，只是使用空表达式作为no</span></td>
</tr>
<tr>
<td><span class="code">(?(name)yes|no)</span></td>
<td><span class="desc">如果命名为name的组捕获到了内容，使用yes作为表达式；否则使用no</span></td>
</tr>
<tr>
<td><span class="code">(?(name)yes)</span></td>
<td><span class="desc">同上，只是使用空表达式作为no</span></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h2 id="reference" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">一些我认为你可能已经知道的术语的参考</h2>
<dl>
<dt>字符</dt>
<dd>程序处理文字时最基本的单位，可能是字母，数字，标点符号，空格，换行符，汉字等等。</dd>
<dt>字符串</dt>
<dd>0个或更多个字符的序列。</dd>
<dt>文本</dt>
<dd>文字，字符串。</dd>
<dt>匹配</dt>
<dd>符合规则，检验是否符合规则，符合规则的部分。</dd>
<dt>断言</dt>
<dd>声明一个应该为真的事实。只有当断言为真时才会对正则表达式继续进行匹配。</dd>
</dl>
<h2 id="resources" style="background: #EEEEEE; border-left: 3px solid #AAAAAA; padding: 3px;">网上的资源及本文参考文献</h2>
<ul>
<li><a href="http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/jscript7/html/jsreconintroductiontoregularexpressions.asp"> 微软的正则表达式教程</a></li>
<li><a href="http://msdn2.microsoft.com/zh-cn/library/system.text.regularexpressions.regex.aspx">System.Text.RegularExpressions.Regex类(MSDN)</a></li>
<li><a href="http://www.regular-expressions.info/">专业的正则表达式教学网站(英文)</a></li>
<li><a href="http://weblogs.asp.net/whaggard/archive/2005/02/20/377025.aspx">关于.Net下的平衡组的详细讨论（英文）</a></li>
<li><a href="http://www.oreilly.com/catalog/regex2/">Mastering Regular Expressions (Second Edition)</a></li>
</ul>
<p>原文：<a href="http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html" target="_blank">http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html</a></p>
<p>英文原文：<a href="http://www.codeproject.com/Articles/9099/The-30-Minute-Regex-Tutorial" target="_blank">http://www.codeproject.com/Articles/9099/The-30-Minute-Regex-Tutorial</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hellolinux.org/2012/02/regex-course.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux下使用Evolution收发邮件</title>
		<link>http://www.hellolinux.org/2012/02/use-evolution-to-send-and-receive-email.html</link>
		<comments>http://www.hellolinux.org/2012/02/use-evolution-to-send-and-receive-email.html#comments</comments>
		<pubDate>Thu, 09 Feb 2012 13:09:03 +0000</pubDate>
		<dc:creator>Hello,Linux</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[evolution]]></category>

		<guid isPermaLink="false">http://www.hellolinux.org/?p=118</guid>
		<description><![CDATA[Evolution是什么? Evolution 不仅仅是一个电子邮件程序。它提供了所有标准的电子邮件客户功能，包括功能强大的邮箱管理、用户定义的过滤器、以及快速搜索。除此之外，它还具备灵活的日 历（调度器）功能，该功能允许用户在线地创建和确认组群会议和特别事件。Evolution 是用于 Linux 和 基于 UNIX 的系统的功能完善的个人和工作组信息管理工具，它还是 Gnome桌面 的默认电子邮件客户。 你可以阅读和发送HTML e-mail，并且可以管理你的个人联系簿。使用日历功能，可以很简单的采取指向、点击操作，加入新的约会或其他事情，使你不会忘记。这个程序许诺所有的功能在你的桌面上都可用。 　　这组办公软件完全是模仿Outlook 的，并且有相似的功能。你可以阅读和发送HTML e-mail，并且可以管理你的个人联系簿。使用日历功能，可以很简单的采取指向、点击操作，加入新的约会或其他事情，使你不会忘记。这个程序许诺所有的功能在你的桌面上都可用。 配置Evolution: 第一步: 首先，我们打开Evolution，就会有一个设置对话框出来，要我们进行Evolution的初始配置。 在名称一栏中填入你想要的名称，例如：HelloLinux 在电子邮件地址一栏中填入你的邮箱地址，例如：xxx@gmail.com (要确保邮箱启用了POP，具体可以百度) 可选性息中勾选：使它成为我的默认账户 第二步：打开接收电子邮件卡 服务器类型：pop 服务器：pop.gmail.com 用户名：xxx 使用安全连接：SSL加密 认证类型：密码 最后要勾选&#8220;记住密码&#8221;，如果不勾，以后每次都要输入密码，根据你自己的情况选择；如果是公用机，千万不要勾了，否则别人在这上面也可以收你的邮件 第三步：打开接收选项卡 你根据自己的情况设置。 如果你想让Evelution自动接收邮件，就勾选&#8220;自动检查新邮件的间隔&#8220;：比如5分钟等等 第四步：打开发送电子邮件卡 服务器类型：SMTP 服务器：smtp.gmail.com 勾选服务器需要认证 使用安全连接：SSL加密 身份验证：类型：PLAIN &#8230; <a href="http://www.hellolinux.org/2012/02/use-evolution-to-send-and-receive-email.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: x-large; font-family: times new roman,times; color: #339966;">Evolution是什么?</span></p>
<p>Evolution  不仅仅是一个电子邮件程序。它提供了所有标准的电子邮件客户功能，包括功能强大的邮箱管理、用户定义的过滤器、以及快速搜索。除此之外，它还具备灵活的日 历（调度器）功能，该功能允许用户在线地创建和确认组群会议和特别事件。Evolution 是用于 Linux 和 基于 UNIX  的系统的功能完善的个人和工作组信息管理工具，它还是 Gnome桌面 的默认电子邮件客户。</p>
<p>你可以阅读和发送HTML e-mail，并且可以管理你的个人联系簿。使用日历功能，可以很简单的采取指向、点击操作，加入新的约会或其他事情，使你不会忘记。这个程序许诺所有的功能在你的桌面上都可用。 　　这组办公软件完全是模仿Outlook 的，并且有相似的功能。你可以阅读和发送HTML e-mail，并且可以管理你的个人联系簿。使用日历功能，可以很简单的采取指向、点击操作，加入新的约会或其他事情，使你不会忘记。这个程序许诺所有的功能在你的桌面上都可用。<span id="more-118"></span></p>
<p><span style="font-size: x-large; font-family: times new roman,times; color: #339966;">配置Evolution:</span></p>
<p>第一步:<br />
 首先，我们打开Evolution，就会有一个设置对话框出来，要我们进行Evolution的初始配置。<br />
 在名称一栏中填入你想要的名称，例如：HelloLinux<br />
 在电子邮件地址一栏中填入你的邮箱地址，例如：xxx@gmail.com (要确保邮箱启用了POP，具体可以百度)<br />
 可选性息中勾选：使它成为我的默认账户</p>
<p>第二步：打开接收电子邮件卡<br />
 <span class="t_tag">服务器</span>类型：pop<br />
 服务器：pop.gmail.com<br />
 用户名：xxx<br />
 使用安全连接：SSL加密<br />
 <span class="t_tag">认证</span>类型：密码<br />
 最后要勾选&ldquo;记住密码&rdquo;，如果不勾，以后每次都要输入密码，根据你自己的情况选择；如果是公用机，千万不要勾了，否则别人在这上面也可以收你的邮件</p>
<p>第三步：打开接收选项卡<br />
 你根据自己的情况设置。<br />
 如果你想让Evelution自动接收邮件，就勾选&ldquo;自动检查新邮件的间隔&ldquo;：比如5分钟等等</p>
<p>第四步：打开发送电子邮件卡<br />
 服务器类型：SMTP<br />
 服务器：smtp.gmail.com<br />
 勾选服务器需要认证<br />
 使用安全连接：SSL加密<br />
 身份验证：类型：PLAIN<br />
 用户名：xxx<br />
 勾选&ldquo;记住密码&rdquo;，还是根据自己的需要设置。</p>
<p>第五步：<br />
 默认、安全等可以不填。<br />
 完毕。</p>
<p>其他邮箱具体的POP，SMTP协议等，可以自行查一查。</p>
<p>扩展资料：<br />
 维基百科的介绍：<a href="http://en.wikipedia.org/wiki/Novell_Evolution" target="_blank">http://en.wikipedia.org/wiki/Novell_Evolution</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hellolinux.org/2012/02/use-evolution-to-send-and-receive-email.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emacs和Vim：神的编辑器和编辑器之神</title>
		<link>http://www.hellolinux.org/2012/02/emacs-and-vim.html</link>
		<comments>http://www.hellolinux.org/2012/02/emacs-and-vim.html#comments</comments>
		<pubDate>Thu, 09 Feb 2012 11:57:48 +0000</pubDate>
		<dc:creator>Hello,Linux</dc:creator>
				<category><![CDATA[Emacs]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.hellolinux.org/?p=116</guid>
		<description><![CDATA[0. 序章：神器的传说 在这个蔚蓝色的星球上，流传着两大神器的传说：据说Emacs是神的编辑器，而Vim是编辑器之神。 追求独步天下的高手和低手们争着一睹它们的风采，可看到它们朴素单薄的界面后，不禁心下怀疑：这就是神器吗?甚至有人生了轻视之心。 肤浅的人嗤之以鼻，说：什么年代了，还抱着这么老土的玩意不放，真他妈Geek!同学，请冷静下来，听我说：它们的确够老了，都几十年的寿命了，但你想想为什么，为什么这么古老的编辑器，却有越来越多的人皈依它们。 Windows下用UltraEdit和Editplus的人质问：它们到底比UltraEdit和Editplus好在哪里?我说：不可同日而语。 连UltraEdit和EditPlus都没用过的同学问：它们就相当于Linux上的 Notepad吧?我说：请你从我的眼前消失。 一些人勇敢地拾起了Vim或Emacs，却发现学习曲线陡峭而漫长，于是在没发现它们的强大之前就放弃了，说：太难用了，把键盘当鼠标用的烂玩意，有什么好的? 还是有一些人留下来了，坚定地守护着这两大神器。一些说葡萄太酸的人想离开又不甘心，总是问：它们到底神在哪里啊?我不禁想起了李宗盛的几句歌词：: 有人问我你究竟是哪里好， 这么多年我还忘不掉? 春风再美也比不上你的笑， 没见过你的人不会明了。 也许你不会明了，我还是要努力讲一讲。 &#160; 主流编辑器学习曲线图 1. 无敌的可扩展性 1.1 可扩展性给了软件强大的生命 曾几何时，Windows用户对软件的可扩展性没有概念，他们只能对他们使用的软件进行非常有限的定制。扩展软件的权利保留在软件开发者手中。软件 的使用者如果想要新的功能和特性，只能等待软件的升级。有能力的用户等不及了，为了添加自己想要的功能，从0开始写了一款新的软件。就这样，新的功能意味 着新的软件，Windows下的软件前赴后继，迅速地更新换代着。因此， Windows下的软件都很短命。 Linux和开源软件渐渐流行起来，人们才发现：可扩展性才能给软件强大的生命。在MS的VS横行的今天，Eclipse为什么被评为最好的 IDE?就是因为它在IDE中最具可扩展性。在IE几乎一统天下的时候，为什么Firefox能夺走越来越多的用户，也是因为它的可扩展性。提供了良好的 扩展接口，用户自然会写出各种各样的插件，来满足用户自己形形色色的要求。这样，软件在用户的推动下自然变得强大了。 Emacs和Vim没有被时代淘汰，反而越发强大，也正是因为在数不清的编辑器中，他们具有无可匹敌的可扩展性。 1.2 Emacs是伪装成编辑器的操作系统 有句夸张的话说：Emacs是伪装成编辑器的操作系统。细细想来，这句话并不夸张。 Emacs其实是个Lisp的解释器，因此可以用Lisp灵活地扩展。 Lisp是什么东西，这同样是种很有生命力的编程语言。在C语言还没有发明的年代，MIT的人工智能实验室写ITS操作系统时，一部分用的是汇编语言，还 有一部分就是用的Lisp。现在，Lisp仍在人工智能研究领域广泛使用着。 有这么牛逼的扩展语言，注定Emacs向着无所不能的方向发展。渐渐地，人们用Emacs不再限于写程序，写文档，而且在Emacs里管理文件系统，运行终端，收邮件，上网，听音乐&#8230;&#8230;，真是一发不可收拾。甚至，有人用Emacs控制咖啡机煮咖啡。 这种大而全的扩展，背离了&#8220;一个程序只做一件事并做好它&#8221;的 Unix哲学，被Unix的忠诚用户所诟病。可是真的背离了吗? Emacs说过自己是一个编辑器吗? 正是因为Emacs的无敌的可扩展性，人们才分不清Emacs到底是不是一个编辑器了。但，就是有人喜欢这种All-in-One的哲学，喜欢在Emacs中完成每件事。所以才会有人写《生活在Emacs中》，所以， &#8230; <a href="http://www.hellolinux.org/2012/02/emacs-and-vim.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>0. 序章：神器的传说</strong></p>
<p>在这个蔚蓝色的星球上，流传着两大神器的传说：据说<strong>Emacs</strong>是神的编辑器，而<strong>Vim</strong>是编辑器之神。</p>
<p>追求独步天下的高手和低手们争着一睹它们的风采，可看到它们朴素单薄的界面后，不禁心下怀疑：这就是神器吗?甚至有人生了轻视之心。</p>
<p>肤浅的人嗤之以鼻，说：什么年代了，还抱着这么老土的玩意不放，真他妈Geek!同学，请冷静下来，听我说：它们的确够老了，都几十年的寿命了，但你想想为什么，为什么这么古老的编辑器，却有越来越多的人皈依它们。<span id="more-116"></span></p>
<p>Windows下用UltraEdit和Editplus的人质问：它们到底比UltraEdit和Editplus好在哪里?我说：不可同日而语。</p>
<p>连UltraEdit和EditPlus都没用过的同学问：它们就相当于Linux上的 Notepad吧?我说：请你从我的眼前消失。</p>
<p>一些人勇敢地拾起了Vim或Emacs，却发现学习曲线陡峭而漫长，于是在没发现它们的强大之前就放弃了，说：太难用了，把键盘当鼠标用的烂玩意，有什么好的?</p>
<p>还是有一些人留下来了，坚定地守护着这两大神器。一些说葡萄太酸的人想离开又不甘心，总是问：它们到底神在哪里啊?我不禁想起了李宗盛的几句歌词：:</p>
<p>有人问我你究竟是哪里好，</p>
<p>这么多年我还忘不掉?</p>
<p>春风再美也比不上你的笑，</p>
<p>没见过你的人不会明了。</p>
<p>也许你不会明了，我还是要努力讲一讲。</p>
<p style="text-align: center;"><a href="http://images.51cto.com/files/uploadimg/20110111/094959173.jpg" target="_blank"><img class="fit-image" src="http://images.51cto.com/files/uploadimg/20110111/094959173.jpg" border="0" alt="主流编辑器学习曲线图" width="498" height="400" /></a>&nbsp;</p>
<p class="wp-caption-text" style="text-align: center;">主流编辑器学习曲线图</p>
<p><strong>1. 无敌的可扩展性</strong></p>
<p><strong>1.1 可扩展性给了软件强大的生命</strong></p>
<p>曾几何时，Windows用户对软件的可扩展性没有概念，他们只能对他们使用的软件进行非常有限的定制。扩展软件的权利保留在软件开发者手中。软件 的使用者如果想要新的功能和特性，只能等待软件的升级。有能力的用户等不及了，为了添加自己想要的功能，从0开始写了一款新的软件。就这样，新的功能意味 着新的软件，Windows下的软件前赴后继，迅速地更新换代着。因此， Windows下的软件都很短命。</p>
<p>Linux和开源软件渐渐流行起来，人们才发现：可扩展性才能给软件强大的生命。在MS的VS横行的今天，Eclipse为什么被评为最好的 IDE?就是因为它在IDE中最具可扩展性。在IE几乎一统天下的时候，为什么Firefox能夺走越来越多的用户，也是因为它的可扩展性。提供了良好的 扩展接口，用户自然会写出各种各样的插件，来满足用户自己形形色色的要求。这样，软件在用户的推动下自然变得强大了。</p>
<p>Emacs和Vim没有被时代淘汰，反而越发强大，也正是因为在数不清的编辑器中，他们具有无可匹敌的可扩展性。</p>
<p><strong>1.2 Emacs是伪装成编辑器的操作系统</strong></p>
<p>有句夸张的话说：Emacs是伪装成编辑器的操作系统。细细想来，这句话并不夸张。</p>
<p>Emacs其实是个Lisp的解释器，因此可以用Lisp灵活地扩展。  Lisp是什么东西，这同样是种很有生命力的编程语言。在C语言还没有发明的年代，MIT的人工智能实验室写ITS操作系统时，一部分用的是汇编语言，还 有一部分就是用的Lisp。现在，Lisp仍在人工智能研究领域广泛使用着。</p>
<p>有这么牛逼的扩展语言，注定Emacs向着无所不能的方向发展。渐渐地，人们用Emacs不再限于写程序，写文档，而且在Emacs里管理文件系统，运行终端，收邮件，上网，听音乐&hellip;&hellip;，真是一发不可收拾。甚至，有人用Emacs控制咖啡机煮咖啡。</p>
<p>这种大而全的扩展，背离了&ldquo;一个程序只做一件事并做好它&rdquo;的 Unix哲学，被Unix的忠诚用户所诟病。可是真的背离了吗? Emacs说过自己是一个编辑器吗?</p>
<p>正是因为Emacs的无敌的可扩展性，人们才分不清Emacs到底是不是一个编辑器了。但，就是有人喜欢这种All-in-One的哲学，喜欢在Emacs中完成每件事。所以才会有人写《生活在Emacs中》，所以， Emacs才会成为一种信仰。</p>
<p><strong>1.3 Vim不只是Vi</strong></p>
<p>Vim是Vi最受欢迎的变种之一，除了继承了Vi迅捷的编辑方式， Vim的功能已经比原始的Vi强大得多。这也得益于它可以用Vim脚本无限地扩展。 Vim.org 上已经有数千个脚本了，给Vim增加各种各样的特性和功能。</p>
<p>为了证明Vim的可扩展性不输于Emacs，也有用户写了在Vim中玩游戏、运行Shell、和集成GDB在Vim内部调试的插件。客观地讲，Vim的脚本语言与Emacs的ELisp相比，略显逊色，但这丝毫不妨碍它把Vim扩展成非常优秀的编辑器。</p>
<p>说到底，Vim的前身Vi和Emacs的设计采用了不同的哲学，  Vi更符合Unix传统，它通过管道机制和系统内各种积木工具打交道，它讲究的是和系统内的工具程序协作来完成用户的任务。和Emacs相比，它的定位很 明确，就是要做一个强大的编辑器。因此Vim的绝大部分扩展，都是为了更好地完成编辑文本的任务。</p>
<p>海纳百川，有容乃大。Emacs和Vim通过别的编辑器无法比肩的可扩展性，不断吸收广大用户的智慧，是它们能成为&ldquo;神器&rdquo;的原因之一。</p>
<p><strong>2. 特立独行的魅力</strong></p>
<p><strong>2.1 可扩展性让你倾注了灵魂</strong></p>
<p>一旦你意识到Vim或Emacs的强大，你就踏上了不停发掘它们潜力的漫漫长路。你不停地改进自己的配置文件，你不停地搜索更好的插件，甚至有一天 你开始动手写自己的插件。就像剑客保养自己的剑一样，你也甘心花时间提升你的Vim或Emacs。经年累月，不知不觉，你已经在那把剑上倾注了你的灵魂。</p>
<p><strong>2.2 独特的操作方式让你中了毒</strong></p>
<p>Emacs和Vim有着迥异的操作方式，却成了Unix/Linux世界中两种代表性的操作方式，有些软件的操作方式类似Vi，而有些软件的方式类 似Emacs，甚至有些软件提供了Vi的键绑定和Emacs的键绑定让你选择。而无论哪种操作方式，对Windows用户来说都是古怪的。虽说古怪，多少 代人也验证了这两种操作方式的高效。</p>
<p>Emacs号称Ctrl到死的编辑器。其实它几乎用了所有的辅助键，听说过没有，Emacs = Esc + Meta + Alt + Ctrl  + Shift。所以高德纳大师说操作Emacs，就像弹奏管风琴。  Emacs使用非常多的组合按键，这大概也是它高效于其它无模式编辑器的原因之一。你也可以定义自己的组合键序列，调用自己写的lisp函数，完成自己想 要的功能。</p>
<p>Vi一向是以快速的文本编辑闻名于世的。它的按键更简洁，通常是单个字符按键，就实现某种操作。但这是以有模式为代价的。你要不停地按Esc在从它 的插入模式返回Normal模式。客观得讲，在文本编辑方面，  Vim比Emacs高效，因为它提供了一些Emacs没有对应功能的操作来辅助高效的文本编辑。但它的模式切换也让一些人受不了，于是那些人选择了  Emacs。</p>
<p>不管你选择了Vim还是Emacs，你都要为习惯它们独特的操作方式而努力，这是一个技艺积累的过程。当你习惯了Vim或Emacs，你会有欲罢不能的感觉，你希望用它们完成尽可能多的任务，因为你再用别的编辑器也已经不习惯。</p>
<p>用Vim或Emacs就像吸食毒品，慢慢地就会上瘾。它们会带给你渐渐强烈的快感，但你也向它们献出了自己的灵魂。这时，你只能称它们为神器。</p>
<p><strong>3. 黑客的编辑器</strong></p>
<p>Vim的前身Vi的作者Bill Joy和Emacs的作者Richard Stallman  都是那个时代著名的黑客，所以这两款编辑器一开始面向的主要用户就是写程序的人，现在仍然是。它们对编程加入了越来越多的支持，如语法高亮、智能缩进、关 键字补全甚至集成调试。也有越来越多的程序员从IDE转向了Vim和Emacs。</p>
<p>用Vim和Emacs编程到底有什么好处?我想首先是它们高效的编辑操作会提高你的编程效率。其次你可以用它们完成各种语言的编程，所谓一剑在手， 夫复何求。你不用再因为编程语言不同去学习不同的IDE的使用，那些庞大的IDE的升级换代也与你再不相关，你把精力用于学习编程语言本身就好了。听说 Google和微软内部开发也都不用IDE的，他们也会用Emacs或Vim。</p>
<p>因为我写的程序不多，还不能深入体会用Vim或Emacs开发程序的乐趣。我只是觉得这很酷，你看，Linux之父Linus多年来用的是一款  MicroEmacs，它比GNU Emacs或XEmacs少许多功能，但Linus就是用它在维护Linux。 微软的大牛Don  Box，Com之父，一直用Emacs，他说谁也不能夺走他的编辑器。他还在网上放了一段他用Emacs写C#程序的视频。</p>
<p>编程大师们的选择，也是Emacs和Vim被追捧为神器的原因之一。</p>
<p><strong> 4. 神器引发的圣战</strong></p>
<p>Vim用户和Emacs用户有着旗鼓相当的品位，应该互相欣赏才对。现实却是，忠诚于Vim的用户和忠诚于Emacs的用户互不相容，常常没完没了地打口水仗。Emacs用户说Vim的操作方式单一而古怪， Vim用户说Emacs体积庞大，启动缓慢。</p>
<p>很有点一山不容二虎的意思，大概因为二者都处于神器的高度，才会斗争不断吧。也可能是因为二者截然不同的设计哲学吸引的用户在价值观上也互不认同。</p>
<p>正因为两者难分高下，新人总是在Vim和Emacs之间犹豫不定，很难决定到底要皈依哪一个神。</p>
<p>原文：<a href="http://os.51cto.com/art/201101/242518.htm" target="_blank">http://os.51cto.com/art/201101/242518.htm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hellolinux.org/2012/02/emacs-and-vim.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emacs是什么的简称? 一个黑客幽默</title>
		<link>http://www.hellolinux.org/2012/02/what-is-emacs-for-fun.html</link>
		<comments>http://www.hellolinux.org/2012/02/what-is-emacs-for-fun.html#comments</comments>
		<pubDate>Thu, 09 Feb 2012 11:24:32 +0000</pubDate>
		<dc:creator>Hello,Linux</dc:creator>
				<category><![CDATA[Emacs]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://www.hellolinux.org/?p=113</guid>
		<description><![CDATA[Emacs是什么的简称? 一个黑客幽默 &#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160;&#160; E. M. A. C. S. &#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160; Emacs Makes A Computer Slow &#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;Escape Meta Alt Control Shift &#160; &#160;&#160; &#160;&#160; &#160;&#160; &#160;&#160; &#8230; <a href="http://www.hellolinux.org/2012/02/what-is-emacs-for-fun.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: 13px;"><span style="font-weight: bold; font-style: italic;">Emacs是什么的简称? 一个黑客幽默<span id="more-113"></span></span></span></p>
<blockquote><p><span style="font-size: 13px;">&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; E. M. A. C. S.<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; Emacs Makes A Computer Slow<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Escape Meta Alt Control Shift<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Emacs Makers Are Crazy Sickos<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;Emacs Makes All Computing Simple<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Emacs Makefiles Annihilate C-Shells<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Emacs Manuals Always Cause Senility<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Emacs May Allow Customized Screwups<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;Emacs Manuals Are Cryptic and Surreal<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; Eventually Munches All Computer Storage<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; Eight Megabytes And Constantly Swapping<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; Elsewhere Maybe All Commands are Simple<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; Excellent Manuals Are Clearly Suppressed<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Emacs May Alienate Clients and Supporters<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Except by Middle Aged Computer Scientists<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;Extended Macros Are Considered Superfluous<br />
 &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;Every Mode Accelerates Creation of Software<br />
 &nbsp; &nbsp;&nbsp; &nbsp; Each Manual&#8217;s Audience is Completely Stupefied<br />
 &nbsp;&nbsp;Exceptionally Mediocre Algorithm for Computer Scientists<br />
 Easily Maintained with the Assistance of Chemical Solutions<br />
 Eradication of Memory Accomplished with Complete Simplicity</span><span style="font-size: 13px;"><span style="font-weight: bold; font-style: italic;"></span></span></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.hellolinux.org/2012/02/what-is-emacs-for-fun.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>centos服务器静态IP配置-第一次配独服小结</title>
		<link>http://www.hellolinux.org/2012/02/centos-server-static-ip-set-up.html</link>
		<comments>http://www.hellolinux.org/2012/02/centos-server-static-ip-set-up.html#comments</comments>
		<pubDate>Thu, 09 Feb 2012 09:13:14 +0000</pubDate>
		<dc:creator>Hello,Linux</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[centos]]></category>

		<guid isPermaLink="false">http://www.hellolinux.org/?p=94</guid>
		<description><![CDATA[感谢: wych 的供稿. 工作室接的单子，顺带着要帮客户把服务器配了。话说这公司真有钱，跑一个电子商务的单站买了戴尔的品牌机，16G内存，还买了俩，一个主站，一个数据库。大雾_ 用的centos，我一直觉得centos是一个很蛋疼的服务器系统，虽说是独立的，但离不开redhat，也没有debian的稳定，更别提arch的简洁高效，从配置文件就可以看出来。 要配置网络centos下涉及到下面几个配置文件： 在/etc/sysconfig/network里 /etc/sysconfig/network-scripts/ifcfg-eth0 这里的eth0是使用ifconfig命令查看网卡名知道的，不同的机器可能不同。 /etc/resolv.conf配置DNS,很简单 修改完之后重启网卡：]]></description>
			<content:encoded><![CDATA[<div class="post_submit_info">感谢: <a href="http://b.wych.me/centos-static-ip.wych" title="wych" target="_blank">wych</a> 的供稿.</div>
<p>工作室接的单子，顺带着要帮客户把服务器配了。话说这公司真有钱，跑一个电子商务的单站买了戴尔的品牌机，16G内存，还买了俩，一个主站，一个数据库。大雾<(=>_<=)></p>
<p>用的centos，我一直觉得centos是一个很蛋疼的服务器系统，虽说是独立的，但离不开redhat，也没有debian的稳定，更别提arch的简洁高效，从配置文件就可以看出来。<br />
<span id="more-94"></span><br />
要配置网络centos下涉及到下面几个配置文件：</p>
<pre class="brush: bash; title: ; notranslate">
/etc/sysconfig/network 网络配置主文件
/etc/sysconfig/network-scripts/ifcfg-eth0 针对网卡配置
/etc/resolv.conf DNS
/etc/hosts 大家都懂得
</pre>
<p>在/etc/sysconfig/network里</p>
<pre class="brush: bash; title: ; notranslate">
NETWORKING=yes
NETWORKING_IPV6=no #有ipv6就yes
GATEWAY=192.168.1.1#服务器的网关一般ISP会提供
HOSTNAME=localhost.localdomain#主机名,要与/etc/hosts里的相同
</pre>
<p>/etc/sysconfig/network-scripts/ifcfg-eth0<br />
这里的eth0是使用ifconfig命令查看网卡名知道的，不同的机器可能不同。</p>
<pre class="brush: bash; title: ; notranslate">
DEVICE=eth0#网卡名
#BOOTPROTO=dhcp#这两行制定上网方式
BOOTPROTO=static
IPADDR=192.168.1.21#IP地址
NETMASK=255.255.255.0#子网掩码
TYPE=Ethernet#不管
HWADDR=XX:XX:XX:XX:XX:XX#MAC地址
ONBOOT=yes#自动启用
</pre>
<p>/etc/resolv.conf配置DNS,很简单<br />
修改完之后重启网卡：</p>
<pre class="brush: bash; title: ; notranslate">
service network restart
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.hellolinux.org/2012/02/centos-server-static-ip-set-up.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>忘记Windows的思维方式 快乐的学习Linux吧</title>
		<link>http://www.hellolinux.org/2012/02/happy-learn-linux.html</link>
		<comments>http://www.hellolinux.org/2012/02/happy-learn-linux.html#comments</comments>
		<pubDate>Thu, 09 Feb 2012 09:08:36 +0000</pubDate>
		<dc:creator>Hello,Linux</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[学习]]></category>

		<guid isPermaLink="false">http://www.hellolinux.org/?p=99</guid>
		<description><![CDATA[Linux操作系统相比于几年前的普及程度已经有了大大提高，但是由于其桌面操作系统上的可视化窗口操作模式并不像Windows操作系统那样直 观、完美，对于一些刚接触 Linux的人或者初学者来说入手还是有一定的难度，所以其发展并不是那么迅速。但是近年来Linux已经越来越受到重用，它不再仅仅是一些开源发烧友们 之间炫耀资本，而且已经在多方面价值得到了体现，尤其在服务器操作系统方面，已经成为资深服务器工程师的首选的操作工具。随着计算机行业的迅速发展，我相 信Linux操作系统将不仅仅只停留在平台应用上，他将会在更广的空间展现他那独有的优势与魅力。 现在对于大多数中国的电脑用户，很少有人自己用Linux操作系统的，而且还有相当一部分人甚至是第一次听说Linux。但这并不奇怪，即使在很多 大学生眼里也大都如此。在你们眼里只有Windows，只有微软，比尔盖茨是你们大多数人的偶像。那是微软先入为主的观念造成的，就如我们学习英语一样， 如过我们生下来就用英语讲话，周围的人说的也都是英语，那么英语也就自然而然的学会了。而且像汉语一样受我们喜欢。 随着计算机迅速发展，随着知识产权保护的逐步规范，以及Windows系统的费用昂贵，Linux操作系统优势将会不断体现。使之应用越来越广，在这里，笔者把自己两年多来的学习Linux的经验跟大家分享一下，希望能跟大家一起进步！ 1.破釜沉舟——忘掉Windows的思维方式 笔者也看过很多有关学习Linux的方法，第一部分基本都是告诉你怎么安装双系统，怎么便利学习。我也是如此，在自己台式机上安装了双系统，但是学 习效果并不明显，百思不得其解，一次看到破釜沉舟的故事颇有启发，项羽前锋军救巨鹿，初战少利，项羽便率大军渡过漳河，破釜沉舟以激厉士气。终于杀苏角， 虏王离，大败秦军于巨鹿之野。 楚霸王当初能够战胜并不是说他占了多么有利的优势，而是他那一往无前，义无反顾的决心。 当装了双系统以后，只要遇到一些问题，就会快速切换到Windows操作系统来查资料，这样虽然便利了我们学习，但是我们的大脑却对问题缺少了思 考，基本都是去百度知道，问问什么的查，虽然当时解决问题了，但是过后在回忆当时是怎么解决问题的，脑海却是一片空白。我们装的双系统给自己带来便利的同 时也给自己找了太多的借口，到头来却没了学习下去的勇气。 所以后来我把我自己的电脑只安装了Linux操作系统，做什么都从上面去做，逼迫自己学安装浏览器，播放器，文档编辑器，等自己一步步的走过来，才 发现，有的时候不是我们没能力去办好一件事，而是我们再没办事之前就给自己想好了各种退路。彻底忘记Windows思维方式，在一个只有Linux操作系 统环境下生活。 如果你想系统的学习Linux，你必需清楚的认识到这一点。如果你真正想系统的学习linux，想用Linux有所作为，那么请忘记 Windows的思维方式，思想性的转变比暂时性的技术提高更有用， 而思想上的改变往往是受到我们行动所影响的，有不懂的问题就自己思考，查资料， 实在不会再去找别人的电脑去查，这样就加深了我每次对问题的理解，慢慢感受和习惯Linux的操作方式，总有一天你会真正体验到他的奥妙所在，从而从自己 内心深处喜欢他，使用他，而不是为了赶时髦或向人炫耀而使用他。 2.学习有三要——眼要精、笔要动、手要勤 a。多看一些学习Linux方面的书。要抓住精髓，不要贪多嚼不烂。 b。多做笔记，好记性不如烂笔头。 c。实践出真知。很多时候我们都是嘴上功夫，而到了真正自己搭建的时候就会发现自己其实一无所知。 3.学习要用心——学习Linux不是逛自由市场 国内最受欢迎的RedHat 经常看到有人问用什么版本的Linux好，其实只要你认真学习无论什么版本都挺好的。要知道，开发Linux发行版的人都是通读过Linux内核代码，对Linux原理极其精通的人，而且每一个开发团队都对他的发行版做过测试后放出的。那些国际知名的大品牌更是如此。 因此，讨论什么版本好并无意义，关键是你是不是真心想学。不过，为了避免曲高和寡，最好选用的人多的版本，比如RedHat CentOS等等。学习Linux不是逛自由市场，选定版本就要静下心来学习。不要今天换版本明天要升级。这样对你没有好处。例如有些人号称用过十几种甚 至几十种Linux，向人谈论起来头头是到，好像懂的很多，但是如果你让他去用Linux搭建一个Web服务器，他就什么都不会了。他们把时间都浪费在了 版本的转换上了。 4.学习不能盲目——多用自带的系统文档解决问题 说到这，我还是有点儿底气不足，因为我自己的英语很差。不过，只要熟悉了计算机专业英语，高中毕业的水平就可以轻松的阅读计算机文档了。如果你的英 语实在太差了，连最简单的计算机英语文档都看不懂，那么在学习Linux的同时，请赶紧学习英语。也许你说，你可以看翻译的文档，当我还是一个菜菜鸟的时 候，也是这样认为的。 &#8230; <a href="http://www.hellolinux.org/2012/02/happy-learn-linux.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Linux操作系统相比于几年前的普及程度已经有了大大提高，但是由于其桌面操作系统上的可视化窗口操作模式并不像Windows操作系统那样直 观、完美，对于一些刚接触 Linux的人或者初学者来说入手还是有一定的难度，所以其发展并不是那么迅速。但是近年来Linux已经越来越受到重用，它不再仅仅是一些开源发烧友们 之间炫耀资本，而且已经在多方面价值得到了体现，尤其在服务器操作系统方面，已经成为资深服务器工程师的首选的操作工具。随着计算机行业的迅速发展，我相 信Linux操作系统将不仅仅只停留在平台应用上，他将会在更广的空间展现他那独有的优势与魅力。<span id="more-99"></span></p>
<p>现在对于大多数中国的电脑用户，很少有人自己用Linux操作系统的，而且还有相当一部分人甚至是第一次听说Linux。但这并不奇怪，即使在很多 大学生眼里也大都如此。在你们眼里只有Windows，只有微软，比尔盖茨是你们大多数人的偶像。那是微软先入为主的观念造成的，就如我们学习英语一样， 如过我们生下来就用英语讲话，周围的人说的也都是英语，那么英语也就自然而然的学会了。而且像汉语一样受我们喜欢。</p>
<p>随着计算机迅速发展，随着知识产权保护的逐步规范，以及Windows系统的费用昂贵，Linux操作系统优势将会不断体现。使之应用越来越广，在这里，笔者把自己两年多来的学习Linux的经验跟大家分享一下，希望能跟大家一起进步！</p>
<p><strong>1.破釜沉舟——忘掉Windows的思维方式</strong></p>
<p>笔者也看过很多有关学习Linux的方法，第一部分基本都是告诉你怎么安装双系统，怎么便利学习。我也是如此，在自己台式机上安装了双系统，但是学 习效果并不明显，百思不得其解，一次看到破釜沉舟的故事颇有启发，项羽前锋军救巨鹿，初战少利，项羽便率大军渡过漳河，破釜沉舟以激厉士气。终于杀苏角， 虏王离，大败秦军于巨鹿之野。 楚霸王当初能够战胜并不是说他占了多么有利的优势，而是他那一往无前，义无反顾的决心。</p>
<p>当装了双系统以后，只要遇到一些问题，就会快速切换到Windows操作系统来查资料，这样虽然便利了我们学习，但是我们的大脑却对问题缺少了思 考，基本都是去百度知道，问问什么的查，虽然当时解决问题了，但是过后在回忆当时是怎么解决问题的，脑海却是一片空白。我们装的双系统给自己带来便利的同 时也给自己找了太多的借口，到头来却没了学习下去的勇气。</p>
<p>所以后来我把我自己的电脑只安装了Linux操作系统，做什么都从上面去做，逼迫自己学安装浏览器，播放器，文档编辑器，等自己一步步的走过来，才 发现，有的时候不是我们没能力去办好一件事，而是我们再没办事之前就给自己想好了各种退路。彻底忘记Windows思维方式，在一个只有Linux操作系 统环境下生活。</p>
<p>如果你想系统的学习Linux，你必需清楚的认识到这一点。如果你真正想系统的学习linux，想用Linux有所作为，那么请忘记 Windows的思维方式，思想性的转变比暂时性的技术提高更有用， 而思想上的改变往往是受到我们行动所影响的，有不懂的问题就自己思考，查资料， 实在不会再去找别人的电脑去查，这样就加深了我每次对问题的理解，慢慢感受和习惯Linux的操作方式，总有一天你会真正体验到他的奥妙所在，从而从自己 内心深处喜欢他，使用他，而不是为了赶时髦或向人炫耀而使用他。</p>
<p><strong>2.学习有三要——眼要精、笔要动、手要勤</strong></p>
<p>a。多看一些学习Linux方面的书。要抓住精髓，不要贪多嚼不烂。</p>
<p>b。多做笔记，好记性不如烂笔头。</p>
<p>c。实践出真知。很多时候我们都是嘴上功夫，而到了真正自己搭建的时候就会发现自己其实一无所知。</p>
<p><strong>3.学习要用心——学习Linux不是逛自由市场</strong></p>
<p><img class="fit-image" src="http://images.51cto.com/files/uploadimg/20111117/0953111.jpg" alt="linux学习经验 " width="498" /><br />
国内最受欢迎的RedHat</p>
<p>经常看到有人问用什么版本的Linux好，其实只要你认真学习无论什么版本都挺好的。要知道，开发Linux发行版的人都是通读过Linux内核代码，对Linux原理极其精通的人，而且每一个开发团队都对他的发行版做过测试后放出的。那些国际知名的大品牌更是如此。</p>
<p>因此，讨论什么版本好并无意义，关键是你是不是真心想学。不过，为了避免曲高和寡，最好选用的人多的版本，比如RedHat CentOS等等。学习Linux不是逛自由市场，选定版本就要静下心来学习。不要今天换版本明天要升级。这样对你没有好处。例如有些人号称用过十几种甚 至几十种Linux，向人谈论起来头头是到，好像懂的很多，但是如果你让他去用Linux搭建一个Web服务器，他就什么都不会了。他们把时间都浪费在了 版本的转换上了。</p>
<p><strong>4.学习不能盲目——多用自带的系统文档解决问题</strong></p>
<p>说到这，我还是有点儿底气不足，因为我自己的英语很差。不过，只要熟悉了计算机专业英语，高中毕业的水平就可以轻松的阅读计算机文档了。如果你的英 语实在太差了，连最简单的计算机英语文档都看不懂，那么在学习Linux的同时，请赶紧学习英语。也许你说，你可以看翻译的文档，当我还是一个菜菜鸟的时 候，也是这样认为的。</p>
<p>但是，后来才发现，如果你想深入学习Linux，看不懂英文文档实在是太难了。写的最好的，最全面的文档都是英语写的，最先发布的技术信息也都是用 英语写的。即便是非英语国家的人发布技术文档，也都首先翻译成英语在国际学术杂志和网络上发表。你去看看各大软硬件生产商的官方网站，有哪一个不是用英语 作为其主站的？长期用Windows的人会很不习惯这一点，装个软件还要看半天文档，因为Windows用起来实在太简单了。但是如果你想学习Linux 就必须学会看各种文档，而大部分的文档都是用英语写的。</p>
<p>现很多人甚至连man文档都不会看，有什么命令不会用了就跑到论坛上来问，还装出一副可怜相，乞讨一个命令的用法。有这些时间还不如自己看看man 文档，即使你一个一个单词的翻译成中文再自己看都比问别人强，因为别人的回答再怎么详尽都比不上man文档详尽。安装一个新的软件时先看Readme，再 看 Install然后看FAQ，最后才动手安装，这样遇到问题就知道为什么。否则，说明文档都不看，结果出了问题再来找答案反而浪费时间！ 古人说欲速则不达就是这个道理！</p>
<p><strong>5.学习要刻苦——多记Linux命令</strong></p>
<p>当你经过一段时间的学习后就应该扩充自己的知识，多学习Linux命令，但是不要在初学阶段就系统的学习Linux命令，初学阶段只要把上课时候学 习过的命令练熟就可以了。单靠学习各种命令而成为高手是不可能的，但不会命令而成为高手也是不可能的。这就好比学英语，什么语法都不懂，只捧着单词手册背 单词是学不会英语的，但是没有单词词汇量英语水平也提不高的。</p>
<p>在Linux中学习命令的最好办法是学习Shell脚本编程，Shell脚本比起其他语言来学习简单，但是功能却十分强大。通过学习Shell编 程，能让你掌握大量的Linux命令。另外，买一本命令参考手册是必要的，遇到不知道怎么用的命令可以随时查询，这要比查man文档快。特别适合英语不 好，看不懂 man文档的人。</p>
<p>在Linux中，命令可分为系统基本命令和应用程序命令。系统基本命令是所有的Unix类系统都支持的命令，走到哪都不变，只要是Unix类系统上就肯定有。</p>
<p>态度决定你的成就</p>
<p><strong>6.学习要深究——了解Linux系统结构以及Linux系统的管理</strong></p>
<p><img class="fit-image" src="http://images.51cto.com/files/uploadimg/20111117/0953112.png" alt="linux学习经验 " width="498" /><br />
Linux内核地图</p>
<p>等你对Linux有了一定的认识后，知道了/etc下那些配置文件有什么用，就可以去了解系统结构了。了解系统结构不是要你去看什么文件夹放什么内容，而是要学习一些原理性的东西。比如系统是如何引导的，引导后启动了那些东西。系统中哪些是最基本的库文件，有什么用等等。</p>
<p>接下来就可以进一步学习管理系统。比如学习配置各种网络服务器，用Linux搭建网络，这些都是学习Linux系统管理和网络管理的好方法。 到了这个阶段就可以经常上网查查资料，看看论坛精华区文章，论坛可以让你学到一些小知识，小技巧。</p>
<p><strong>7.博览群书——在时间充足的情况下多看看关于计算机的专业课程</strong></p>
<p>如果你不是计算机专业的，而想把linux学好，就一定要学习专业课程。学习微机原理，操作系统，计算机网络等等专业课程是必需的。为什么同时开始 学习linux，有些人学的非常快，不到半年就成了高手，有些人玩来玩去还玩不出名堂，玩了一两年还是菜鸟？ 因为那些学得快的人有基础，他们都学过专业课程。同样一篇文档，没有基础的人可能看了三遍还不明白，基础扎实的眼睛扫两下就懂了！ 这就是专业和非专业的差别！ 因此，要想达到更高的境界就一定要学习基础的专业课程。</p>
<p><strong>8.态度决定成就——最后要永远保持虚心的学习态度</strong></p>
<p>我想再重复一遍天外有天，人外有人的道理！保持虚心的学习态度不仅能让你学到更多知识，而且会让你受人尊重。</p>
<p>51CTO编辑注：本文的一些观点只是作者的个人经验，比如不装双系统之类的建议，在很多工作环境下其实未必适用。其实在双系统下学习Linux或 者在SSH客户端下学习Linux，这些都不是那么重要，重要的是，你有没有将自己的学习心得记录下来，是不是时常去温习。如果你还没有技术博客的话，现 在就去开一个，将自己的Linux学习点滴记录下来吧！</p>
<p>原文链接：http://os.51cto.com/art/201111/302366.htm</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hellolinux.org/2012/02/happy-learn-linux.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux VPS架设PPTP VPN教程</title>
		<link>http://www.hellolinux.org/2012/02/linux-vps-pptp-set-up.html</link>
		<comments>http://www.hellolinux.org/2012/02/linux-vps-pptp-set-up.html#comments</comments>
		<pubDate>Wed, 08 Feb 2012 07:04:10 +0000</pubDate>
		<dc:creator>Hello,Linux</dc:creator>
				<category><![CDATA[Linux VPS]]></category>
		<category><![CDATA[openvz]]></category>
		<category><![CDATA[pptp]]></category>
		<category><![CDATA[vpn]]></category>

		<guid isPermaLink="false">http://www.hellolinux.org/?p=81</guid>
		<description><![CDATA[1.OpenVZ的VPS客户需要检测虚拟网卡ppp模块支持： 首先检查你VPS的PPP和TUN有没有启用： TUN设备是Linux下的虚拟网卡。 显示结果为：cat: /dev/ppp: No such device or address和cat: /dev/net/tun: File descriptor in bad state，表明通过，上述两条只要有一个没通过都不行。如果没有启用，你可以给VPS提供商Submit 一个 Ticket请求开通。 &#160; 2.确认PPP和TUN启用后，开始安装ppp和iptables： 3.安装pptp： 或者： 4.增加账户： 安装完成后，大家要注意，最后一行是你的用户，密码，要记住。如果你需要添加用户，只要直接编辑/etc/ppp/chap-secrets文件，按照相同格式添加用户名和密码即可。 格式为 5.配置PPTP： 去加密。编辑/etc/ppp/options.pptpd（vim /etc/ppp/options.pptpd），在require-mppe-128前面加个#（# require-mppe-128） 6.重启PPTP： 最后重启下PPTPD: 7.新建网络连接 本地设置加密方式为可选加密，并允许未加密的密码。 参考： http://www.zrblog.net/1870.html http://www.kwx.gd/CentOSApp/PPTP-VPN.html http://www.live-in.org/archives/612.html http://blog.ucvps.com/2011/10/pptp_ucvps.html]]></description>
			<content:encoded><![CDATA[<p>1.OpenVZ的VPS客户需要检测虚拟网卡ppp模块支持：</p>
<p>首先检查你VPS的PPP和TUN有没有启用：<br />
TUN设备是Linux下的虚拟网卡。</p>
<pre class="brush: bash; title: ; notranslate">
cat /dev/ppp
cat /dev/net/tun
</pre>
<p>显示结果为：cat: /dev/ppp: No such device or address和cat: /dev/net/tun: File descriptor in bad state，表明通过，上述两条只要有一个没通过都不行。如果没有启用，你可以给VPS提供商Submit 一个 Ticket请求开通。</p>
<p><span id="more-81"></span></p>
<p>&nbsp;</p>
<p><a href="http://www.hellolinux.org/wp-content/uploads/2012/02/image.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="image" src="http://www.hellolinux.org/wp-content/uploads/2012/02/image_thumb.png" alt="image" width="644" height="162" border="0" /></a></p>
<p>2.确认PPP和TUN启用后，开始安装ppp和iptables：</p>
<pre class="brush: bash; title: ; notranslate">
yum install -y ppp iptables
</pre>
<p>3.安装pptp：</p>
<pre class="brush: bash; title: ; notranslate">
rpm -ivh http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.i386.rpm（32位系统）

rpm -ivh http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.x86_64.rpm（64位系统）
</pre>
<p>或者：</p>
<pre class="brush: bash; title: ; notranslate">
wget http://www.diahosting.com/dload/pptpd.sh

sh pptpd.sh
</pre>
<p><a href="http://www.hellolinux.org/wp-content/uploads/2012/02/image1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="image" src="http://www.hellolinux.org/wp-content/uploads/2012/02/image_thumb1.png" alt="image" width="644" height="340" border="0" /></a></p>
<p>4.增加账户：</p>
<p>安装完成后，大家要注意，最后一行是你的用户，密码，要记住。如果你需要添加用户，只要直接编辑/etc/ppp/chap-secrets文件，按照相同格式添加用户名和密码即可。<br />
格式为</p>
<pre class="brush: bash; title: ; notranslate">
用户名 空格 pptpd 密码 星号 如下所示
vpn pptpd Y3gE6juw *
liming pptpd dasdkfsf *
</pre>
<p>5.配置PPTP：<br />
去加密。编辑/etc/ppp/options.pptpd（vim /etc/ppp/options.pptpd），在require-mppe-128前面加个#（# require-mppe-128）</p>
<p>6.重启PPTP：</p>
<p>最后重启下PPTPD:</p>
<pre class="brush: bash; title: ; notranslate">
/etc/init.d/pptpd restart
</pre>
<p>7.新建网络连接</p>
<p>本地设置加密方式为可选加密，并允许未加密的密码。</p>
<p>参考：</p>
<p><a title="http://www.zrblog.net/1870.html" href="http://www.zrblog.net/1870.html">http://www.zrblog.net/1870.html</a></p>
<p><a title="http://www.kwx.gd/CentOSApp/PPTP-VPN.html" href="http://www.kwx.gd/CentOSApp/PPTP-VPN.html">http://www.kwx.gd/CentOSApp/PPTP-VPN.html</a></p>
<p><a title="http://www.live-in.org/archives/612.html" href="http://www.live-in.org/archives/612.html">http://www.live-in.org/archives/612.html</a></p>
<p><a title="http://blog.ucvps.com/2011/10/pptp_ucvps.html" href="http://blog.ucvps.com/2011/10/pptp_ucvps.html">http://blog.ucvps.com/2011/10/pptp_ucvps.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hellolinux.org/2012/02/linux-vps-pptp-set-up.html/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>为Linux 初学者选择发行版本支招</title>
		<link>http://www.hellolinux.org/2012/02/some-advise-for-freshman.html</link>
		<comments>http://www.hellolinux.org/2012/02/some-advise-for-freshman.html#comments</comments>
		<pubDate>Tue, 07 Feb 2012 14:50:16 +0000</pubDate>
		<dc:creator>Hello,Linux</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[freshman]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.hellolinux.org/?p=73</guid>
		<description><![CDATA[Linux 初学者一般有这样的困惑：“Linux 发行版本到底有多少个？哪一款适合我？” Linux 初学者有时仿佛坠入云里雾里，内心无比纠结。一个一个版本，换了这个换那个。试问谁来拯救？答案在初学者自己身上。如果初学者还没有找到方向，可以参考下面几条建议为自己把下脉。 &#160; #1,软件包管理方式 目前流行的软件包管理方式主要有.Deb、.RPM两大系列，当然还有压缩包格式如tar、二进制格式包。Deb包是Debain Linux提供的一种已经编译过的包的安装格式，派生自Debian 操作系统的发行版本都使用该软件包格式，如Ubuntu、Linux Mint。RPM 包与Deb 包类似，是Red Hat Linux 使用的软件包格式，派生自 Red Hat的Linux 发行版本都使用该软件包格式，如CentOS，Fedora等。 这两种包格式，在安装的时候都会自动寻找、安装依赖，极大得方便了用户使用。初学者要选择适合自己的。 #2,克服心理障碍 有时候选择发行版本，是为了炫耀自己的Geek 身份。Linux 不是用来炫耀的，它是用来帮助你工作、生活学习的。仅仅为了炫耀，而选择自己不太喜欢的发行版本，这个没有什么必要。 不要以为用图形界面做得很好的发行版本，在别人面前有心理落差，感到自己不如人。感觉在别人面前用鼠标点来点去就有失面子，看着别人全部键盘、命令行，开始“怀疑人生”。 适合自己的，才是最好的。毕竟，安装在你的硬盘上，不是给别人用，而是为了自己的便利。上述几个现象，实在是与自己过不去。自己感到好用、易用的发行版本就用下去！初学者要做的就是抛下包袱，扬起高昂的头颅，快乐的选择自己喜欢的发行版本！ #3,贵有恒 静，可以让你深刻的认识自己、反思自己；不静，则无恒心。学习Linux，贵有恒。Linux 初学者容易犯的一个毛病就是不坚持。感觉到Linux 学习有点困难了，就把Linux 从硬盘上干掉，过一段时间，感到自己想玩下Linux 了，就又安装上Linux。过了一阵子，心里又有不舒服……这样如此以来，反反复复，不知几何。 作者在初学Linux 的时候，一天甚至将这一无聊的动作重复10次。到头来，请问获得了什么？除了安装过程轻车熟路以外，自己感觉毫无收获，一片空虚充斥内心。 Linux 初学者应该勇敢地停止这一行为，逼迫自己静下心来，坚持使用Linux 作为日常的操作系统。其实，学习Linux 就是在培养自己的新习惯与思维，就在改变自己的价值观和人生观。 #4,贵在专 专心是最犀利的利器！选择一个自己喜欢的发行版本，坚持用下去，用熟练！其实，多数发行版本的差别不大。桌面环境，一般就是KDE、Gnome、 &#8230; <a href="http://www.hellolinux.org/2012/02/some-advise-for-freshman.html">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Linux 初学者一般有这样的困惑：“Linux 发行版本到底有多少个？哪一款适合我？”   <br />Linux 初学者有时仿佛坠入云里雾里，内心无比纠结。一个一个版本，换了这个换那个。试问谁来拯救？答案在初学者自己身上。如果初学者还没有找到方向，可以参考下面几条建议为自己把下脉。</p>
<p><span id="more-73"></span>
<p>&#160;</p>
<p><strong><font style="background-color: #cccccc">#1,软件包管理方式</font></strong>    <br />目前流行的软件包管理方式主要有.Deb、.RPM两大系列，当然还有压缩包格式如tar、二进制格式包。Deb包是Debain Linux提供的一种已经编译过的包的安装格式，派生自Debian 操作系统的发行版本都使用该软件包格式，如Ubuntu、Linux Mint。RPM 包与Deb 包类似，是Red Hat Linux 使用的软件包格式，派生自 Red Hat的Linux 发行版本都使用该软件包格式，如CentOS，Fedora等。    <br />这两种包格式，在安装的时候都会自动寻找、安装依赖，极大得方便了用户使用。初学者要选择适合自己的。</p>
<p><font style="background-color: #cccccc"><strong>#2,克服心理障碍</strong>      <br /></font>有时候选择发行版本，是为了炫耀自己的Geek 身份。Linux 不是用来炫耀的，它是用来帮助你工作、生活学习的。仅仅为了炫耀，而选择自己不太喜欢的发行版本，这个没有什么必要。    <br />不要以为用图形界面做得很好的发行版本，在别人面前有心理落差，感到自己不如人。感觉在别人面前用鼠标点来点去就有失面子，看着别人全部键盘、命令行，开始“怀疑人生”。    <br />适合自己的，才是最好的。毕竟，安装在你的硬盘上，不是给别人用，而是为了自己的便利。上述几个现象，实在是与自己过不去。自己感到好用、易用的发行版本就用下去！初学者要做的就是抛下包袱，扬起高昂的头颅，快乐的选择自己喜欢的发行版本！</p>
<p><strong><font style="background-color: #cccccc">#3,贵有恒</font></strong>    <br />静，可以让你深刻的认识自己、反思自己；不静，则无恒心。学习Linux，贵有恒。Linux 初学者容易犯的一个毛病就是不坚持。感觉到Linux 学习有点困难了，就把Linux 从硬盘上干掉，过一段时间，感到自己想玩下Linux 了，就又安装上Linux。过了一阵子，心里又有不舒服……这样如此以来，反反复复，不知几何。    <br />作者在初学Linux 的时候，一天甚至将这一无聊的动作重复10次。到头来，请问获得了什么？除了安装过程轻车熟路以外，自己感觉毫无收获，一片空虚充斥内心。    <br />Linux 初学者应该勇敢地停止这一行为，逼迫自己静下心来，坚持使用Linux 作为日常的操作系统。其实，学习Linux 就是在培养自己的新习惯与思维，就在改变自己的价值观和人生观。</p>
<p><strong><font style="background-color: #cccccc">#4,贵在专</font></strong>    <br />专心是最犀利的利器！选择一个自己喜欢的发行版本，坚持用下去，用熟练！其实，多数发行版本的差别不大。桌面环境，一般就是KDE、Gnome、 LXDE、XFCE等流行的桌面环境；Linux 下常用的应用，也是数的来的，如网页浏览器Firefox、谷歌浏览器、Opera浏览器，邮件客户端如Thunderbird，IM 工具如Empathy、Pidgin等，图形软件如GIMP、Paint、Shotwell……要说差别，就是各个发行版本的桌面定制不同、软件包管理方式有不同。    <br />只要熟练使用一种发行版本，其他的大同小异、不攻自破。    <br />这里可以为初学者推荐几款目前流行的发行版本，因为在学习的过程中遇到问题，可以方便地在网络检索到解决方案。</p>
<ul>
<li>Ubuntu：目前最流行的发行版本，中文社区活跃，资料也丰富； </li>
<li>Linux Mint：基于Ubuntu，在Distrowatch 上过去6个月内排名第一； </li>
<li>Fedora：一款大气、杰出的发行版本； </li>
<li>Archlinux：wiki 做得很出色的发行版本； </li>
</ul>
<p>国内优秀的中文发行版本有Linux Deepin、YLMF、红旗等。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hellolinux.org/2012/02/some-advise-for-freshman.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

