﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-&lt;B&gt;&lt;font face="Arial" size="6" color="#24f814"&gt;✽✽✽七楼的阳光✽✽✽&lt;/font&gt; &lt;/B&gt;-随笔分类-linux世界</title><link>http://www.cppblog.com/guangping/category/11051.html</link><description>&lt;font face="Arial" size="4" color="#FF8000"&gt;－－－宁静致远，超然世外。&lt;/font&gt; </description><language>zh-cn</language><lastBuildDate>Wed, 01 Jul 2009 22:32:50 GMT</lastBuildDate><pubDate>Wed, 01 Jul 2009 22:32:50 GMT</pubDate><ttl>60</ttl><item><title>Linux 下串口编程入门</title><link>http://www.cppblog.com/guangping/archive/2009/06/28/66914.html</link><dc:creator>王光平</dc:creator><author>王光平</author><pubDate>Sun, 28 Jun 2009 15:16:00 GMT</pubDate><guid>http://www.cppblog.com/guangping/archive/2009/06/28/66914.html</guid><wfw:comment>http://www.cppblog.com/guangping/comments/66914.html</wfw:comment><comments>http://www.cppblog.com/guangping/archive/2009/06/28/66914.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/guangping/comments/commentRss/66914.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guangping/services/trackbacks/66914.html</trackback:ping><description><![CDATA[
		<div class="title">
				<h1>Linux 下串口编程入门</h1>
		</div>
		<b>计算机串口的引脚定义<br /><br /></b>
		<table 80%="" border="1" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td 10%="" align="center">序号</td>
								<td 30%="" align="center">信号名称</td>
								<td 10%="" align="center">符号</td>
								<td 10%="" align="center">流向</td>
								<td 40%="" align="center">功能</td>
						</tr>
						<tr>
								<td align="center">2</td>
								<td align="center">发送数据</td>
								<td align="center">TXD</td>
								<td align="center">DTE→DCE</td>
								<td>DTE发送串行数据</td>
						</tr>
						<tr>
								<td align="center">3</td>
								<td align="center">接收数据</td>
								<td align="center">RXD</td>
								<td align="center">DTE←DCE</td>
								<td>DTE 接收串行数据</td>
						</tr>
						<tr>
								<td align="center">4</td>
								<td align="center">请求发送</td>
								<td align="center">RTS</td>
								<td align="center">DTE→DCE</td>
								<td>DTE 请求 DCE 将线路切换到发送方式</td>
						</tr>
						<tr>
								<td align="center">5</td>
								<td align="center">允许发送</td>
								<td align="center">CTS</td>
								<td align="center">DTE←DCE</td>
								<td>DCE 告诉 DTE 线路已接通可以发送数据</td>
						</tr>
						<tr>
								<td align="center">6</td>
								<td align="center">数据设备准备好</td>
								<td align="center">DSR</td>
								<td align="center">DTE←DCE</td>
								<td>DCE 准备好</td>
						</tr>
						<tr>
								<td align="center">7</td>
								<td align="center">信号地</td>
								<td align="center">　</td>
								<td align="center">　</td>
								<td>　　　信号公共地</td>
						</tr>
						<tr>
								<td align="center">8</td>
								<td align="center">载波检测</td>
								<td align="center">DCD</td>
								<td align="center">DTE←DCE</td>
								<td>表示 DCE 接收到远程载波</td>
						</tr>
						<tr>
								<td align="center">20</td>
								<td align="center">数据终端准备好</td>
								<td align="center">DTR</td>
								<td align="center">DTE→DCE</td>
								<td>DTE 准备好</td>
						</tr>
						<tr>
								<td align="center">22</td>
								<td align="center">振铃指示</td>
								<td align="center">RI</td>
								<td align="center">DTE←DCE</td>
								<td>表示 DCE 与线路接通，出现振铃</td>
						</tr>
				</tbody>
		</table>
		<a name="N1013B">
				<span class="atitle">串口操作<br /></span>
		</a>
		<p>串口操作需要的头文件
</p>
		<pre class="displaycode">#include     <stdio.h>      /*标准输入输出定义*/<br />#include     <stdlib.h>     /*标准函数库定义*/<br />#include     <unistd.h>     /*Unix 标准函数定义*/<br />#include     <br />#include     <br />#include     <fcntl.h>      /*文件控制定义*/<br />#include     <termios.h>    /*PPSIX 终端控制定义*/<br />#include     <errno.h>      /*错误号定义*/<br /></errno.h></termios.h></fcntl.h></unistd.h></stdlib.h></stdio.h></pre>
		<p>
				<a name="N10148">
						<span class="atitle">打开串口</span>
				</a>
		</p>
		<p>
在 Linux 下串口文件是位于 /dev 下的
</p>
		<p>串口一 为 /dev/ttyS0
</p>
		<p>串口二 为 /dev/ttyS1
</p>
		<p>打开串口是通过使用标准的文件打开函数操作：
</p>
       
      int fd;
/*以读写方式打开串口*/
<br />fd = open( "/dev/ttyS0", O_RDWR);//| O_NOCTTY | O_NDELAY<br />if (-1 == fd)<br />{ 
<br />    /* 不能打开串口一*/ 
<br />    perror(" 提示错误！");
<br />}<br /><p><a name="N1015E"><span class="atitle">设置串口</span></a></p><p>最基本的设置串口包括波特率设置，效验位和停止位设置。</p><p>串口的设置主要是设置 struct termios 结构体的各成员值。
</p><pre class="displaycode">struct termio<br />{	unsigned short  c_iflag;	/* 输入模式标志 */	<br />	unsigned short  c_oflag;		/* 输出模式标志 */	<br />	unsigned short  c_cflag;		/* 控制模式标志*/	<br />	unsigned short  c_lflag;		/* local mode flags */	<br />	unsigned char  c_line;		    /* line discipline */	<br />	unsigned char  c_cc[NCC];    /* control characters */<br />};<br /></pre><p>设置这个结构体很复杂，我这里就只说说常见的一些设置：
</p><p>波特率设置</p><p>下面是修改波特率的代码：</p><pre class="displaycode">struct  termios Opt;<br />tcgetattr(fd, &amp;Opt);<br />cfsetispeed(&amp;Opt,B19200);     /*设置为19200Bps*/<br />cfsetospeed(&amp;Opt,B19200);<br />tcsetattr(fd,TCANOW,&amp;Opt);<br />设置波特率的例子函数：<br />/**<br />*@brief  设置串口通信速率<br />*@param  fd     类型 int  打开串口的文件句柄<br />*@param  speed  类型 int  串口速度<br />*@return  void<br />*/<br />int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,<br />					B38400, B19200, B9600, B4800, B2400, B1200, B300, };<br /><!-- code sample is too wide -->int name_arr[] = {38400,  19200,  9600,  4800,  2400,  1200,  300, 38400,  <br />					19200,  9600, 4800, 2400, 1200,  300, };<br />void set_speed(int fd, int speed){<br />	int   i; <br />	int   status; <br />	struct termios   Opt;<br />	tcgetattr(fd, &amp;Opt); <br />	for ( i= 0;  i &lt; sizeof(speed_arr) / sizeof(int);  i++) { <br />		if  (speed == name_arr[i]) {     <br />			tcflush(fd, TCIOFLUSH);     <br />			cfsetispeed(&amp;Opt, speed_arr[i]);  <br />			cfsetospeed(&amp;Opt, speed_arr[i]);   <br />			status = tcsetattr(fd1, TCSANOW, &amp;Opt);  <br />			if  (status != 0) {        <br />				perror("tcsetattr fd1");  <br />				return;     <br />			}    <br />			tcflush(fd,TCIOFLUSH);   <br />		}  <br />	}<br />}<br />效验位和停止位的设置：<br /></pre><table 100%="" border="1" cellpadding="0" cellspacing="0"><tbody><tr><td 20%="" align="center">无效验</td><td 20%="" align="center">8位</td><td 60%="">
Option.c_cflag &amp;= ~PARENB;
            <br />
Option.c_cflag &amp;= ~CSTOPB;
            <br />
Option.c_cflag &amp;= ~CSIZE;
            <br />
Option.c_cflag |= ~CS8;
          </td></tr><tr><td 20%="" align="center">奇效验(Odd)</td><td 20%="" align="center">7位</td><td 60%="">
Option.c_cflag |= ~PARENB;
            <br />
Option.c_cflag &amp;= ~PARODD;
            <br />
Option.c_cflag &amp;= ~CSTOPB;
            <br />
Option.c_cflag &amp;= ~CSIZE;
            <br />
Option.c_cflag |= ~CS7;
          </td></tr><tr><td 20%="" align="center">偶效验(Even)</td><td 20%="" align="center">7位</td><td 60%="">
Option.c_cflag &amp;= ~PARENB;
            <br />
Option.c_cflag |= ~PARODD;
            <br />
Option.c_cflag &amp;= ~CSTOPB;
            <br />
Option.c_cflag &amp;= ~CSIZE;
            <br />
Option.c_cflag |= ~CS7;
          </td></tr><tr><td 20%="" align="center">Space效验</td><td 20%="" align="center">7位</td><td 60%="">
Option.c_cflag &amp;= ~PARENB;
            <br />
Option.c_cflag &amp;= ~CSTOPB;
            <br />
Option.c_cflag &amp;= &amp;~CSIZE;
            <br />
Option.c_cflag |= CS8;
          </td></tr></tbody></table><pre class="displaycode">设置效验的函数：<br />/**<br />*@brief   设置串口数据位，停止位和效验位<br />*@param  fd     类型  int  打开的串口文件句柄<br />*@param  databits 类型  int 数据位   取值 为 7 或者8<br />*@param  stopbits 类型  int 停止位   取值为 1 或者2<br />*@param  parity  类型  int  效验类型 取值为N,E,O,,S<br />*/<br />int set_Parity(int fd,int databits,int stopbits,int parity)<br />{ <br />	struct termios options; <br />	if  ( tcgetattr( fd,&amp;options)  !=  0) { <br />		perror("SetupSerial 1");     <br />		return(FALSE);  <br />	}<br />	options.c_cflag &amp;= ~CSIZE; <br />	switch (databits) /*设置数据位数*/<br />	{   <br />	case 7:		<br />		options.c_cflag |= CS7; <br />		break;<br />	case 8:     <br />		options.c_cflag |= CS8;<br />		break;   <br />	default:    <br />		fprintf(stderr,"Unsupported data size\n"); return (FALSE);  <br />	}<br />switch (parity) <br />{   <br />	case 'n':<br />	case 'N':    <br />		options.c_cflag &amp;= ~PARENB;   /* Clear parity enable */<br />		options.c_iflag &amp;= ~INPCK;     /* Enable parity checking */ <br />		break;  <br />	case 'o':   <br />	case 'O':     <br />		options.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/  <br />		options.c_iflag |= INPCK;             /* Disnable parity checking */ <br />		break;  <br />	case 'e':  <br />	case 'E':   <br />		options.c_cflag |= PARENB;     /* Enable parity */    <br />		options.c_cflag &amp;= ~PARODD;   /* 转换为偶效验*/     <br />		options.c_iflag |= INPCK;       /* Disnable parity checking */<br />		break;<br />	case 'S': <br />	case 's':  /*as no parity*/   <br />	    options.c_cflag &amp;= ~PARENB;<br />		options.c_cflag &amp;= ~CSTOPB;break;  <br />	default:   <br />		fprintf(stderr,"Unsupported parity\n");    <br />		return (FALSE);  <br />	}  <br />/* 设置停止位*/  <br />switch (stopbits)<br />{   <br />	case 1:    <br />		options.c_cflag &amp;= ~CSTOPB;  <br />		break;  <br />	case 2:    <br />		options.c_cflag |= CSTOPB;  <br />	   break;<br />	default:    <br />		 fprintf(stderr,"Unsupported stop bits\n");  <br />		 return (FALSE); <br />} <br />/* Set input parity option */ <br />if (parity != 'n')   <br />	options.c_iflag |= INPCK; <br />tcflush(fd,TCIFLUSH);<br />options.c_cc[VTIME] = 150; /* 设置超时15 seconds*/   <br />options.c_cc[VMIN] = 0; /* Update the options and do it NOW */<br />if (tcsetattr(fd,TCSANOW,&amp;options) != 0)   <br />{ <br />	perror("SetupSerial 3");   <br />	return (FALSE);  <br />} <br />return (TRUE);  <br />}<br /></pre><p><b>需要注意的是:</b></p><p>如果不是开发终端之类的，只是串口传输数据，而不需要串口来处理，那么使用原始模式(Raw Mode)方式来通讯，设置方式如下： <br /></p><pre class="displaycode">options.c_lflag  &amp;= ~(ICANON | ECHO | ECHOE | ISIG);  /*Input*/<br />options.c_oflag  &amp;= ~OPOST;   /*Output*/<br /></pre><p><a name="N10200"><span class="atitle">读写串口</span></a></p><p>
设置好串口之后，读写串口就很容易了，把串口当作文件读写就是。
</p>
      发送数据<br /><pre class="displaycode">char  buffer[1024];int    Length;int    nByte;nByte = write(fd, buffer ,Length)<br /></pre>读取串口数据
          <p>使用文件操作read函数读取，如果设置为原始模式(Raw Mode)传输数据，那么read函数返回的字符数是实际串口收到的字符数。
</p><p>可以使用操作文件的函数来实现异步读取，如fcntl，或者select等来操作。 <br /></p><pre class="displaycode">char  buff[1024];int    Len;int  readByte = read(fd,buff,Len);<br /></pre><p><a name="N10220"><span class="atitle">关闭串口</span></a></p><p>
关闭串口就是关闭文件。 <br /></p><pre class="displaycode">close(fd);</pre><img src ="http://www.cppblog.com/guangping/aggbug/66914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guangping/" target="_blank">王光平</a> 2009-06-28 23:16 <a href="http://www.cppblog.com/guangping/archive/2009/06/28/66914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VI命令一览表</title><link>http://www.cppblog.com/guangping/archive/2008/08/21/59516.html</link><dc:creator>王光平</dc:creator><author>王光平</author><pubDate>Thu, 21 Aug 2008 05:08:00 GMT</pubDate><guid>http://www.cppblog.com/guangping/archive/2008/08/21/59516.html</guid><wfw:comment>http://www.cppblog.com/guangping/comments/59516.html</wfw:comment><comments>http://www.cppblog.com/guangping/archive/2008/08/21/59516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guangping/comments/commentRss/59516.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guangping/services/trackbacks/59516.html</trackback:ping><description><![CDATA[
		<strong>
				<font color="#ff0000" size="5">VI命令一览表：</font>
		</strong>
		<span>
				<p>
						<strong>
						</strong>
						<br />
						<span style="FONT-WEIGHT: bold">进入vi的命令</span>
						<br />
						<font color="#0000ff">
								<font color="#000000">vi filename :打开或新建文件，并将光标置于第一行首</font>
								<br />
						</font>vi <font color="#ff6600">+n</font> filename ：打开文件，并将光标置于<font color="#ff6600">第n行首</font><br />vi <font color="#ff6600">+</font> filename ：打开文件，并将光标置于<font color="#ff6600">最后一行首</font><br />vi <font color="#ff6600">+/pattern</font> filename：打开文件，并将光标置于第一个与<font color="#ff6600">pattern匹配的串</font>处 <br />vi <font color="#ff6600">-r</font> filename ：在上次正用vi编辑时发生系统崩溃，<font color="#ff6600">恢复</font>filename <br />vi filename....filename ：打开多个文件，依次进行编辑 <br /><br /><span style="FONT-WEIGHT: bold">移动光标类命令</span><br />h 或 Backspace：：   光标左移一个字符 <br />l  或 space：：           光标右移一个字符 <br />k 或 Ctrl+p：              光标上移一行 <br />j 或  Enter 或 Ctrl+n ：光标下移一行 </p>
				<p>
						<br />w ：                   光标右移一个字至字首 </p>
				<p>W ：光标右移一个字至字首，忽略标点符号<br />b 或 B ：                    光标左移一个字至字首 <br />e 或 E ：                    光标右移一个字至字尾 </p>
				<p>
						<br />) ：光标移至句尾 <br />( ：光标移至句首 <br />}：光标移至段落开头 <br />{：光标移至段落结尾 </p>
				<p>
						<br />nG：光标移至第n行首 <br />n+：光标下移n行 <br />n-：光标上移n行 <br />n$：光标移至第n行尾 <br />H ：光标移至屏幕顶行 <br />M ：光标移至屏幕中间行 <br />L ：光标移至屏幕最后行 <br />0：（注意是数字零）光标移至当前行首 <br />$：光标移至当前行尾 <br /><br /><span style="FONT-WEIGHT: bold">屏幕翻滚类命令</span><br />Ctrl+u： 向文件首翻半屏 <br />Ctrl+d： 向文件尾翻半屏 <br />Ctrl+f：   向文件尾翻一屏 <br />Ctrl＋b；向文件首翻一屏 <br />nz：        将第n行滚至屏幕顶部，不指定n时将当前行滚至屏幕顶部。 <br /><br /><span style="FONT-WEIGHT: bold">插入文本类命令</span><br />i ：在光标前 <br />I ：在当前行首 <br />a：光标后 <br />A：在当前行尾 <br />o：在当前行之下新开一行 <br />O：在当前行之上新开一行 <br />r：替换当前字符 <br />R：替换当前字符及其后的字符，直至按ESC键 <br />s：从当前光标位置处开始，以输入的文本替代指定数目的字符 <br />S：删除指定数目的行，并以所输入文本代替之 <br />ncw或nCW：修改指定数目的字 <br />nCC：修改指定数目的行 <br /><br /><span style="FONT-WEIGHT: bold">删除命令</span><br />ndw或ndW：删除光标处开始及其后的n-1个字 <br />do：删至行首 <br />d$：删至行尾 <br />ndd：删除当前行及其后n-1行 <br />x或X：删除一个字符，x删除光标后的，而X删除光标前的 <br />Ctrl+u：删除输入方式下所输入的文本 <br /><br /><span style="FONT-WEIGHT: bold">搜索及替换命令</span><br />/pattern：从光标开始处向文件尾搜索pattern <br />?pattern：从光标开始处向文件首搜索pattern <br />n：在同一方向重复上一次搜索命令 <br />N：在反方向上重复上一次搜索命令 <br />：s/p1/p2/g：将当前行中所有p1均用p2替代 <br />：n1,n2s/p1/p2/g：将第n1至n2行中所有p1均用p2替代 <br />：g/p1/s//p2/g：将文件中所有p1均用p2替换 <br /><br /><span style="FONT-WEIGHT: bold">选项设置</span><br />all：列出所有选项设置情况 <br />term：设置终端类型 <br />ignorance：在搜索中忽略大小写 <br />list：显示制表位(Ctrl+I)和行尾标志（$) <br />number：显示行号 <br />report：显示由面向行的命令修改过的数目 <br />terse：显示简短的警告信息 <br />warn：在转到别的文件时若没保存当前文件则显示NO write信息 <br />nomagic：允许在搜索模式中，使用前面不带“\”的特殊字符 <br />nowrapscan：禁止vi在搜索到达文件两端时，又从另一端开始 <br />mesg：允许vi显示其他用户用write写到自己终端上的信息 <br /><br /><span style="FONT-WEIGHT: bold">末行方式命令</span><br />：n1,n2 co n3：将n1行到n2行之间的内容拷贝到第n3行下 <br />：n1,n2 m n3：将n1行到n2行之间的内容移至到第n3行下 <br />：n1,n2 d ：将n1行到n2行之间的内容删除 <br />：w ：保存当前文件 <br />：e filename：打开文件filename进行编辑 <br />：x：保存当前文件并退出 <br />：q：退出vi <br />：q!：不保存文件并退出vi <br />：!command：执行shell命令command <br />：n1,n2 w!command：将文件中n1行至n2行的内容作为command的输入并执行之，若不指定n1，n2，则表示将整个文件内容作为command的输入 <br />：r!command：将命令command的输出结果放到当前行 <br /><br /><span style="FONT-WEIGHT: bold">寄存器操作</span><br />"?nyy：将当前行及其下n行的内容保存到寄存器？中，其中?为一个字母，n为一个数字 <br />"?nyw：将当前行及其下n个字保存到寄存器？中，其中?为一个字母，n为一个数字 <br />"?nyl：将当前行及其下n个字符保存到寄存器？中，其中?为一个字母，n为一个数字 <br />"?p：取出寄存器？中的内容并将其放到光标位置处。这里？可以是一个字母，也可以是一个数字 <br />ndd：将当前行及其下共n行文本删除，并将所删内容放到1号删除寄存器中。</p>
		</span>
		<p>
				<span>
				</span>
		</p>
		<span>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span style="COLOR: blue">
								<strong>光标控制命令</strong>
						</span>
						<span style="COLOR: blue">
						</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>
						</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>命令</span>
						<span>
								<span>
								</span>
						</span>
						<span>光标移动</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>h</span>
						<span>或</span>
						<span>^h<span></span></span>
						<span>向左移一个字符</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>j</span>
						<span>或</span>
						<span>^j</span>
						<span>或</span>
						<span>^n<span></span></span>
						<span>向下移一行</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>k</span>
						<span>或</span>
						<span>^p<span></span></span>
						<span>向上移一行</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>l</span>
						<span>或空格</span>
						<span>
								<span>
								</span>
						</span>
						<span>向右移一个字符</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>G<span></span></span>
						<span>移到文件的最后一行</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>nG<span></span></span>
						<span>移到文件的第</span>
						<span>n</span>
						<span>行</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>w<span></span></span>
						<span>移到下一个字的开头</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>W<span></span></span>
						<span>移到下一个字的开头，忽略标点符号</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>b<span></span></span>
						<span>移到前一个字的开头</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>B<span></span></span>
						<span>移到前一个字的开头，忽略标点符号</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>L<span></span></span>
						<span>移到屏幕的最后一行</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>M<span></span></span>
						<span>移到屏幕的中间一行</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>H<span></span></span>
						<span>移到屏幕的第一行</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>e<span></span></span>
						<span>移到下一个字的结尾</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>E<span></span></span>
						<span>移到下一个字的结尾，忽略标点符号</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>(<span></span></span>
						<span>移到句子的开头</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>)<span></span></span>
						<span>移到句子的结尾</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>{<span></span></span>
						<span>移到段落的开头</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>}<span></span></span>
						<span>移到下一个段落的开头</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>0</span>
						<span>或</span>
						<span>|<span></span></span>
						<span>移到当前行的第一列</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>n|<span></span></span>
						<span>移到当前行的第</span>
						<span>n</span>
						<span>列</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>^<span></span></span>
						<span>移到当前行的第一个非空字符</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>＄<span></span></span>
						<span>移到当前行的最后一个字符</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>+</span>
						<span>或</span>
						<span>return<span></span></span>
						<span>移到下一行的第一个字符</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>-<span></span></span>
						<span>移到前一行的第一个非空字符</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>
						</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>
						</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<strong>
								<span style="COLOR: blue">在</span>
								<span style="COLOR: blue">vi</span>
								<span style="COLOR: blue">中添加文本</span>
						</strong>
						<span style="COLOR: blue">
						</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>
						</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>命令</span>
						<span>
								<span>
								</span>
						</span>
						<span>插入动作</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>a<span></span></span>
						<span>在光标后插入文本</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>A<span></span></span>
						<span>在当前行插入文本</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>i<span></span></span>
						<span>在光标前插入文本</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>I<span></span></span>
						<span>在当前行前插入文本</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>o<span></span></span>
						<span>在当前行的下边插入新行</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>O<span></span></span>
						<span>在当前行的上边插入新行</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>:r file<span></span></span>
						<span>读入文件</span>
						<span>file</span>
						<span>内容，并插在当前行后</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>:nr file<span></span></span>
						<span>读入文件</span>
						<span>file</span>
						<span>内容，并插在第</span>
						<span>n</span>
						<span>行后</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>escape<span></span></span>
						<span>回到命令模式</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>^v char<span></span></span>
						<span>插入时忽略</span>
						<span>char</span>
						<span>的指定意义，这是为了插入特殊字符</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>
						</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>
						</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<strong>
								<span style="COLOR: blue">在</span>
								<span style="COLOR: blue">vi</span>
								<span style="COLOR: blue">中删除文本</span>
						</strong>
						<span style="COLOR: blue">
						</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>
						</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>命令</span>
						<span>
								<span>
								</span>
						</span>
						<span>删除操作</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>x<span></span></span>
						<span>删除光标处的字符，可以在</span>
						<span>x</span>
						<span>前加上需要删除的字符数目</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>nx<span></span></span>
						<span>从当前光标处往后删除</span>
						<span>n</span>
						<span>个字符</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>X<span></span></span>
						<span>删除光标前的字符，可以在</span>
						<span>X</span>
						<span>前加上需要删除的字符数目</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>nX<span></span></span>
						<span>从当前光标处往前删除</span>
						<span>n</span>
						<span>个字符</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>dw<span></span></span>
						<span>删至下一个字的开头</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>ndw<span></span></span>
						<span>从当前光标处往后删除</span>
						<span>n</span>
						<span>个字</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>dG<span></span></span>
						<span>删除行，直到文件结束</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>dd<span></span></span>
						<span>删除整行</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>ndd<span></span></span>
						<span>从当前行开始往后删除</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>db<span></span></span>
						<span>删除光标前面的字</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>ndb<span></span></span>
						<span>从当前行开始往前删除</span>
						<span>n</span>
						<span>字</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>:n,md<span></span></span>
						<span>从第</span>
						<span>m</span>
						<span>行开始往前删除</span>
						<span>n</span>
						<span>行</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>d</span>
						<span>或</span>
						<span>d＄<span></span></span>
						<span>从光标处删除到行尾</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>dcursor_command<span></span></span>
						<span>删除至光标命令处，如</span>
						<span>dG</span>
						<span>将从当产胆行删除至文件的末尾</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>^h</span>
						<span>或</span>
						<span>backspace<span></span></span>
						<span>插入时，删除前面的字符</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>^w<span></span><span></span></span>
						<span>插入时，删除前面的字</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>
						</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>
						</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<strong>
								<span style="COLOR: blue">修改</span>
								<span style="COLOR: blue">vi</span>
								<span style="COLOR: blue">文本</span>
						</strong>
						<span style="COLOR: blue">
						</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>
						</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>每个命令前面的数字表示该命令重复的次数</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>命令</span>
						<span>
								<span>
								</span>
						</span>
						<span>替换操作</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>rchar<span></span></span>
						<span>用</span>
						<span>char</span>
						<span>替换当前字符</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>R text escape<span></span></span>
						<span>用</span>
						<span>text</span>
						<span>替换当前字符直到换下</span>
						<span>Esc</span>
						<span>键</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>stext escape<span></span></span>
						<span>用</span>
						<span>text</span>
						<span>代替当前字符</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>S</span>
						<span>或</span>
						<span>cctext escape<span></span></span>
						<span>用</span>
						<span>text</span>
						<span>代替整行</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>cwtext escape<span></span></span>
						<span>将当前字改为</span>
						<span>text</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>Ctext escape<span></span></span>
						<span>将当前行余下的改为</span>
						<span>text</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>cG escape<span></span></span>
						<span>修改至文件的末尾</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>ccursor_cmd text escape<span></span></span>
						<span>从当前位置处到光标命令位置处都改为</span>
						<span>text</span>
				</p>
				<p style="MARGIN: 0cm 0cm 0pt">
						<span>
						</span>
				</p>
				<span>
						<p style="MARGIN: 0cm 0cm 0pt">
								<strong>
										<span style="COLOR: blue">在</span>
										<span style="COLOR: blue">vi</span>
										<span style="COLOR: blue">中查找与替换</span>
								</strong>
								<span style="COLOR: blue">
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>命令</span>
								<span>
										<span>
										</span>
								</span>
								<span>查找与替换操作</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>/text<span></span></span>
								<span>在文件中向前查找</span>
								<span>text</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>?text<span></span></span>
								<span>在文件中向后查找</span>
								<span>text</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>n<span></span></span>
								<span>在同一方向重复查找</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>N<span></span></span>
								<span>在相反方向重复查找</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>ftext<span></span></span>
								<span>在当前行向前查找</span>
								<span>text</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>Ftext<span></span></span>
								<span>在当前行向后查找</span>
								<span>text</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>ttext<span></span></span>
								<span>在当前行向前查找</span>
								<span>text</span>
								<span>，并将光标定位在</span>
								<span>text</span>
								<span>的第一个字符</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>Ttext<span></span></span>
								<span>在当前行向后查找</span>
								<span>text</span>
								<span>，并将光标定位在</span>
								<span>text</span>
								<span>的第一个字符</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:set ic<span></span></span>
								<span>查找时忽略大小写</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:set noic<span></span></span>
								<span>查找时对大小写敏感</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
										<strong>
												<font face="新宋体">:</font>
										</strong>
										<em>range</em>
										<font face="新宋体">s/</font>
										<em>pat1</em>
										<font face="新宋体">/</font>
										<em>pat2</em>
										<font face="新宋体">/g</font>
										<span>
										</span>
								</span>
								<span>用</span>
								<span>newtext</span>
								<span>替换</span>
								<span>oldtext</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:m,ns/oldtext/newtext<span></span></span>
								<span>在</span>
								<span>m</span>
								<span>行通过</span>
								<span>n</span>
								<span>，用</span>
								<span>newtext</span>
								<span>替换</span>
								<span>oldtext</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>&amp;<span></span></span>
								<span>重复最后的</span>
								<span>:s</span>
								<span>命令</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:g/text1/s/text2/text3<span></span></span>
								<span>查找包含</span>
								<span>text1</span>
								<span>的行，用</span>
								<span>text3</span>
								<span>替换</span>
								<span>text2</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:g/text/command<span></span></span>
								<span>在所有包含</span>
								<span>text</span>
								<span>的行运行</span>
								<span>command</span>
								<span>所表示的命令</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:v/text/command<span></span></span>
								<span>在所有不包含</span>
								<span>text</span>
								<span>的行运行</span>
								<span>command</span>
								<span>所表示的命令</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<strong>
										<span style="COLOR: blue">在</span>
										<span style="COLOR: blue">vi</span>
										<span style="COLOR: blue">中复制文本</span>
								</strong>
								<span style="COLOR: blue">
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>命令</span>
								<span>
										<span>
										</span>
								</span>
								<span>复制操作</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>yy<span></span></span>
								<span>将当前行的内容放入临时缓冲区</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>nyy<span></span></span>
								<span>将</span>
								<span>n</span>
								<span>行的内容放入临时缓冲区</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>p<span></span></span>
								<span>将临时缓冲区中的文本放入光标后</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>P<span></span></span>
								<span>将临时缓冲区中的文本放入光标前</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>"(a-z)nyy<span></span></span>
								<span>复制</span>
								<span>n</span>
								<span>行放入名字为圆括号内的可命名缓冲区，省略</span>
								<span>n</span>
								<span>表示当前行</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>"(a-z)ndd<span></span></span>
								<span>删除</span>
								<span>n</span>
								<span>行放入名字为圆括号内的可命名缓冲区，省略</span>
								<span>n</span>
								<span>表示当前行</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>"(a-z)p<span></span></span>
								<span>将名字为圆括号的可命名缓冲区的内容放入当前行后</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>"(a-z)P<span></span></span>
								<span>将名字为圆括号的可命名缓冲区的内容放入当前行前</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<strong>
										<span style="COLOR: blue">在</span>
										<span style="COLOR: blue">vi</span>
										<span style="COLOR: blue">中撤消与重复</span>
								</strong>
								<span style="COLOR: blue">
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>命令</span>
								<span>
										<span>
										</span>
								</span>
								<span>撤消操作</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>u<span></span></span>
								<span>撤消最后一次修改</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>U<span></span></span>
								<span>撤消当前行的所有修改</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>.<span></span></span>
								<span>重复最后一次修改</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>,<span></span></span>
								<span>以相反的方向重复前面的</span>
								<span>f</span>
								<span>、</span>
								<span>F</span>
								<span>、</span>
								<span>t</span>
								<span>或</span>
								<span>T</span>
								<span>查找命令</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>;<span></span></span>
								<span>重复前面的</span>
								<span>f</span>
								<span>、</span>
								<span>F</span>
								<span>、</span>
								<span>t</span>
								<span>或</span>
								<span>T</span>
								<span>查找命令</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>"np<span></span></span>
								<span>取回最后第</span>
								<span>n</span>
								<span>次的删除</span>
								<span>(</span>
								<span>缓冲区中存有一定次数的删除内容，一般为</span>
								<span>9)</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>n<span></span></span>
								<span>重复前面的</span>
								<span>/</span>
								<span>或</span>
								<span>?</span>
								<span>查找命令</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>N<span></span></span>
								<span>以相反方向重复前面的</span>
								<span>/</span>
								<span>或</span>
								<span>?</span>
								<span>命令</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<strong>
										<span style="COLOR: blue">保存文本和退出</span>
										<span style="COLOR: blue">vi</span>
								</strong>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>命令</span>
								<span>
										<span>
										</span>
								</span>
								<span>保存和</span>
								<span>/</span>
								<span>或退出操作</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:w<span></span></span>
								<span>保存文件但不退出</span>
								<span>vi</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:w file<span></span></span>
								<span>将修改保存在</span>
								<span>file</span>
								<span>中但不退出</span>
								<span>vi</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:wq</span>
								<span>或</span>
								<span>ZZ</span>
								<span>或</span>
								<span>:x<span></span></span>
								<span>保存文件并退出</span>
								<span>vi</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:q!<span></span></span>
								<span>不保存文件，退出</span>
								<span>vi</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:e!<span></span></span>
								<span>放弃所有修改，从上次保存文件开始再编辑</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<strong>
										<span style="COLOR: blue">vi</span>
										<span style="COLOR: blue">中的选项</span>
								</strong>
								<span style="COLOR: blue">
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>选项</span>
								<span>
										<span>
										</span>
								</span>
								<span>作用</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:set all<span></span></span>
								<span>打印所有选项</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:set nooption<span></span></span>
								<span>关闭</span>
								<span>option</span>
								<span>选项</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:set nu<span></span></span>
								<span>每行前打印行号</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:set showmode<span></span></span>
								<span>显示是输入模式还是替换模式</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:set noic<span></span></span>
								<span>查找时忽略大小写</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:set list<span></span></span>
								<span>显示制表符</span>
								<span>(^I)</span>
								<span>和行尾符号</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:set ts=8<span></span></span>
								<span>为文本输入设置</span>
								<span>tab stops</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:set window=n<span></span></span>
								<span>设置文本窗口显示</span>
								<span>n</span>
								<span>行</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:syntax on                 语法加亮<br /></span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span style="COLOR: blue">
										<br />
										<br />
										<br />
								</span>
								<span style="COLOR: blue">
										<strong>VI的状态</strong>
								</span>
								<span style="COLOR: blue">
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>选项</span>
								<span>
										<span>
										</span>
								</span>
								<span>作用</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:.=<span></span></span>
								<span>打印当前行的行号</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:=<span></span></span>
								<span>打印文件中的行数</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>^g<span></span></span>
								<span>显示文件名、当前的行号、文件的总行数和文件位置的百分比</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>:l<span></span></span>
								<span>使用字母</span>
								<span>"l"</span>
								<span>来显示许多的特殊字符，如制表符和换行符</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span style="COLOR: blue">
										<strong>在文本中定位段落和放置标记</strong>
								</span>
								<span style="COLOR: blue">
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>选项</span>
								<span>
										<span>
										</span>
								</span>
								<span>作用</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>{<span></span></span>
								<span>在第一列插入</span>
								<span>{</span>
								<span>来定义一个段落</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>[[<span></span></span>
								<span>回到段落的开头处</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>]]<span></span></span>
								<span>向前移到下一个段落的开头处</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>m(a-z)<span></span></span>
								<span>用一个字母来标记当前位置，如用</span>
								<span>mz</span>
								<span>表示标记</span>
								<span>z</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>'(a-z)<span></span></span>
								<span>将光标移动到指定的标记，如用</span>
								<span>'z</span>
								<span>表示移动到</span>
								<span>z</span>
						</p>
						<p style="MARGIN: 0cm 0cm 0pt">
								<span>
								</span>
						</p>
						<span>
								<p style="MARGIN: 0cm 0cm 0pt">
										<strong>
												<span style="COLOR: blue">在</span>
												<span style="COLOR: blue">vi</span>
												<span style="COLOR: blue">中连接行</span>
										</strong>
										<span style="COLOR: blue">
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>选项</span>
										<span>
												<span>
												</span>
										</span>
										<span>作用</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>J<span></span></span>
										<span>将下一行连接到当前行的末尾</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>nJ<span></span></span>
										<span>连接后面</span>
										<span>n</span>
										<span>行</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span style="COLOR: blue">
												<strong>光标放置与屏幕调整</strong>
										</span>
										<span style="COLOR: blue">
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>选项</span>
										<span>
												<span>
												</span>
										</span>
										<span>作用</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>H<span></span><span></span></span>
										<span>将光标移动到屏幕的顶行</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>nH<span></span><span></span></span>
										<span>将光标移动到屏幕顶行下的第</span>
										<span>n</span>
										<span>行</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>M<span></span><span></span></span>
										<span>将光标移动到屏幕的中间</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>L<span></span><span></span></span>
										<span>将光标移动到屏幕的底行</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>nL<span></span><span></span></span>
										<span>将光标移动到屏幕底行上的第</span>
										<span>n</span>
										<span>行</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>^e(ctrl+e)<span></span></span>
										<span>将屏幕上滚一行</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>^y<span></span><span></span></span>
										<span>将屏幕下滚一行</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>^u<span></span><span></span></span>
										<span>将屏幕上滚半页</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>^d<span></span><span></span></span>
										<span>将屏幕下滚半页</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>^b<span></span><span></span></span>
										<span>将屏幕上滚一页</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>^f<span></span><span></span></span>
										<span>将屏幕下滚一页</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>^l<span></span><span></span></span>
										<span>重绘屏幕</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>z-return<span></span><span></span></span>
										<span>将当前行置为屏幕的顶行</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>nz-return<span></span><span></span></span>
										<span>将当前行下的第</span>
										<span>n</span>
										<span>行置为屏幕的顶行</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>z.<span></span><span></span></span>
										<span>将当前行置为屏幕的中央</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>nz.<span></span><span></span></span>
										<span>将当前行上的第</span>
										<span>n</span>
										<span>行置为屏幕的中央</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>z-<span></span><span></span></span>
										<span>将当前行置为屏幕的底行</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>nz-<span></span><span></span></span>
										<span>将当前行上的第</span>
										<span>n</span>
										<span>行置为屏幕的底行</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<strong>
												<span style="COLOR: blue">vi</span>
												<span style="COLOR: blue">中的</span>
												<span style="COLOR: blue">shell</span>
												<span style="COLOR: blue">转义命令</span>
										</strong>
										<span style="COLOR: blue">
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>选项</span>
										<span>
												<span>
												</span>
										</span>
										<span>作用</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>:!command<span></span></span>
										<span>执行</span>
										<span>shell</span>
										<span>的</span>
										<span>command</span>
										<span>命令，如</span>
										<span>:!ls</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>:!!<span></span><span></span></span>
										<span>执行前一个</span>
										<span>shell</span>
										<span>命令</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>:r!command<span></span></span>
										<span>读取</span>
										<span>command</span>
										<span>命令的输入并插入，如</span>
										<span>:r!ls</span>
										<span>会先执行</span>
										<span>ls</span>
										<span>，然后读入内容</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>:w!command<span></span></span>
										<span>将当前已编辑文件作为</span>
										<span>command</span>
										<span>命令的标准输入并执行</span>
										<span>command</span>
										<span>命令，如</span>
										<span>:w!grep all</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>:cd directory<span></span></span>
										<span>将当前工作目录更改为</span>
										<span>directory</span>
										<span>所表示的目录</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>:sh<span></span><span></span></span>
										<span>将启动一个子</span>
										<span>shell</span>
										<span>，使用</span>
										<span>^d(ctrl+d)</span>
										<span>返回</span>
										<span>vi</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>:so file<span></span><span></span></span>
										<span>在</span>
										<span>shell</span>
										<span>程序</span>
										<span>file</span>
										<span>中读入和执行命令</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<strong>
												<span style="COLOR: blue">vi</span>
												<span style="COLOR: blue">中的宏与缩写</span>
										</strong>
										<span style="COLOR: blue">
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>(</span>
										<span>避免使用控制键和符号，不要使用字符</span>
										<span>K</span>
										<span>、</span>
										<span>V</span>
										<span>、</span>
										<span>g</span>
										<span>、</span>
										<span>q</span>
										<span>、</span>
										<span>v</span>
										<span>、</span>
										<span>*</span>
										<span>、</span>
										<span>=</span>
										<span>和功能键</span>
										<span>)</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>选项</span>
										<span>
												<span>
												</span>
												<span>
												</span>
										</span>
										<span>作用</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt 125.8pt; TEXT-INDENT: -125.8pt">
										<span>:map key command_seq<span></span></span>
										<span>定义一个键来运行</span>
										<span>command_seq</span>
										<span>，如</span>
										<span>:map e ea</span>
										<span>，无论什么时候都可以</span>
										<span>e</span>
										<span>移到一个字的末尾来追加文本</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>:map<span></span><span></span></span>
										<span>在状态行显示所有已定义的宏</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>:umap key<span></span><span></span></span>
										<span>删除该键的宏</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt 126pt; TEXT-INDENT: -125.8pt">
										<span>:ab string1 string2<span></span></span>
										<span>定义一个缩写，使得当插入</span>
										<span>string1</span>
										<span>时，用</span>
										<span>string2</span>
										<span>替换</span>
										<span>string1</span>
										<span>。当要插入文本时，键入</span>
										<span>string1</span>
										<span>然后按</span>
										<span>Esc</span>
										<span>键，系统就插入了</span>
										<span>string2</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>:ab<span></span><span></span></span>
										<span>显示所有缩写</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>:una string<span></span><span></span></span>
										<span>取消</span>
										<span>string</span>
										<span>的缩写</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<strong>
												<span style="COLOR: blue">在</span>
												<span style="COLOR: blue">vi</span>
												<span style="COLOR: blue">中缩进文本</span>
										</strong>
										<span style="COLOR: blue">
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>
										</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>选项</span>
										<span>
												<span>
												</span>
												<span>
												</span>
										</span>
										<span>作用</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>^i(ctrl+i)</span>
										<span>或</span>
										<span>tab<span></span><span></span></span>
										<span>插入文本时，插入移动的宽度，移动宽度是事先定义好的</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>:set ai<span></span><span></span></span>
										<span>打开自动缩进</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>:set sw=n<span></span><span></span></span>
										<span>将移动宽度设置为</span>
										<span>n</span>
										<span>个字符</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt">
										<span>n&lt;&amp;lt;<span></span><span></span></span>
										<span>使</span>
										<span>n</span>
										<span>行都向左移动一个宽度</span>
								</p>
								<p style="MARGIN: 0cm 0cm 0pt 125.8pt; TEXT-INDENT: -125.8pt">
										<span>n&gt;&gt;<span></span></span>
										<span>使</span>
										<span>n</span>
										<span>行都向右移动一个宽度，例如</span>
										<span>3&gt;&gt;</span>
										<span>就将接下来的三行每行都向右移动一个移动宽度</span>
								</p>
						</span>
				</span>
		</span>
<img src ="http://www.cppblog.com/guangping/aggbug/59516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guangping/" target="_blank">王光平</a> 2008-08-21 13:08 <a href="http://www.cppblog.com/guangping/archive/2008/08/21/59516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>选择GPL还是BSD?</title><link>http://www.cppblog.com/guangping/archive/2008/02/18/42909.html</link><dc:creator>王光平</dc:creator><author>王光平</author><pubDate>Mon, 18 Feb 2008 12:51:00 GMT</pubDate><guid>http://www.cppblog.com/guangping/archive/2008/02/18/42909.html</guid><wfw:comment>http://www.cppblog.com/guangping/comments/42909.html</wfw:comment><comments>http://www.cppblog.com/guangping/archive/2008/02/18/42909.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guangping/comments/commentRss/42909.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guangping/services/trackbacks/42909.html</trackback:ping><description><![CDATA[本文介绍了当今两个比较流行的软件授权协议：GPL和BSD，让大家对这两个协议有比较透彻的了解。<br /><br />1.简介<br /><br />　　什么是GPL软件授权许可证？<br /><br />　
　GNU通用公共许可证(GPL,The GNU General Public
License)的全文非常烦琐冗长，其主要宗旨是在程序员社区内保证和促进可以连续自由和开放地保证软件源代码的共享。它的出现混淆了"free"和
"freedom"的含义，因为其实际上限制了那些不希望开放共享那些从GPL授权的软件进行二次开发的程序员的自由。Rick
Holbert建议我们使用解放软件(liberated software)这个名词来替代自由软件(free
software)这个名词。但这仍然使我感到迷惑，因为GNU软件并不是真正的解放软件，其实你并不能任意处理GPL软件的源代码，但是"解放"这个词
仍然要比"自由"这个词来的准确一些。GPL许可证强迫用户将对开放共享的GPL软件的修改后的源代码继续公开。因此，GPL保证了那些软件使用者自由的
连续性，而不是那些修改软件的程序员。如果仔细分析可以发现，GPL有一些令人混淆的地方，一方面它保证了以后软件"接受者"的自由，而剥夺了软件开发者
任意处置自己编写的代码的权利。总的来说，对于那些希望将自己的软件贡献出来的人来GPL是令人满意的，因为在GPL授权许可下，软件在整个开发中都保证
了源码的开放和所有的人都可以使用和添加修改软件。 <br /><br />　　但是从商业角度来说，当然是希望使用那些可以可以关闭源码共享的软件，因为你
往往是希望根据其开发一个具有潜在价值的产品。如果你关闭了具有价值的软件的源码，并且对其进行改进和二次开发，使其具有更高的价值，这样你才能向那些没
有能力自行开发的软件使用者使收费，那么你就应该考虑使用具有BSD授权许可的软件作为起点。 <br /><br />　　考虑另外一种情况下，如果你更着重
于服务而不是软件产品，那么GPL软件对你来说就没有什么缺陷了。例如，IBM在其各种服务器中使用Linux。如果你是在GPL软件平台之上开发一个商
业软件，你也不必担心GPL对你的影响。另外，任何从头开发的软件或者是使用BSD软件作为基础来开发的软件，你都可以封闭自己的源代码。仍然有很多方法
可以利用GPL软件而不威胁你的商务活动。一般来说客户并不真正关心事情是如何完成的，他们仅仅关心事情完成的结果。一个最好的例子是在最流行的桌面操作
系统之上运行的各种软件，使用这些糟糕的软件的用户中99%都不知道，也不关心他们使用的软件是如何的垃圾和糟糕。只要看看用户是如何乐于下载和安装那些
号称是最可靠和稳定的保证向后兼容的操作系统的补丁就可以理解这一点了。为什么一开始这些操作系统不能保证稳定和可靠的呢？并且如果最稳定和可靠的当前版
本仍然时常崩溃并且有巨多的bug，那么以前的版本是不是垃圾呢？我一直在对人们强调那些比垃圾更加稳定和可靠的东西，实际上仍然是垃圾，只不过是稍稍更
加稳定和可靠一些罢了。这并没有太多的意义。在商业上，重要的不是被卖的产品的可靠性和稳定性，如果你能满足使用者的最低要求，并且你能以便宜的价格占有
主要市场，或者你能实现垄断，并且对用户进行洗脑宣传，大量进行广告金钱宣传，那么你的产品就是最"棒"的。如果你由于商业的原因害怕GPL许可证，那么
你可能并没有足够地深入和仔细地考虑你的商业模型。在US最流行的Linux发布并不是最好的，其缺乏很多应该具有的特色，但是它仍然是最流行的，因为它
已经占有了市场，并且每次版本升级其产品都有改进，这样使得它们的客户感的很开心，即使用户并不知道软件实际上应该有多好。<br /><br />2.什么是BSD授权许可证？<br /><br />　
　BSD授权许可证(FreeBSD Copyright
Information)具有多种授权许可证。总的来说你可以对软件任意处理，只要你在软件中注明其是来自于那个项目的就可以了。也就是说你具有更大的自
由度来处置软件。如果你对软件进行了修改，你可以限制其他使用者得到你修改的软件的自由。<br /><br />　　BSD授权许可证没有实现"通透性"自由，也就是其不保证软件源代码开放的连续性。这样如果你希望采用别人开发的BSD软件，进行一些修改，然后作为产品卖，或者仅仅保密自己的做的一些除了软件开发以外的工作，那么你就可以从中得利。<br /><br />　
　当一个非程序员仅仅理解一个程序的功能，但是不了解程序是如何做的时，即使你没有在开发软件中做任何工作那你就可以通过高超的市场技巧将软件卖给该用
户。比如拿最流行的桌面操作系统作为例子，你就能很好的理解一个没有很好的程序技巧的软件公司只要具有高超的市场营销策略同样可以将垃圾卖给客户。如果你
不具有很强大的编程能力，但是具有很强的市场能力和能将其他开发者的软件包括到自己的系统，而同时不将自己的修改开放出来将是非常强大的能力。从赚钱为目
的的商务角度看来，如果你使用了BSD授权许可证的软件，那么你就可以任意进行。你可以更好地控制你的OS系统，并且防止其他人拷贝你的商业产品。<br /><br />　　就我看来，只要是开放源码的东西，就都不是垃圾，因为只要是开放的其就可能被修改，发生变化；而一旦变成封闭源码的东西，它马上就成为了垃圾，因为我不知道它是如何实现的。所有BSD授权声明的开放源码的软件都是很棒的东西。 <br /><br />3.哪种更适合你？<br /><br />　
　有一个信念你是必须理解的：授权许可之间并没有好坏之分，除非你从你希望达到的目的的角度去看待问题。一个授权许可证是人们行为的基础，就象法规一样。
从商务角度来说，美国有一个非常棒的政府，因为这里是金钱统治一切；从人性角度看来，其他政府可能更具有理想主义一些。但是如果他们实现了他们人民希望达
到的目标，它们之间是没有好坏之分的。如果授权许可证保证了你希望的目标，那么它对你来说就是好的，但是对于其他人来说可能并不是如此，但是你可能往往不
会关心别人对该授权许可证的看法。因此，只有白痴才会认为一种授权许可证比另外一种授权许可更好。一旦我们知道了你创造程序的目标，那么我们就可以判断你
的软件更适合使用哪种授权许可。<br /><br />　　无论什么时候我和BSD人们交谈，他们往往也承认GPL是一个不错的东西。怎么会这样呢？正如前面讨
论的那样，授权许可是为人们来使用的。没有人强迫你对你的软件使用GPL或者是BSD授权许可。因此如果你选择使用GPL作为自己创造的软件的授权许可，
那么不要在意人们对源代码具有完全处理的权限。既然你选择了GPL，那么你就不应该在意，因为你没有希望从其他封闭授权的软件获利，因此你就不希望其他人
通过你的软件获利。GPL划定了游戏范围以保证每个人能平等地从同一个软件获利的权利。就象好的市场驱动竞争以促进商业发展一样，大家都有平等的权利但只
有最优秀的人可以获胜一样。同样一旦你选择了将自己的软件平等地给所有人共享。如果有人不想象别人那样共享代码，他可以选择投资几百万来开发自己的软件，
没有人会阻止他这么做。<br /><br />　　可以对软件定义若干种授权许可，例如Perl同时具有GPL授权许可和艺术性授权许可(Artistic
Licenses)。如果你希望你的软件和其他自由软件一起配合使用，那么你必须对其不仅仅定义GPL授权许可。但是GPL一般往往并不能和其他免费软件
授权许可很好的配合使用。<br /><br />　　自由软件社区对于GPL的一种批评是：它偷窃了自由(freedom)这个单词。问题是这样的：一个独裁者
有自由成为一个独裁者吗？答案：是可以的。自由和社区没有任何关系。自由意味着你可以在任何时候随意做你想做的任何事情。人们有自由选择不自由(have
the freedom not to be
free)。困扰我的一件事情是：虽然我从政治角度理解为什么他们要这么做，但是FSF和GPL这些人则倾向于重新按照他们希望的目的来定义自由的含义，
但其实他们只是看到了很狭义的自由的含义，而不是完全的自由。他们感兴趣的是在社区内部共享软件代码，而不是个人对自己的软件的任意处置的自由，例如将
GPL化的一段代码变成封闭代码等等。因此GPL本身从自由真正的含义上并没有真正地促进自由，而是限制了自由，仅仅保证了社区内共享代码的自由。我不喜
欢这些家伙，他们重新定义了自由的含义，而且如果你按照他们的意思定义自由他们往往就懒得答理你。但是我认为从政策意义上来说，他们是很好的，因为他强迫
人们考虑自由，大多数人没有时间去考虑自由的真正含义。<br /><br />　　那么对于BSD，它也是不坏的选择。它对于那些希望编写封闭代码程序的程序员是很有意义的。我理解为什么BSD授权许可这么有吸引力和它对于一些人为什么如此重要。但是也使我对从政治角度来看没有意义的BSD有了更深入的理解：<br /><br />　
　如果有人以BSD授权许可发布软件，那么别人就可以利用该软件创建一个封闭源码版本，他不必向任何人公开自己做了哪些修改。因此一个项目组可能花费数年
来开发一个很棒的软件，而一个人或一个公司则可能"偷窃"该软件，进行一些简单的二次开发并形成一个封闭源码的产品来盈利，却和原始开发者则可能没有从中
得到任何利益。我就是不能理解为什么这么多人这么辛苦的工作来努力使其他人成为百万富翁。GPL则组织这种事情的发生，它保证了软件开放性的连续和所有使
用者具有平等的权利。<br /><br />　　BSD授权许可危险性的一个明显的例子就是：它如何使一个病毒扩散到整个世界。只要看看Kerberos的情况
就可以了解情况是如何糟糕的。对于我自己来说，当一个邪恶的公司糟蹋了一个软件，那么就没有任何办法强迫它们和社会一起合作来改善情况，我个人是抵制所有
这些软件的。我不能承受担心相互之间不兼容的版本到处出现。Kerberos就是这样被糟蹋掉的，我永远不会再使用它。为什么说它被糟蹋了呢？被糟蹋的版
本到处都是，而且影响很大之间又不相互兼容。我不会花时间去使用这样的软件：知道有一天它会变成封闭源码的，但是而且会和我在使用的版本不兼容。对于我来
说不兼容性是非常糟糕的和不能接受的，如果我能避免使用这样的软件我一定不会使用它。<br /><br />　　既然GPL和BSD各有优缺点，那么哪个更适合你呢？其中一个，没有一个或者是都适合你。重要的是要理解授权许可的含义，如果你不重视结果，那么很好。虽然我不喜欢BSD授权声明适用于我的软件，但是如果你不介意别人利用你的软件获利那么BSD就是你的最好的选择。<br /><br />4.哪种更适合？<br /><br />　
　哪种更好一些？答案是两个一样好。然而我选择了GPL，为什么呢？我对于所有的自由软件都是非常的感激，我没有真正开发任何能被用来售卖的软件(我通常
使用Python来开发web脚本)。我为世界创造的任何东西我都希望在我之后有人能利用它和改进它，所以我选择了GPL。但是我从来没有对我的软件使用
BSD授权许可，因为我不希望那些不劳而获者利用我的软件来盈利，而隐藏对软件的修改。但是BSD授权许可对我来说好的一面是它是未来的一种选择，我不是
用它但是我很高兴它是一种选择。<br /><br />5.结论<br /><br />　　Anonymous
Coward有很好的结论：“我可以认真写一个很长的短文作为回应，但是大多数的读者可能希望有一个简单的概要：GPL授权许可有益于软件的解放，BSD
则有益于人的解放。对于GPL，确保了软件的发展拥有比软件开发者更多的自由；而对于BSD，保了软件开发者拥有比软件的发展更多的自由。“ <br /><br />　　我个人这样认为： <br /><br />GPL提倡和促进最终用户的自由 <br />BSD提倡程序开发者的自由。 <br />　
　总的来说，任何认为一种授权许可比另外一种好的人都是思想简单的人，他们不能理解他们仅仅从他们自己的角度考虑问题，而不是从别人的角度考虑问题。我希
望强调的是这些人应该被消灭，这样他们的DNA就不会传播，不会创造那种用另外的标准对待别人和做出判断的政客、将军和法官。<br /><br />　　我这里
严重的冒犯了那些在关于软件授权问题上为别人做决定的人，可能要稍微冒犯了那些让别人为自己做决定的人。我不介意有关授权许可是如何影响世界的理论，但是
不要宣称一种授权比另外一种好的，因为这是一种基于特定价值的选择而已，而不是一种事实。我接受这样的事实：你所考虑的对你来说随最合适的授权许可，但是
不一定是其他人的最佳选择。 <br /><br />　　参考资料<br /><br />　　感谢Rick Holbert的建议，使得我得以提高我的文章，使我明白被解放一词比自由一词更适合于讨论GPL。<br /><br />　　Slashdot有很多很好的文章给予我了很多的启迪。<br /><br />　　作者Mark Nielsen一个独立咨询者，给诸如GNUJobs.com等写评论文章，编写自由软件和在eastmont.net作为一个自愿者工作。<br /><br />作者：Mark Nielsen<br />编译：ideal<img src ="http://www.cppblog.com/guangping/aggbug/42909.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guangping/" target="_blank">王光平</a> 2008-02-18 20:51 <a href="http://www.cppblog.com/guangping/archive/2008/02/18/42909.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[Linux技术] 与用户账号有关的系统文件</title><link>http://www.cppblog.com/guangping/archive/2007/10/26/35240.html</link><dc:creator>王光平</dc:creator><author>王光平</author><pubDate>Fri, 26 Oct 2007 07:32:00 GMT</pubDate><guid>http://www.cppblog.com/guangping/archive/2007/10/26/35240.html</guid><wfw:comment>http://www.cppblog.com/guangping/comments/35240.html</wfw:comment><comments>http://www.cppblog.com/guangping/archive/2007/10/26/35240.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guangping/comments/commentRss/35240.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guangping/services/trackbacks/35240.html</trackback:ping><description><![CDATA[
		<table align="center" border="0" cellpadding="0" cellspacing="0" height="3863" width="749">
				<tbody>
						<tr>
								<td align="center" height="50" valign="bottom">
										<font size="4">
												<span class="tx_blue_14">[Linux技术] 与用户账号有关的系统文件</span>
												<span class="tx_red">
														<br />
												</span>
												<span class="tx_red style2">
														<span class="tx_hui">
																<br />
														</span>
												</span>
										</font>
								</td>
						</tr>
						<tr>
								<td height="8">
										<hr noshade="noshade" size="1" />
								</td>
						</tr>
						<tr>
								<td align="center">
										<font size="4">
												<br />
												<br />
												<br />
												<br />
										</font>
								</td>
						</tr>
						<tr valign="top">
								<td height="340" valign="top">
										<p>
												<font size="4">  完成用户管理的工作有许多种方法，但是每一种方法实际上都是对有关的系统文件进行修改。与用户和用户组相关的信息都存放在一些系统文件中，这些文件包括/etc/passwd, /etc/shadow, /etc/group等。 </font>
										</p>
										<p>
												<font size="4">
														<br />1 /etc/passwd</font>
										</p>
										<p>
												<font size="4">    /etc/passwd文件是用户管理工作涉及的最重要的一个文件。Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行，它记录了这个用户的一些基本属性。这个文件对所有用户都是可读的。它的内容类似下面的例子：</font>
										</p>
										<p>
												<font size="4">　　＃ cat /etc/passwd</font>
										</p>
										<p>
												<font size="4">　　root:x:0:0:Superuser:/:</font>
										</p>
										<p>
												<font size="4">　　daemon:x:1:1:System daemons:/etc:</font>
										</p>
										<p>
												<font size="4">　　bin:x:2:2:Owner of system commands:/bin:</font>
										</p>
										<p>
												<font size="4">　　sys:x:3:3:Owner of system files:/usr/sys:</font>
										</p>
										<p>
												<font size="4">　　adm:x:4:4:System accounting:/usr/adm:</font>
										</p>
										<p>
												<font size="4">　　uucp:x:5:5:UUCP administrator:/usr/lib/uucp:</font>
										</p>
										<p>
												<font size="4">　　auth:x:7:21:Authentication administrator:/tcb/files/auth:</font>
										</p>
										<p>
												<font size="4">　　cron:x:9:16:Cron daemon:/usr/spool/cron:</font>
										</p>
										<p>
												<font size="4">　　listen:x:37:4:Network daemon:/usr/net/nls:</font>
										</p>
										<p>
												<font size="4">　　lp:x:71:18:Printer administrator:/usr/spool/lp:</font>
										</p>
										<p>
												<font size="4">　　sam:x:200:50:Sam san:/usr/sam:/bin/sh</font>
										</p>
										<p>
												<font size="4">　　从上面的例子我们可以看到，/etc/passwd中一行记录对应着一个用户，每行记录又被冒号(:)分隔为7个字段，其格式和具体含义如下：</font>
										</p>
										<p>
												<font size="4">　　用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell</font>
										</p>
										<p>
												<font size="4">　　“用户名”是代表用户账号的字符串，是用户在终端登录时输入的名称。它在系统中应该是惟一的，即不同用户的登录名应该是不同的。通常这个字段的
长度不超过8个字符，并且由大小写字母和/或数字组成。登录名中不能有冒号(:)，因为冒号在这里是分隔符。为了兼容起见，登录名中最好不要包含点字符
(.)，并且不使用连字符(-)和加号(+)打头。</font>
										</p>
										<p>
												<font size="4">　　“口令”一些系统中，存放着加密后的用户口令字。用户口令是用户进入系统的“凭证”，它对于系统的安全性有着非常重要的意义。虽然这个字段存放
的只是用户口令的加密串，不是明文，但是由于/etc/passwd文件对所有用户都可读，所以这仍是一个安全隐患。因此，现在许多Linux
系统（如SVR4）都使用了shadow技术，把真正的加密后的用户口令字存放到/etc/shadow文件中，而在/etc/passwd文件的口令字
段中只存放一个特殊的字符，例如“x”或者“*”。</font>
										</p>
										<p>
												<font size="4">　　“用户标识号”是一个整数，系统内部用它来标识用户。一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的，系统内部将把它们视为同一个用户，但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。</font>
										</p>
										<p>
												<font size="4">　　通常用户标识号的取值范围是0～65 535。0是超级用户root的标识号，1～99由系统保留，作为管理账号，普通用户的标识号从100开始。在Linux系统中，这个界限是500。</font>
										</p>
										<p>
												<font size="4">　　“组标识号”字段记录的是用户所属的用户组。它对应着/etc/group文件中的一条记录。</font>
										</p>
										<p>
												<font size="4">　　“注释性描述”字段记录着用户的一些个人情况，例如用户的真实姓名、电话、地址等，这个字段并没有什么实际的用途。在不同的Linux
系统中，这个字段的格式并没有统一。在许多Linux系统中，这个字段存放的是一段任意的注释性描述文字，用做finger命令的输出。</font>
										</p>
										<p>
												<font size="4">　　“主目录”，也就是用户的起始工作目录，它是用户在登录到系统之后所处的目录。在大多数系统中，各用户的主目录都被组织在同一个特定的目录下，
而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行（搜索）权限，其他用户对此目录的访问权限则根据具体情况设置。</font>
										</p>
										<p>
												<font size="4">　　用户登录后，要启动一个进程，负责将用户的操作传给内核，这个进程是用户登录到系统后运行的命令解释器或某个特定的程序，即Shell。
Shell是用户与Linux系统之间的接口。Linux的Shell有许多种，每种都有不同的特点。常用的有sh(Bourne Shell),
csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell),
bash(Bourne Again
Shell)等。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell，那么系统使用sh为默认的登录Shell，即这
个字段的值为/bin/sh。</font>
										</p>
										<p>
												<font size="4">　　用户的登录Shell也可以指定为某个特定的程序（此程序不是一个命令解释器）。利用这一特点，我们可以限制用户只能运行指定的应用程序，在该应用程序运行结束后，用户就自动退出了系统。有些Linux 系统要求只有那些在系统中登记了的程序才能出现在这个字段中。</font>
										</p>
										<p>
												<font size="4">　　系统中有一类用户称为伪用户（psuedo users），这些用户在/etc/passwd文件中也占有一条记录，但是不能登录，因为它们的登录Shell为空。它们的存在主要是方便系统管理，满足相应的系统进程对文件属主的要求。<br /><br />   /etc/passwd文件中常见的伪用户:</font>
										</p>
										<p>
												<font size="4">   bin 拥有可执行的用户命令文件</font>
										</p>
										<p>
												<font size="4">   sys 拥有系统文件</font>
										</p>
										<p>
												<font size="4">   adm 拥有帐户文件</font>
										</p>
										<p>
												<font size="4">   uucp UUCP使用</font>
										</p>
										<p>
												<font size="4">   lp lp或lpd子系统使用</font>
										</p>
										<p>
												<font size="4">   nobody NFS使用</font>
										</p>
										<p>
												<font size="4">
														<br />　　除了上面列出的伪用户外，还有许多标准的伪用户，例如：audit, cron, mail, usenet等，它们也都各自为相关的进程和文件所需要。</font>
										</p>
										<p>
												<font size="4">
														<br />2  /etc/shadow</font>
										</p>
										<p>
												<font size="4">   
由于/etc/passwd文件是所有用户都可读的，如果用户的密码太简单或规律比较明显的话，一台普通的计算机就能够很容易地将它破解，因此对安全性要
求较高的Linux系统都把加密后的口令字分离出来，单独存放在一个文件中，这个文件是/etc/shadow文件。只有超级用户才拥有该文件读权限，这
就保证了用户密码的安全性。</font>
										</p>
										<p>
												<font size="4">　　/etc/shadow中的记录行与/etc/passwd中的一一对应，它由pwconv命令根据/etc/passwd中的数据自动产生。它的文件格式与/etc/passwd类似，由若干个字段组成，字段之间用“:”隔开。这些字段是：</font>
										</p>
										<p>
												<font size="4">　　登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:</font>
										</p>
										<p>
												<font size="4">　　失效时间:标志</font>
										</p>
										<p>
												<font size="4">　　“登录名”是与/etc/passwd文件中的登录名相一致的用户账号。</font>
										</p>
										<p>
												<font size="4">　　“口令”字段存放的是加密后的用户口令字，长度为13个字符。如果为空，则对应用户没有口令，登录时不需要口令；如果含有不属于集合 { ./0-9A-Za-z }中的字符，则对应的用户不能登录。</font>
										</p>
										<p>
												<font size="4">　　“最后一次修改时间”表示的是从某个时刻起，到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在SCO Linux 中，这个时间起点是1970年1月1日。</font>
										</p>
										<p>
												<font size="4">　　“最小时间间隔”指的是两次修改口令之间所需的最小天数。</font>
										</p>
										<p>
												<font size="4">　　“最大时间间隔”指的是口令保持有效的最大天数。</font>
										</p>
										<p>
												<font size="4">　　“警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。</font>
										</p>
										<p>
												<font size="4">　　“不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。</font>
										</p>
										<p>
												<font size="4">　　“失效时间”字段给出的是一个绝对的天数，如果使用了这个字段，那么就给出相应账号的生存期。期满后，该账号就不再是一个合法的账号，也就不能再用来登录了。</font>
										</p>
										<p>
												<font size="4">　　下面是/etc/shadow的一个例子：</font>
										</p>
										<p>
												<font size="4">　　＃ cat /etc/shadow</font>
										</p>
										<p>
												<font size="4">　　root:Dnakfw28zf38w:8764:0:168:7:::</font>
										</p>
										<p>
												<font size="4">　　daemon:*::0:0::::</font>
										</p>
										<p>
												<font size="4">　　bin:*::0:0::::</font>
										</p>
										<p>
												<font size="4">　　sys:*::0:0::::</font>
										</p>
										<p>
												<font size="4">　　adm:*::0:0::::</font>
										</p>
										<p>
												<font size="4">　　uucp:*::0:0::::</font>
										</p>
										<p>
												<font size="4">　　nuucp:*::0:0::::</font>
										</p>
										<p>
												<font size="4">　　auth:*::0:0::::</font>
										</p>
										<p>
												<font size="4">　　cron:*::0:0::::</font>
										</p>
										<p>
												<font size="4">　　listen:*::0:0::::</font>
										</p>
										<p>
												<font size="4">　　lp:*::0:0::::</font>
										</p>
										<p>
												<font size="4">　　sam:EkdiSECLWPdSa:9740:0:0::::</font>
										</p>
										<p>
												<font size="4">
														<br />3  /etc/group</font>
										</p>
										<p>
												<font size="4">    将用户分组是Linux
系统中对用户进行管理及控制访问权限的一种手段。每个用户都属于某个用户组；一个组中可以有多个用户，一个用户也可以属于不同的组。当一个用户同时是多个
组中的成员时，在/etc/passwd文件中记录的是用户所属的主组，也就是登录时所属的默认组，而其他组称为附加组。用户要访问属于附加组的文件时，
必须首先使用newgrp命令使自己成为所要访问的组中的成员。用户组的所有信息都存放在/etc/group文件中。此文件的格式也类似于
/etc/passwd文件，由冒号(:)隔开若干个字段，这些字段有：</font>
										</p>
										<p>
												<font size="4">　　组名:口令:组标识号:组内用户列表</font>
										</p>
										<p>
												<font size="4">　　“组名”是用户组的名称，由字母或数字构成。与/etc/passwd中的登录名一样，组名不应重复。</font>
										</p>
										<p>
												<font size="4">　　“口令”字段存放的是用户组加密后的口令字。一般Linux 系统的用户组都没有口令，即这个字段一般为空，或者是*。</font>
										</p>
										<p>
												<font size="4">　　“组标识号”与用户标识号类似，也是一个整数，被系统内部用来标识组。</font>
										</p>
										<p>
												<font size="4">　　“组内用户列表”是属于这个组的所有用户的列表，不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组，也可能是附加组。</font>
										</p>
										<p>
												<font size="4">　　/etc/group文件的一个例子如下：</font>
										</p>
										<p>
												<font size="4">　　# cat /etc/group</font>
										</p>
										<p>
												<font size="4">　　root::0:root</font>
										</p>
										<p>
												<font size="4">　　bin::2:root,bin</font>
										</p>
										<p>
												<font size="4">　　sys::3:root,uucp</font>
										</p>
										<p>
												<font size="4">　　adm::4:root,adm</font>
										</p>
										<p>
												<font size="4">　　daemon::5:root,daemon</font>
										</p>
										<p>
												<font size="4">　　lp::7:root,lp</font>
										</p>
										<p>
												<font size="4">　　users::20:root,sam</font>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cppblog.com/guangping/aggbug/35240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guangping/" target="_blank">王光平</a> 2007-10-26 15:32 <a href="http://www.cppblog.com/guangping/archive/2007/10/26/35240.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux系统下C语言编程基础知识介绍(一篇很好的入门介绍)（转载）</title><link>http://www.cppblog.com/guangping/archive/2007/07/10/27773.html</link><dc:creator>王光平</dc:creator><author>王光平</author><pubDate>Tue, 10 Jul 2007 01:25:00 GMT</pubDate><guid>http://www.cppblog.com/guangping/archive/2007/07/10/27773.html</guid><wfw:comment>http://www.cppblog.com/guangping/comments/27773.html</wfw:comment><comments>http://www.cppblog.com/guangping/archive/2007/07/10/27773.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guangping/comments/commentRss/27773.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guangping/services/trackbacks/27773.html</trackback:ping><description><![CDATA[
		<br />这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: <br /><br />源程序编译 <br /><br />Makefile的编写 <br /><br />程序库的链接 <br /><br />程序的调试 <br /><br />头文件和系统求助 <br /><br /><br />1.源程序的编译 <br /><br />在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 下面我们以一个实例来说明如何使用gcc编译器. <br /><br />假设我们有下面一个非常简单的源程序(hello.c): <br /><br /><br />int main(int argc,char **argv)<br />{<br />printf(""Hello Linux "");<br />}<br /><br /><br />要编译这个程序,我们只要在命令行下执行: <br /><br />gcc -o hello hello.c <br /><br />gcc
编译器就会为我们生成一个hello的可执行文件.执行./hello就可以看到程序的输出结果了.命令行中
gcc表示我们是用gcc来编译我们的源程序,-o 选项表示我们要求编译器给我们输出的可执行文件名为hello
而hello.c是我们的源程序文件. <br /><br />gcc编译器有许多选项,一般来说我们只要知道其中的几个就够了.
-o选项我们已经知道了,表示我们要求输出的可执行文件名. -c选项表示我们只要求编译器输出目标代码,而不必要输出可执行文件.
-g选项表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息. <br /><br />知道了这三个选项,我们就可以编译我们自己所写的简单的源程序了,如果你想要知道更多的选项,可以查看gcc的帮助文档,那里有着许多对其它选项的详细说明. <br /><br />2.Makefile的编写 <br /><br />假设我们有下面这样的一个程序,源代码如下: <br /><br /><br />/* main.c */<br />#include ""mytool1.h""<br />#include ""mytool2.h""<br />int main(int argc,char **argv)<br />{<br />mytool1_print(""hello"");<br />mytool2_print(""hello"");<br />}<br />/* mytool1.h */<br />#ifndef _MYTOOL_1_H<br />#define _MYTOOL_1_H<br />void mytool1_print(char *print_str);<br />#endif<br />/* mytool1.c */<br />#include ""mytool1.h""<br />void mytool1_print(char *print_str)<br />{<br />printf(""This is mytool1 print %s "",print_str);<br />}<br />/* mytool2.h */<br />#ifndef _MYTOOL_2_H<br />#define _MYTOOL_2_H<br />void mytool2_print(char *print_str);<br />#endif<br />/* mytool2.c */<br />#include ""mytool2.h""<br />void mytool2_print(char *print_str)<br />{<br />printf(""This is mytool2 print %s "",print_str);<br />}<br /><br /><br />当然由于这个程序是很短的我们可以这样来编译 <br /><br />gcc -c main.c <br /><br />gcc -c mytool1.c <br /><br />gcc -c mytool2.c <br /><br />gcc -o main main.o mytool1.o mytool2.o <br /><br />这
样的话我们也可以产生main程序,而且也不时很麻烦.但是如果我们考虑一下如果有一天我们修改了其中的一个文件(比如说mytool1.c)那么我们难
道还要重新输入上面的命令?也许你会说,这个很容易解决啊,我写一个SHELL脚本,让她帮我去完成不就可以了.是的对于这个程序来说,是可以起到作用
的.但是当我们把事情想的更复杂一点,如果我们的程序有几百个源程序的时候,难道也要编译器重新一个一个的去编译? <br /><br />为此,聪明的程序
员们想出了一个很好的工具来做这件事情,这就是make.我们只要执行以下make,就可以把上面的问题解决掉.在我们执行make之前,我们要先编写一
个非常重要的文件.Makefile.对于上面的那个程序来说,可能的一个Makefile的文件是: <br /><br /># 这是上面那个程序的Makefile文件 <br /><br />main:main.o mytool1.o mytool2.o <br /><br />gcc -o main main.o mytool1.o mytool2.o <br /><br />main.o:main.c mytool1.h mytool2.h <br /><br />gcc -c main.c <br /><br />mytool1.o:mytool1.c mytool1.h <br /><br />gcc -c mytool1.c <br /><br />mytool2.o:mytool2.c mytool2.h <br /><br />gcc -c mytool2.c <br /><br />有了这个Makefile文件,不过我们什么时候修改了源程序当中的什么文件,我们只要执行make命令,我们的编译器都只会去编译和我们修改的文件有关的文件,其它的文件她连理都不想去理的. <br /><br />下面我们学习Makefile是如何编写的. <br /><br />在Makefile中也#开始的行都是注释行.Makefile中最重要的是描述文件的依赖关系的说明.一般的格式是: <br /><br />target: components <br /><br />TAB rule <br /><br />第一行表示的是依赖关系.第二行是规则. <br /><br />比如说我们上面的那个Makefile文件的第二行 <br /><br />main:main.o mytool1.o mytool2.o <br /><br />表
示我们的目标(target)main的依赖对象(components)是main.o mytool1.o mytool2.o
当倚赖的对象在目标修改后修改的话,就要去执行规则一行所指定的命令.就象我们的上面那个Makefile第三行所说的一样要执行 gcc -o
main main.o mytool1.o mytool2.o 注意规则一行中的TAB表示那里是一个TAB键 <br /><br />Makefile有三个非常有用的变量.分别是$@,$^,$<代表的意义分别是:><br /><br />$@目标文件,$^所有的依赖文件,$<第一个依赖文件.><br /><br />如果我们使用上面三个变量,那么我们可以简化我们的Makefile文件为: <br /><br /># 这是简化后的Makefile <br /><br />main:main.o mytool1.o mytool2.o <br /><br />gcc -o $@ $^ <br /><br />main.o:main.c mytool1.h mytool2.h <br /><br />gcc -c $&lt; <br /><br />mytool1.o:mytool1.c mytool1.h <br /><br />gcc -c $&lt; <br /><br />mytool2.o:mytool2.c mytool2.h <br /><br />gcc -c $&lt; <br /><br />经过简化后我们的Makefile是简单了一点,不过人们有时候还想简单一点.这里我们学习一个Makefile的缺省规则 <br /><br />.c.o: <br /><br />gcc -c $&lt; <br /><br />这个规则表示所有的 .o文件都是依赖与相应的.c文件的.例如mytool.o依赖于mytool.c这样Makefile还可以变为: <br /><br /># 这是再一次简化后的Makefile <br /><br />main:main.o mytool1.o mytool2.o <br /><br />gcc -o $@ $^ <br /><br />.c.o: <br /><br />gcc -c $&lt; <br /><br />好了,我们的Makefile 也差不多了,如果想知道更多的关于Makefile规则可以查看相应的文档. <br /><br />3.程序库的链接 <br /><br />试着编译下面这个程序 <br /><br />/* temp.c */ <br /><br />#include <br /><br />int main(int argc,char **argv) <br /><br />{ <br /><br />double value; <br /><br />printf(""Value:%f "",value); <br /><br />} <br /><br />这个程序相当简单,但是当我们用 gcc -o temp temp.c 编译时会出现下面所示的错误. <br /><br />/tmp/cc33Kydu.o: In function ``main´´: <br /><br />/tmp/cc33Kydu.o(.text+0xe): undefined reference to ``log´´ <br /><br />collect2: ld returned 1 exit status <br /><br />出
现这个错误是因为编译器找不到log的具体实现.虽然我们包括了正确的头文件,但是我们在编译的时候还是要连接确定的库.在Linux下,为了使用数学函
数,我们必须和数学库连接,为此我们要加入 -lm 选项. gcc -o temp temp.c
-lm这样才能够正确的编译.也许有人要问,前面我们用printf函数的时候怎么没有连接库呢?是这样的,对于一些常用的函数的实现,gcc编译器会自
动去连接一些常用库,这样我们就没有必要自己去指定了. 有时候我们在编译程序的时候还要指定库的路径,这个时候我们要用到编译器的
-L选项指定路径.比如说我们有一个库在 /home/hoyt/mylib下,这样我们编译的时候还要加上
-L/home/hoyt/mylib.对于一些标准库来说,我们没有必要指出路径.只要它们在起缺省库的路径下就可以了.系统的缺省库的路径/lib
/usr/lib /usr/local/lib 在这三个路径下面的库,我们可以不指定路径. <br /><br />还有一个问题,有时候我们使用了某个
函数,但是我们不知道库的名字,这个时候怎么办呢?很抱歉,对于这个问题我也不知道答案,我只有一个傻办法.首先,我到标准库路径下面去找看看有没有和我
用的函数相关的库,我就这样找到了线程(thread)函数的库文件(libpthread.a).
当然,如果找不到,只有一个笨方法.比如我要找sin这个函数所在的库. 就只好用 nm -o /lib/*.so|grep
sin&gt;~/sin 命令,然后看~/sin文件,到那里面去找了.
在sin文件当中,我会找到这样的一行libm-2.1.2.so:00009fa0 W sin 这样我就知道了sin在
libm-2.1.2.so库里面,我用 -lm选项就可以了(去掉前面的lib和后面的版本标志,就剩下m了所以是 -lm).
如果你知道怎么找,请赶快告诉我,我回非常感激的.谢谢! <br /><br />4.程序的调试 <br /><br />我们编写的程序不太可能一次性就会成功的,在我们的程序当中,会出现许许多多我们想不到的错误,这个时候我们就要对我们的程序进行调试了. <br /><br />最
常用的调试软件是gdb.如果你想在图形界面下调试程序,那么你现在可以选择xxgdb.记得要在编译的时候加入
-g选项.关于gdb的使用可以看gdb的帮助文件.由于我没有用过这个软件,所以我也不能够说出如何使用.
不过我不喜欢用gdb.跟踪一个程序是很烦的事情,我一般用在程序当中输出中间变量的值来调试程序的.当然你可以选择自己的办法,没有必要去学别人的.现
在有了许多IDE环境,里面已经自己带了调试器了.你可以选择几个试一试找出自己喜欢的一个用. <br /><br />5.头文件和系统求助 <br /><br />有时候我们只知道一个函数的大概形式,不记得确切的表达式,或者是不记得着函数在那个头文件进行了说明.这个时候我们可以求助系统. <br /><br />比
如说我们想知道fread这个函数的确切形式,我们只要执行 man fread 系统就会输出着函数的详细解释的.和这个函数所在的头文件说明了.
如果我们要write这个函数的说明,当我们执行man write时,输出的结果却不是我们所需要的.
因为我们要的是write这个函数的说明,可是出来的却是write这个命令的说明.为了得到write的函数说明我们要用 man 2 write.
2表示我们用的write这个函数是系统调用函数,还有一个我们常用的是3表示函数是C的库函数。 <br /><br />记住不管什么时候,man都是我们的最好助手。 <br /><br />好了,这一章就讲这么多了,有了这些知识我们就可以进入激动人心的Linux下的C程序探险活动。</第一个依赖文件.></代表的意义分别是:><img src ="http://www.cppblog.com/guangping/aggbug/27773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guangping/" target="_blank">王光平</a> 2007-07-10 09:25 <a href="http://www.cppblog.com/guangping/archive/2007/07/10/27773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>emacs23的使用</title><link>http://www.cppblog.com/guangping/archive/2006/08/25/11683.html</link><dc:creator>王光平</dc:creator><author>王光平</author><pubDate>Fri, 25 Aug 2006 01:35:00 GMT</pubDate><guid>http://www.cppblog.com/guangping/archive/2006/08/25/11683.html</guid><wfw:comment>http://www.cppblog.com/guangping/comments/11683.html</wfw:comment><comments>http://www.cppblog.com/guangping/archive/2006/08/25/11683.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/guangping/comments/commentRss/11683.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guangping/services/trackbacks/11683.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;============================ 语言环境字符集设置 =================================<br>;;这一部份主要用在linux 环境下，windows下没什么作用<br>;; (set-language-environment 'Chinese-GB)<br>;; (set-keyboard-coding-system 'utf-8)<br>;; (set-clipboard-coding-system 'utf-8)<br>;; (set-terminal-coding-system 'utf-8)<br>;; (set-buffer-file-coding-system 'utf-8)<br>;; (set-default-coding-systems 'utf-8)<br>;; (set-selection-coding-system 'utf-8)<br>;; (modify-coding-system-alist 'process "*" 'utf-8)<br>;; (setq default-process-coding-system '(utf-8 . utf-8))<br>;; (setq-default pathname-coding-system 'utf-8)<br>;; (set-file-name-coding-system 'utf-8)<br>;; (setq ansi-color-for-comint-mode t) ;;处理shell-mode乱码,好像没作用<br>;=========================== 语言环境字符集设置结束 ===============================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;============================ MS Windows环境下字体设置 ===========================<br>(setq default-frame-alist <br>(append <br>&nbsp; '((font . "fontset-chinese")) default-frame-alist))</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>(create-fontset-from-fontset-spec<br>&nbsp; "-outline-Courier New-normal-r-normal-normal-13-97-96-96-c-*-fontset-chinese")<br>(set-fontset-font<br>&nbsp;"fontset-default" nil<br>&nbsp;"-outline-新宋体-normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)<br>(set-fontset-font<br>&nbsp;"fontset-chinese" 'kana<br>&nbsp;"-outline-新宋体-normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)<br>(set-fontset-font<br>&nbsp;"fontset-chinese" 'han<br>&nbsp;"-outline-新宋体-normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)<br>(set-fontset-font<br>&nbsp;"fontset-chinese" 'cjk-misc<br>&nbsp;"-outline-新宋体-normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)<br>(set-fontset-font<br>&nbsp;"fontset-chinese" 'symbol<br>&nbsp;"-outline-新宋体-normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)<br>(set-default-font "fontset-chinese") </p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;===========================MS Windows环境下字体设置结束 =========================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">&nbsp;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;============================ Linux环境下字体设置 =================================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; (create-fontset-from-fontset-spec <br>;; "-*-courier-medium-r-normal-*-14-*-*-*-*-*-fontset-courier") <br>;; (set-default-font "fontset-courier") <br>;; (setq default-frame-alist <br>;; (append <br>;; '((font . "fontset-courier")) default-frame-alist))</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; (set-fontset-font <br>;; "fontset-default" nil <br>;; "-*-simsun-*-*-*-*-14-*-*-*-*-*-gb2312.1980-*" nil 'prepend) <br>;; (set-fontset-font <br>;; "fontset-courier" 'kana <br>;; "-*-simsun-*-*-*-*-14-*-*-*-*-*-gbk-0" nil 'prepend) <br>;; (set-fontset-font <br>;; "fontset-courier" 'han <br>;; "-*-simsun-*-*-*-*-14-*-*-*-*-*-gbk-0" nil 'prepend) <br>;; (set-fontset-font <br>;; "fontset-courier" 'cjk-misc <br>;; "-*-simsun-*-*-*-*-14-*-*-*-*-*-gbk-0" nil 'prepend)</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;============================ Linux环境下字体设置结束 ==============================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;;;;;;;;;;;;;;;;;;;;语言环境字体设置结束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;;解决中英文混排不能正确fill的问题,好像没什么用<br>;; (put-charset-property 'chinese-cns11643-5 'nospace-between-words t)<br>;; (put-charset-property 'chinese-cns11643-6 'nospace-between-words t)<br>;; (put-charset-property 'chinese-cns11643-7 'nospace-between-words t)</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;;;;;;;;;;;;;;;;;;;;;;;;;;;&nbsp; 设置窗口界面 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(set-foreground-color "grey")<br>(set-background-color "black")<br>(set-cursor-color "gold1")<br>(set-mouse-color "gold1")</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(set-scroll-bar-mode nil)<br>;;取消滚动栏</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;(customize-set-variable 'scroll-bar-mode 'right))<br>;;设置滚动栏在窗口右侧，而默认是在左侧</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(tool-bar-mode nil)<br>;;取消工具栏</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq default-frame-alist<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '((vertical-scroll-bars)&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (top . 25)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (left . 45)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (width . 110)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (height . 40)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (background-color . "black")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (foreground-color . "grey")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cursor-color&nbsp;&nbsp;&nbsp;&nbsp; . "gold1")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (mouse-color&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . "gold1")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (tool-bar-lines . 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (menu-bar-lines . 1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (right-fringe)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (left-fringe)))</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>;; 设置另外一些颜色：语法高亮显示的背景和主题，区域选择的背景和主题，二次选择的背景和选择<br>(set-face-foreground 'highlight "white")<br>(set-face-background 'highlight "blue")<br>(set-face-foreground 'region "cyan")<br>(set-face-background 'region "blue")<br>(set-face-foreground 'secondary-selection "skyblue")<br>(set-face-background 'secondary-selection "darkblue")</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">&nbsp;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;;;;;;;;;;;;;;;;;;;;;;;;;;;&nbsp; 设置界面结束&nbsp; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">&nbsp;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;;;;;;;;;;;;;;;;;;;;;;;;;;;&nbsp;&nbsp; 显示时间设置&nbsp;&nbsp; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br>(display-time-mode 1);;启用时间显示设置，在minibuffer上面的那个杠上<br>(setq display-time-24hr-format t);;时间使用24小时制<br>(setq display-time-day-and-date t);;时间显示包括日期和具体时间<br>(setq display-time-use-mail-icon t);;时间栏旁边启用邮件设置<br>(setq display-time-interval 10);;时间的变化频率，单位多少来着？<br>&nbsp;<br>;;;;;;;;;;;;;;;;;;;;;;;;;;;&nbsp; 显示时间设置结束&nbsp; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">&nbsp;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;定制操作习惯;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;设置打开文件的缺省路径<br>(setq default-directory "/") </p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;ido的配置,这个可以使你在用C-x C-f打开文件的时候在后面有提示;<br>;;这里是直接打开了ido的支持，在emacs23中这个是自带的.<br>(ido-mode t) </p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq visible-bell t)<br>;;关闭烦人的出错时的提示声<br>(setq inhibit-startup-message t)<br>;;关闭emacs启动时的画面</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq gnus-inhibit-startup-message t)<br>;;关闭gnus启动时的画面</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(fset 'yes-or-no-p 'y-or-n-p)<br>;; 改变 Emacs 固执的要你回答 yes 的行为。按 y 或空格键表示 yes，n 表示 no。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq font-lock-maximum-decoration t)<br>(setq font-lock-global-modes '(not shell-mode text-mode))<br>(setq font-lock-verbose t)<br>(setq font-lock-maximum-size '((t . 1048576) (vm-mode . 5250000)))<br>;; 语法高亮。除 shell-mode 和 text-mode 之外的模式中使用语法高亮。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq column-number-mode t) <br>(setq line-number-mode t)<br>;;显示行列号</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq mouse-yank-at-point t)<br>;;不要在鼠标点击的那个地方插入剪贴板内容。我不喜欢那样，经常把我的文档搞的一团糟。我觉得先用光标定位，然后鼠标中键点击要好的多。不管你的光标在文档的那个位置，或是在 minibuffer，鼠标中键一点击，X selection 的内容就被插入到那个位置。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq kill-ring-max 200)<br>;;设置粘贴缓冲条目数量.用一个很大的kill ring(最多的记录个数). 这样防止我不小心删掉重要的东西</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq-default auto-fill-function 'do-auto-fill) <br>&nbsp;; Autofill in all modes;;<br>(setq default-fill-column 120)<br>;;把 fill-column 设为 60. 这样的文字更好读</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq-default indent-tabs-mode nil)<br>(setq default-tab-width 8)<br>(setq tab-stop-list ())<br>;;不用 TAB 字符来indent, 这会引起很多奇怪的错误。编辑 Makefile 的时候也不用担心，因为 makefile-mode 会把 TAB 键设置成真正的 TAB 字符，并且加亮显示的。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq sentence-end "\\([。！？]\\|&#8230;&#8230;\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*")<br>(setq sentence-end-double-space nil)<br>;;设置 sentence-end 可以识别中文标点。不用在 fill 时在句号后插入两个空格。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq enable-recursive-minibuffers t)<br>;;可以递归的使用 minibuffer</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq scroll-margin 3&nbsp; scroll-conservatively 10000)<br>;;防止页面滚动时跳动， scroll-margin 3 可以在靠近屏幕边沿3行时就开始滚动，可以很好的看到上下文。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq default-major-mode 'text-mode)<br>(add-hook 'text-mode-hook 'turn-on-auto-fill) <br>;;设置缺省主模式是text，,并进入auto-fill次模式.而不是基本模式fundamental-mode</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq show-paren-mode t) ;;打开括号匹配显示模式<br>(setq show-paren-style 'parenthesis)<br>;;括号匹配时可以高亮显示另外一边的括号，但光标不会烦人的跳到另一个括号处。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq mouse-avoidance-mode 'animate)<br>;;光标靠近鼠标指针时，让鼠标指针自动让开，别挡住视线。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq frame-title-format "<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#101;&#109;&#97;&#99;&#115;&#64;&#37;&#98;">emacs@%b</a>")<br>;;在标题栏显示buffer的名字，而不是 <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#101;&#109;&#97;&#99;&#115;&#64;&#119;&#97;&#110;&#103;&#121;&#105;&#110;&#46;&#99;&#111;&#109;">emacs@wangyin.com</a> 这样没用的提示。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq uniquify-buffer-name-style 'forward);;好像没起作用<br>;; 当有两个文件名相同的缓冲时，使用前缀的目录名做 buffer 名字，不用原来的foobar&lt;?&gt; 形式。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq auto-image-file-mode t)<br>;;让 Emacs 可以直接打开和显示图片。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;(auto-compression-mode 1)&nbsp;&nbsp; <br>;打开压缩文件时自动解压缩。 </p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq global-font-lock-mode t)<br>;;进行语法加亮。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq-default kill-whole-line t)<br>;; 在行首 C-k 时，同时删除该行。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(add-hook 'comint-output-filter-functions<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'comint-watch-for-password-prompt)<br>;;当你在shell、telnet、w3m等模式下时，必然碰到过要输入密码的情况,此时加密显出你的密码</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; (setq version-control t);;启用版本控制，即可以备份多次<br>;; (setq kept-old-versions 2);;备份最原始的版本两次，及第一次编辑前的文档，和第二次编辑前的文档<br>;; (setq kept-new-versions 1);;备份最新的版本1次，理解同上<br>;; (setq delete-old-versions t);;删掉不属于以上3中版本的版本<br>;; (setq backup-directory-alist '(("." . "~/backups")));;设置备份文件的路径<br>;; (setq backup-by-copying t);;备份设置方法，直接拷贝<br>;; Emacs 中，改变文件时，默认都会产生备份文件(以 ~ 结尾的文件)。可以完全去掉<br>;; (并不可取)，也可以制定备份的方式。这里采用的是，把所有的文件备份都放在一<br>;; 个固定的地方("~/backups")。对于每个备份文件，保留最原始的两个版本和最新的<br>;; 1个版本。并且备份的时候，备份文件是复本，而不是原件。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq make-backup-files nil) <br>;; 设定不产生备份文件</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq auto-save-mode nil) <br>;;自动保存模式</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq-default make-backup-files nil)<br>;; 不生成临时文件</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(put 'scroll-left 'disabled nil)&nbsp;&nbsp;&nbsp;&nbsp; ;允许屏幕左移<br>(put 'scroll-right 'disabled nil)&nbsp;&nbsp;&nbsp; ;允许屏幕右移<br>(put 'set-goal-column 'disabled nil)<br>(put 'narrow-to-region 'disabled nil) <br>(put 'upcase-region 'disabled nil)<br>(put 'downcase-region 'disabled nil)<br>(put 'LaTeX-hide-environment 'disabled nil)<br>;;把这些缺省禁用的功能打开。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;允许emacs和外部其他程序的粘贴<br>(setq x-select-enable-clipboard t)</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq mouse-yank-at-point t)<br>;;使用鼠标中键可以粘贴</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq user-full-name "王光平")<br>(setq user-mail-address "<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#103;&#101;&#116;&#109;&#97;&#105;&#108;&#115;&#64;&#49;&#54;&#51;&#46;&#99;&#111;&#109;">getmails@163.com</a>")<br>;;设置有用的个人信息,这在很多地方有用。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq require-final-newline t)<br>;; 自动的在文件末增加一新行</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq-default transient-mark-mode t)<br>;;Non-nil if Transient-Mark mode is enabled.</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq track-eol t)<br>;; 当光标在行尾上下移动的时候，始终保持在行尾。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq Man-notify-method 'pushy)<br>;; 当浏览 man page 时，直接跳转到 man buffer。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq next-line-add-newlines nil)<br>;;Emacs 21 中已经是缺省设置。按 C-n 或向下键时不添加新行。<br>&nbsp; <br>(global-set-key [home] 'beginning-of-buffer)<br>(global-set-key [end] 'end-of-buffer)<br>;;设置home键指向buffer开头，end键指向buffer结尾</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>(global-set-key (kbd "C-,") 'scroll-left)<br>;; "C-,"设为屏幕左移命令<br>(global-set-key (kbd "C-.") 'scroll-right)<br>;; "C-."设为屏幕右移命令</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key [f1] 'manual-entry)<br>(global-set-key [C-f1] 'info )</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key [f3] 'repeat-complex-command)</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key [f4] 'other-window)<br>;; 跳转到 Emacs 的另一个buffer窗口</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(defun du-onekey-compile ()<br>&nbsp; "Save buffers and start compile"<br>&nbsp; (interactive)<br>&nbsp; (save-some-buffers t)<br>&nbsp; (switch-to-buffer-other-window "*compilation*")<br>&nbsp; (compile compile-command))<br>&nbsp; (global-set-key [C-f5] 'compile)<br>&nbsp; (global-set-key [f5] 'du-onekey-compile)<br>;;&nbsp; C-f5, 设置编译命令; f5, 保存所有文件然后编译当前窗口文件 </p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key [f6] 'gdb)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>;;F6设置为在Emacs中调用gdb</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key [C-f7] 'previous-error)<br>(global-set-key [f7] 'next-error)</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(defun open-eshell-other-buffer ()<br>&nbsp; "Open eshell in other buffer"<br>&nbsp; (interactive)<br>&nbsp; (split-window-vertically)<br>&nbsp; (eshell))<br>(global-set-key [(f8)] 'open-eshell-other-buffer)<br>(global-set-key [C-f8] 'eshell)<br>;;目的是开一个shell的小buffer，用于更方便地测试程序(也就是运行程序了)，我经常会用到。<br>;;f8就是另开一个buffer然后打开shell，C-f8则是在当前的buffer打开shell</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq speedbar-show-unknown-files t);;可以显示所有目录以及文件<br>(setq dframe-update-speed nil);;不自动刷新，手动 g 刷新<br>(setq speedbar-update-flag nil)<br>(setq speedbar-use-images nil);;不使用 image 的方式<br>(setq speedbar-verbosity-level 0) </p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key [f9] 'speedbar)<br>;;设置f9调用speedbar命令<br>;;使用 n 和 p 可以上下移动，<br>;; + 展开目录或文件进行浏览，- 收缩，RET 访问目录或文件，g 更新 speedbar。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq dired-recursive-copies 'top)<br>(setq dired-recursive-deletes 'top)<br>;;让 dired 可以递归的拷贝和删除目录。<br>(global-set-key [C-f9] 'dired)<br>;;设置[C-f9]为调用dired命令</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key [f10] 'undo)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>;;设置F10为撤销</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key [f11] 'calendar) <br>;;设置F11快捷键指定Emacs 的日历系统</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key [f12] 'list-bookmarks)<br>;;设置F12 快速察看日程安排</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq time-stamp-active t)<br>(setq time-stamp-warn-inactive t)<br>(setq time-stamp-format "%:y-%02m-%02d %3a %02H:%02M:%02S chunyu")<br>;; 设置时间戳，标识出最后一次保存文件的时间。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key (kbd "M-g") 'goto-line)<br>;;设置M-g为goto-line</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key (kbd "C-SPC") 'nil)<br>;;取消control+space键设为mark</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key (kbd "M-&lt;SPC&gt;") 'set-mark-command)<br>;;这样 我就不用按 C-@ 来 setmark 了, C-@ 很不好按。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;定制操作习惯结束;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&nbsp; 设置日历 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br>;;设置日历的一些颜色<br>(setq calendar-load-hook<br>'(lambda ()<br>(set-face-foreground 'diary-face "skyblue")<br>(set-face-background 'holiday-face "slate blue")<br>(set-face-foreground 'holiday-face "white")))</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;设置我所在地方的经纬度，calendar里有个功能是日月食的预测，和你的经纬度相联系的。<br>;; 让emacs能计算日出日落的时间，在 calendar 上用 S 即可看到<br>(setq calendar-latitude +39.54)<br>(setq calendar-longitude +116.28)<br>(setq calendar-location-name "北京")</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; 设置阴历显示，在 calendar 上用 pC 显示阴历<br>(setq chinese-calendar-celestial-stem<br>&nbsp; ["甲" "乙" "丙" "丁" "戊" "己" "庚" "辛" "壬" "癸"])<br>(setq chinese-calendar-terrestrial-branch<br>&nbsp; ["子" "丑" "寅" "卯" "辰" "巳" "戊" "未" "申" "酉" "戌" "亥"])</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; 设置 calendar 的显示<br>(setq calendar-remove-frame-by-deleting t)<br>(setq calendar-week-start-day 1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; 设置星期一为每周的第一天<br>(setq mark-diary-entries-in-calendar t)&nbsp;&nbsp;&nbsp;&nbsp; ; 标记calendar上有diary的日期<br>(setq mark-holidays-in-calendar nil)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; 为了突出有diary的日期，calendar上不标记节日<br>(setq view-calendar-holidays-initially nil) ; 打开calendar的时候不显示一堆节日 </p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; 去掉不关心的节日，设定自己在意的节日，在 calendar 上用 h 显示节日<br>(setq christian-holidays nil)<br>(setq hebrew-holidays nil)<br>(setq islamic-holidays nil)<br>(setq solar-holidays nil)<br>(setq general-holidays '((holiday-fixed 1 1 "元旦")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (holiday-fixed 2 14 "情人节")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (holiday-fixed 3 14 "白色情人节")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (holiday-fixed 4 1 "愚人节")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (holiday-fixed 5 1 "劳动节")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (holiday-float 5 0 2 "母亲节")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (holiday-fixed 6 1 "儿童节")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (holiday-float 6 0 3 "父亲节")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (holiday-fixed 7 1 "建党节")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (holiday-fixed 8 1 "建军节")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (holiday-fixed 9 10 "教师节")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (holiday-fixed 10 1 "国庆节")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (holiday-fixed 12 25 "圣诞节")))</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;Calendar模式支持各种方式来更改当前日期<br>;;（这里的&#8220;前&#8221;是指还没有到来的那一天，&#8220;后&#8221;是指已经过去的日子）<br>;;&nbsp; q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 退出calendar模式<br>;; C-f&nbsp;&nbsp;&nbsp;&nbsp; 让当前日期向前一天<br>;; C-b&nbsp;&nbsp;&nbsp;&nbsp; 让当前日期向后一天<br>;; C-n&nbsp;&nbsp;&nbsp;&nbsp; 让当前日期向前一周<br>;; C-p&nbsp;&nbsp;&nbsp;&nbsp; 让当前日期向后一周<br>;; M-}&nbsp;&nbsp;&nbsp;&nbsp; 让当前日期向前一个月<br>;; M-{&nbsp;&nbsp;&nbsp;&nbsp; 让当前日期向后一个月<br>;; C-x ]&nbsp;&nbsp; 让当前日期向前一年<br>;; C-x [&nbsp;&nbsp; 让当前日期向后一年<br>;; C-a&nbsp;&nbsp;&nbsp;&nbsp; 移动到当前周的第一天<br>;; C-e&nbsp;&nbsp;&nbsp;&nbsp; 移动到当前周的最后一天<br>;; M-a&nbsp;&nbsp;&nbsp;&nbsp; 移动到当前月的第一天<br>;; M-e&nbsp;&nbsp;&nbsp;&nbsp; 多动到当前月的最后一天<br>;; M-&lt;&nbsp;&nbsp;&nbsp;&nbsp; 移动到当前年的第一天<br>;; M-&gt;&nbsp;&nbsp;&nbsp;&nbsp; 移动到当前年的最后一天</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;Calendar模式支持移动多种移动到特珠日期的方式<br>;; g d&nbsp;&nbsp;&nbsp;&nbsp; 移动到一个特别的日期<br>;;&nbsp; o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使某个特殊的月分作为中间的月分<br>;;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 移动到当天的日期<br>;; p d&nbsp;&nbsp;&nbsp;&nbsp; 显示某一天在一年中的位置，也显示本年度还有多少天。<br>;; C-c C-l 刷新Calendar窗口</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; Calendar支持生成LATEX代码。<br>;; t m&nbsp;&nbsp;&nbsp;&nbsp; 按月生成日历<br>;; t M&nbsp;&nbsp;&nbsp;&nbsp; 按月生成一个美化的日历<br>;; t d&nbsp;&nbsp;&nbsp;&nbsp; 按当天日期生成一个当天日历<br>;; t w 1&nbsp;&nbsp; 在一页上生成这个周的日历<br>;; t w 2&nbsp;&nbsp; 在两页上生成这个周的日历<br>;; t w 3&nbsp;&nbsp; 生成一个ISO-SYTLE风格的当前周日历<br>;; t w 4&nbsp;&nbsp; 生成一个从周一开始的当前周日历<br>;; t y&nbsp;&nbsp;&nbsp;&nbsp; 生成当前年的日历</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;EMACS Calendar支持配置节日：<br>;; h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示当前的节日<br>;; x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义当天为某个节日<br>;; u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取消当天已被定义的节日<br>;; e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示所有这前后共三个月的节日。<br>;; M-x holiday&nbsp; 在另外的窗口的显示这前后三个月的节日。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;; 另外，还有一些特殊的，有意思的命令：<br>;; S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示当天的日出日落时间(是大写的S)<br>;; p C&nbsp;&nbsp;&nbsp;&nbsp; 显示农历可以使用<br>;; g C&nbsp;&nbsp;&nbsp;&nbsp; 使用农历移动日期可以使用</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&nbsp; 日历设置结束 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">&nbsp;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&nbsp; 设置日记 ;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq diary-file "~/diary");; 默认的日记文件<br>(setq diary-mail-addr "<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#103;&#101;&#116;&#109;&#97;&#105;&#108;&#115;&#64;&#49;&#54;&#51;&#46;&#99;&#111;&#109;">getmails@163.com</a>")<br>(add-hook 'diary-hook 'appt-make-list)<br>;;当你创建了一个'~/diary'文件，你就可以使用calendar去查看里面的内容。你可以查看当天的事件，相关命令如下 ：<br>;;&nbsp; d&nbsp;&nbsp;&nbsp;&nbsp; 显示被选中的日期的所有事件<br>;;&nbsp; s&nbsp;&nbsp;&nbsp;&nbsp; 显示所有事件，包括过期的，未到期的等等</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; 创建一个事件的样例：<br>;; 02/11/1989<br>;;&nbsp;&nbsp;&nbsp;&nbsp; Bill B. visits Princeton today<br>;;&nbsp;&nbsp;&nbsp;&nbsp; 2pm Cognitive Studies Committee meeting<br>;;&nbsp;&nbsp;&nbsp;&nbsp; 2:30-5:30 Liz at Lawrenceville<br>;;&nbsp;&nbsp;&nbsp;&nbsp; 4:00pm Dentist appt<br>;;&nbsp;&nbsp;&nbsp;&nbsp; 7:30pm Dinner at George's<br>;;&nbsp;&nbsp;&nbsp;&nbsp; 8:00-10:00pm concert</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; 创建事件的命令：<br>;; i d&nbsp;&nbsp; 为当天日期添加一个事件<br>;; i w&nbsp;&nbsp; 为当天周创建一个周事件<br>;; i m&nbsp;&nbsp; 为当前月创建一个月事件<br>;; i y&nbsp;&nbsp; 为当前年创建一个年事件<br>;; i a&nbsp;&nbsp; 为当前日期创建一个周年纪念日<br>;; i c&nbsp;&nbsp; 创建一个循环的事件</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&nbsp; 设置日记结束&nbsp; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">&nbsp;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 自定义lisp包设置&nbsp; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;=======================五笔输入法设置======================<br>;; (add-to-list 'load-path "~/lisp/wubi/wubi")<br>;; (require 'wubi)<br>;; (register-input-method "chinese-wubi" "Chinese-GB" 'quail-use-package "wubi" "wubi")<br>;; (wubi-load-local-phrases)<br>;; (setq default-input-method "chinese-wubi")</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;;这几句Lisp代码的作用是设置中文环境、注册五笔字型输入法。保存.emacs后请重新启动emacs，<br>;;使得上面的设置生效。现在您可以用快捷键C-\ （同时按住 Ctrl和反斜线键）唤出五笔字型输入法了。<br>;;在emacs的mode line上会出现&#8220;五笔字型&#8221;的字样。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;=======================五笔输入法设置结束===================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;======================= cscope 设置 =======================<br>;;使用 cscope 浏览源代码,这个xcscope是个改进版，为每一次查找的结果使用不同 buffer ，<br>;;这样就可以保存以前的结果。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(add-to-list 'load-path&nbsp; "~/lisp/xcscope") ;; 将软件包所在的路径加到 EMACS 的 load-path<br>(require 'xcscope) ;; 加载相应的软件</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; C-c s a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设定初始化的目录，一般是你代码的根目录<br>;; C-s s I&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对目录中的相关文件建立列表并进行索引<br>;; C-c s s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 序找符号<br>;; C-c s g&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 寻找全局的定义<br>;; C-c s c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 看看指定函数被哪些函数所调用<br>;; C-c s C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 看看指定函数调用了哪些函数<br>;; C-c s e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 寻找正则表达式<br>;; C-c s f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 寻找文件<br>;; C-c s i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 看看指定的文件被哪些文件include</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;===================== cscope 设置结束 ======================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;======================== tabbar设置 ========================<br>(add-to-list 'load-path&nbsp; "~/lisp/tabbar")<br>(require 'tabbar)<br>(tabbar-mode)<br>;========================tabbar设置结束=======================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;======================= wb-line-number设置 ================== <br>;;增加一个显示行号的buffer<br>;(add-to-list 'load-path&nbsp; "~/lisp/wb-line-number")<br>;(require 'wb-line-number)<br>;(wb-line-number-enable)<br>;====================== wb-line-number设置结束 ================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;======================= setnu设置 ============================ <br>;;再增加一个显示行号的功能<br>(add-to-list 'load-path&nbsp; "~/lisp/setnu")<br>(require 'setnu)<br>(global-set-key [f2] (quote setnu-mode))</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;======================= setnu设置结束 ＝＝＝＝================= </p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;====================== rect-mark设置 =========================<br>;; 按下shift拖拽鼠标即可选择矩形区域<br>;; Support for marking a rectangle of text with highlighting.<br>(add-to-list 'load-path&nbsp; "~/lisp/rect-mark")<br>(require 'rect-mark)<br>(define-key ctl-x-map "r\C-@" 'rm-set-mark)<br>(define-key ctl-x-map [?r ?\C-\ ] 'rm-set-mark)<br>(define-key ctl-x-map "r\C-x" 'rm-exchange-point-and-mark)<br>(define-key ctl-x-map "r\C-w" 'rm-kill-region)<br>(define-key ctl-x-map "r\M-w" 'rm-kill-ring-save)<br>(define-key global-map [S-down-mouse-1] 'rm-mouse-drag-region)<br>(autoload 'rm-set-mark "rect-mark"<br>&nbsp; "Set mark for rectangle." t)<br>(autoload 'rm-exchange-point-and-mark "rect-mark"<br>&nbsp; "Exchange point and mark for rectangle." t)<br>(autoload 'rm-kill-region "rect-mark"<br>&nbsp; "Kill a rectangular region and save it in the kill ring." t)<br>(autoload 'rm-kill-ring-save "rect-mark"<br>&nbsp; "Copy a rectangular region to the kill ring." t)<br>(autoload 'rm-mouse-drag-region "rect-mark"<br>&nbsp; "Drag out a rectangular region with the mouse." t)</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; Use this section in your "~/.emacs" to modify picture mode so that<br>;; it automatically uses the rect-mark equivalents of many commands.</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; One vision of a better picture mode.<br>(add-hook 'picture-mode-hook 'rm-example-picture-mode-bindings)<br>(autoload 'rm-example-picture-mode-bindings "rect-mark"<br>&nbsp; "Example rect-mark key and mouse bindings for picture mode.")</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;=====================&nbsp; rect-mark设置结束 =========================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;=====================&nbsp; info文件设置 ==============================<br>;;Info 的菜单是按 Info-directory-list 的顺序列出的，而 Info-directory-list 是在启动 info 时<br>;;用Info-default-directory-list 来初始的。所以要添加 Info 目录是要设置 Info-default-directory-list。<br>;;在添加的 Info 目录中，创建一个叫 dir 的文件（其实所有 Info-directory-list 里有一个文件就行了，<br>;;在 ${emacs}/info 文件夹下有这个文件，修改这个也可以）。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(add-to-list 'Info-default-directory-list&nbsp; "~/lisp/info/") </p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; n：跳转到该节点的下一个节点；&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>;; p：跳转到该节点的上一个节点；<br>;; m: 指定菜单名而选择另外一个节点；<br>;; f：进入交叉引用主题；<br>;; l：进入该窗口中的最后一个节点；<br>;; TAB：跳转到该窗口的下一个超文本链接；<br>;; RET：进入光标处的超文本链接；<br>;; u：转到上一级主题；<br>;; d：回到 info 的初始节点目录；<br>;; h：调出 info 教程；<br>;; q：退出 info。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;===================&nbsp; info文件设置结束 ============================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;===================== AUCTeX设置 =================================<br>(load "~/lisp/auctex/site-lisp/auctex.el" nil t t)<br>(load "~/lisp/auctex/site-lisp/preview-latex.el" nil t t)<br>(setq TeX-auto-save t)<br>(setq TeX-parse-self t)<br>(setq-default TeX-master nil)<br>(add-hook 'LaTeX-mode-hook #'LaTeX-install-toolbar)<br>(add-hook 'LaTeX-mode-hook 'turn-on-auto-fill)<br>(add-hook 'LaTeX-mode-hook 'turn-on-reftex)</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;===================== AUCTeX设置结束 =============================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;===================== 文件头header设置 ===========================<br>;;当我们保存文件的时候,有很多信息可以自动更新.如何自动更新信息, 更新那些信息,<br>;也是可以完全自己配置. 包括文件名称,最后一次修改时间,文件保存次数,最后一次修改的作者等等.<br>;;可以用 M-x make-header 自动生成文件头信息. <br>(add-to-list 'load-path&nbsp; "~/lisp/header")<br>(require 'header)<br>(setq make-header-hooks '(header-mode-line<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; header-blank<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; header-file-name<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; header-blank<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; header-copyright<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; header-blank<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; header-author<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; header-creation-date<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; header-modification-author<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; header-modification-date<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; header-update-count<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; header-blank<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; header-history<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; header-blank<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ))<br>(setq header-copyright-notice "&nbsp; 源成工作室 作品" )<br>(make-local-variable 'user-full-name)<br>(make-local-variable 'user-mail-address)</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;===================== 文件头header设置结束 ==========================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;===================== template设置 =================================<br>(add-to-list 'load-path&nbsp; "~/lisp/template")<br>(require 'template)<br>(template-initialize)</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;===================== template设置结束===============================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;===================== cedet设置 =====================================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(add-to-list 'load-path "~/lisp/cedet-1.0pre3/speedbar")<br>(add-to-list 'load-path "~/lisp/cedet-1.0pre3/eieio")<br>(add-to-list 'load-path "~/lisp/cedet-1.0pre3/semantic")<br>(add-to-list 'load-path "~/lisp/cedet-1.0pre3/common")<br>(require 'cedet)<br>;; (add-to-list 'load-path "~/lisp/ecb-2.32")<br>;; (require 'ecb)</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; Ecb的操作:<br>;; C-c . g d 目录列表窗口<br>;; C-c . g s 源码窗口<br>;; C-c . g m 方法和变量窗口<br>;; C-c . g h 历史窗口<br>;; C-c . g l 最后选择过的编辑窗口<br>;; C-c . g 1 编辑窗口1<br>;; C-c . g n 编辑窗口n<br>;; C-c . l c 选择版面<br>;; C-c . l r 重画版面<br>;; C-c . l t 拴牢版面(锁定版面)<br>;; C-c . l w 拴牢可见的ecb窗口<br>;; C-c . \&nbsp;&nbsp; 拴牢编绎窗口</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; 其中l为小写字母(L),大家别看错!!</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;======================cedet设置结束==================================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">&nbsp;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;;;;;;;;;;;;;;;;;;;;;;;;;; 自定义lisp包设置结束&nbsp; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">&nbsp;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;=====================&nbsp;&nbsp;&nbsp; GNUS设置&nbsp; =================================<br>(setq gnus-select-method '(nntp "news.yaako.com"))<br>(setq gnus-default-subscribed-newsgroups<br>&nbsp; '( "cn.comp.os.linux")) ;;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; (add-to-list 'gnus-secondary-select-methods '(nntp "news.yourSecondProvider.net"))<br>;; (add-to-list 'gnus-secondary-select-methods '(nntp "news.yourThirdProvider.net"))<br>;;想让 Gnus 在多个的服务器上取新闻</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;;中文相关<br>(set-language-environment 'Chinese-GB)<br>(setq gnus-default-charset 'chinese-iso-8bit<br>&nbsp;&nbsp; gnus-group-name-charset-group-alist '((".*" . chinese-iso-8bit))<br>&nbsp;&nbsp; gnus-summary-show-article-charset-alist<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '((1 . chinese-iso-8bit)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2 . gbk)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3 . big5)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (4 . utf-8))<br>&nbsp;&nbsp; gnus-newsgroup-ignored-charsets<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '(unknown-8bit x-unknown iso-8859-1))</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>(setq mail-sources<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '((pop :server "pop3.163.com" ;; 在这里设置pop3服务器<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :user "66656799" ;; 用户名<br>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :port "110"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :password "wcmwlw"))) ;; 密码<br>(setq gnus-secondary-select-methods '((nnfolder "")))</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">&nbsp;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq user-full-name "getmails") ;; 外发的邮件采用这个名字<br>(setq user-mail-address "<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#103;&#101;&#116;&#109;&#97;&#105;&#108;&#115;&#64;&#49;&#54;&#51;&#46;&#99;&#111;&#109;">getmails@163.com</a>") ;;外发的邮件采用这个地址<br>(setq smtpmail-auth-credentials<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '(("smtp.163.com" ;; SMTP服务器<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "getmails" ;; 用户名<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "wcmwlw"))) ;; 密码<br>(setq smtpmail-default-smtp-server "smtp.163.com")<br>(setq smtpmail-smtp-server "smtp.163.com")<br>(setq message-send-mail-function 'smtpmail-send-it)</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq nnmail-expiry-wait 3);;Gnus 默认的保质期是7天，如果你觉得时间不合适，可以自己设置</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(add-hook 'gnus-article-prepare-hook<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (lambda ()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq fill-column 60)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (gnus-article-fill-long-lines)))<br>;;让gnus把这种邮件排版整齐后再显示给我们看</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(add-hook 'gnus-article-prepare-hook 'gnus-article-date-local)<br>;;将邮件的发出时间转换为本地时间</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(gnus-add-configuration '(article<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vertical 1.0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (summary .4 point)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (article 1.0))))<br>;; 改变阅读新闻时窗口的布局，窗口划分为上4下6（比例）</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(eval-after-load "mm-decode"<br>&nbsp; '(progn<br>&nbsp;&nbsp;&nbsp;&nbsp; (add-to-list 'mm-discouraged-alternatives "text/html")<br>&nbsp;&nbsp;&nbsp;&nbsp; (add-to-list 'mm-discouraged-alternatives "text/richtext"))) <br>;另外，有些用web方式发出的邮件里有html，加入下面的设置，只看其中的<br>;plain text部分：</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq gnus-thread-sort-functions<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (not gnus-thread-sort-by-date)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (not gnus-thread-sort-by-number)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ))<br>;;排序</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)<br>;; 有时订阅了很多新闻组，堆在一起不好管理。这个功能可以创建目录来分层管理</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq gnus-read-newsrc-file nil&nbsp; gnus-save-newsrc-file nil)</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;========================&nbsp;&nbsp; GNUS设置结束&nbsp; ===============================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">&nbsp;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;=========================== 方便编程操作的设置=====================================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq compile-command "make")<br>;;emacs的默认compile命令是调用make -k，我把它改成了make。你也可以把它改成其他的，比如gcc之类的.</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;把c语言风格设置为k&amp;r风格<br>(add-hook 'c-mode-hook<br>'(lambda ()<br>(c-set-style "k&amp;r")))</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;把C++语言风格设置为stroustrup风格<br>(add-hook 'c++-mode-hook<br>'(lambda()<br>(c-set-style "stroustrup"))) </p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;========================================================================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(load-library "hideshow") <br>(add-hook 'c-mode-hook 'hs-minor-mode)<br>(add-hook 'c++-mode-hook 'hs-minor-mode)<br>(add-hook 'java-mode-hook 'hs-minor-mode)<br>(add-hook 'perl-mode-hook 'hs-minor-mode)<br>(add-hook 'php-mode-hook 'hs-minor-mode)<br>(add-hook 'emacs-lisp-mode-hook 'hs-minor-mode)<br>;;能把一个代码块缩起来，需要的时候再展开<br>;;&nbsp; M-x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hs-minor-mode<br>;;&nbsp; C-c @ ESC C-s&nbsp;&nbsp;&nbsp; show all<br>;;&nbsp; C-c @ ESC C-h&nbsp;&nbsp;&nbsp; hide all<br>;;&nbsp; C-c @ C-s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show block<br>;;&nbsp; C-c @ C-h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hide block<br>;;&nbsp; C-c @ C-c toggle hide/show</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;========================================================================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(defun my-c-mode-auto-pair ()<br>&nbsp; (interactive)<br>&nbsp; (make-local-variable 'skeleton-pair-alist)<br>&nbsp; (setq skeleton-pair-alist&nbsp; '(<br>&nbsp;&nbsp;&nbsp; (?` ?` _ "''")<br>&nbsp;&nbsp;&nbsp; (?\( ?&nbsp; _ " )")<br>&nbsp;&nbsp;&nbsp; (?\[ ?&nbsp; _ " ]")<br>&nbsp;&nbsp;&nbsp; (?{ \n &gt; _ \n ?} &gt;)))<br>&nbsp; (setq skeleton-pair t)<br>&nbsp; (local-set-key (kbd "(") 'skeleton-pair-insert-maybe)<br>&nbsp; (local-set-key (kbd "{") 'skeleton-pair-insert-maybe)<br>&nbsp; (local-set-key (kbd "`") 'skeleton-pair-insert-maybe)<br>&nbsp; (local-set-key (kbd "[") 'skeleton-pair-insert-maybe))<br>(add-hook 'c-mode-hook 'my-c-mode-auto-pair)<br>(add-hook 'c++-mode-hook 'my-c-mode-auto-pair)<br>;;输入左边的括号，就会自动补全右边的部分.包括(), "", [] , {} , 等等。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;=========================================================================<br>(setq semantic-load-turn-everything-on t) <br>;(add-hook 'semantic-init-hooks 'semantic-idle-completions-mode)</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq semanticdb-project-roots <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (list<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (expand-file-name "/")))<br>;;配置Semantic的检索范围</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq semanticdb-default-save-directory "~/")<br>;;设置semantic.cache路径</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key [(meta ?/)] 'hippie-expand)<br>;;M-/ 绑定到 hippie-expand</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(autoload 'senator-try-expand-semantic "senator")<br>(setq hippie-expand-try-functions-list <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '(senator-try-expand-semantic&nbsp; ;优先调用了senator的分析结果<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try-expand-dabbrev&nbsp;&nbsp;&nbsp;&nbsp; ;当前的buffer补全<br>&nbsp;try-expand-dabbrev-visible&nbsp;&nbsp; ;别的可见的窗口里寻找补全<br>&nbsp;try-expand-dabbrev-all-buffers&nbsp; ;所有打开的buffer<br>&nbsp;try-expand-dabbrev-from-kill<br>&nbsp;try-complete-file-name-partially<br>&nbsp;try-complete-file-name<br>&nbsp;try-expand-all-abbrevs<br>&nbsp;try-expand-list<br>&nbsp;try-expand-line<br>&nbsp;try-complete-lisp-symbol-partially<br>&nbsp;try-complete-lisp-symbol))<br>;设置 hippie-expand 的补全方式。它是一个优先列表， hippie-expand 会优先使用表最前面的函数来补全。</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;=========================================================================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;==========================================================================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">&nbsp;</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;========================== 方便编程操作设置结束====================================</p>
<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>&nbsp;</p>
<img src ="http://www.cppblog.com/guangping/aggbug/11683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guangping/" target="_blank">王光平</a> 2006-08-25 09:35 <a href="http://www.cppblog.com/guangping/archive/2006/08/25/11683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初步认识emacs的lisp编程</title><link>http://www.cppblog.com/guangping/archive/2006/07/19/10210.html</link><dc:creator>王光平</dc:creator><author>王光平</author><pubDate>Wed, 19 Jul 2006 03:04:00 GMT</pubDate><guid>http://www.cppblog.com/guangping/archive/2006/07/19/10210.html</guid><wfw:comment>http://www.cppblog.com/guangping/comments/10210.html</wfw:comment><comments>http://www.cppblog.com/guangping/archive/2006/07/19/10210.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guangping/comments/commentRss/10210.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guangping/services/trackbacks/10210.html</trackback:ping><description><![CDATA[参考：Learning GNU <a target="_blank" href="http://www.gnu.org/software/emacs/emacs.html" title="the Emacs pages at www.gnu.org">Emacs</a> 3/e，9.8.The Lisp Modes，11.Emacs Lisp Programming<br /><br />Emacs有三种Lisp模式，其命令名称如下：<br /><br /><table style="width: 568px; height: 66px;" align="" border="1" cellpadding="1" cellspacing="1"><tbody><tr><td> emacs-lisp-mode</td><td> 用于Emacs Lisp代码的编辑（文件名.emacs或后缀.el）</td></tr><tr><td> lisp-mode</td><td> 用来编辑另一个Lisp系统的Lisp代码（后缀.l或.lisp）</td></tr><tr><td> lisp-interaction-mode</td><td> 用来编辑和运行Emacs Lisp代码（交互模式）</td></tr></tbody></table><br />本文只讨论 lisp-interaction-mode模式。<br /><br />缺省情况下*scratch*就是处于这种模式，无后缀的文件名一般也会让Emacs进入Lisp交互模式，当然你可以使用变量auto-mode-alist进行设置。<br /><br />键
入 M-x lisp-interaction-mode
Enter（回车）可以让任何buffer进入Lisp交互模式；如要新建一个Lisp交互buffer，只需键入C-x
b（即switch-to-buffer命令），输入buffer名，然后令该buffer进入Lisp交互模式。<br /><br />Lisp交互模式和
Emacs
Lisp模式完全一致，除一个重要特性外：C-j已绑定到eval-print-last-sexp命令上。该命令提取point之前的那个S-
expression，对其进行评估，然后在buffer里打印结果。如果要使用其它模式里绑定到C-j的常见功能newline-and-
indent，你必须按下Enter，并紧跟Tab键。<br /><br />记住
S-expression是任何符合Lisp语法的表达式。因此，可以使用
Lisp交互模式的C-j来检查变量的值，确认函数定义，运行函数等等。比如，如果你输入auto-save-interval并按下C-j，就会显示该
变量的值（缺省为300）。如果你输入一个defun并在其最右边的括号后按下C-j，Emacs会保存所定义的函数（供以后调用）并输出其名称；这种情
况下，C-j类似C-M-x（即eval-defun命令），不过光标必须位于所定义的函数之后（因为有可能在定义前或中间）。如果你调用了一个函数，
Emacs就会评估（运行）该表达式并显示函数的所有返回值。<br /><br />Lisp交互模式的C-j提供了很棒的功能，你可以用它来增量方式开发和调试Emacs Lisp代码；因为Emacs Lisp是种“真正的”Lisp，它甚至可用来开发其它Lisp系统的代码片断。<br /><h3>基本Lisp实体</h3>你需要熟悉Lisp基本元素包括函数、变量和atom（原子）。函数是Lisp的唯一程序单元（program unit），涵盖了其它语言的过程、子程序、程序甚至操作符等标记。<br /><br />函
数被定义作上述实体的列表（list），通常是对其它现存函数调用的列表。所有函数都有返回值（return
value）（类似Perl函数和non-void
Java函数）；函数的返回值就是list里最后一项的值，一般是最后调用的函数返回的值。在其它函数里的函数调用等价于其它语言的语句
（statement），函数的语法如下：<br /><br /><span class="Code">(function-name argument1 argument2 ...)</span><br /><br />等价于Java的：<br /><br /><span class="Code">method_name (argument1, argument2, ...);</span><br /><br />这一语法用于所有函数，包括那些等价于其它语言的算术或比较运算符。例如，在Java或Perl里2加4，你会用表达式2+4，而在Lisp里你会使用如下写法：<br /><br /><span class="Code">(+ 2 4)</span><br /><br />类似的，4 &gt;= 2的Lisp方式：<br /><br /><span class="Code">(&gt;= 4 2)</span><br /><br />Lisp中的变量和其它语言的相似，不过没有类型。Lisp变量能够推测任何类型的值（值本身没有类型，不过变量对其能存放的内容不加任何限制）。<br /><br />原子（atom）是个任意类型的值，包括整数、浮点（实）数、字符、字符串、布尔值、符号（symbol）和Emacs特殊类型如buffer、window和process。各种atom的语法如下：<br /><ul><li>整数：和你常用的一样，有符号，范围-2+27至2+27 - 1；</li></ul><ul><li>浮点数：可用十进制和科学计数法表示的实数。例如5489可写成5489、5.489e3、546.9e1等；</li></ul><ul><li>字符：以问号开头，如 ?a 。Esc、Newline和Tab可分别简写为\e、\n和\t；其它控制字符可以加\C-前缀来表示，例如C-a表示为?\C-a。整数也可用来表示字符，如ASCII表等。</li></ul><ul><li>字符串：用双引号包围；字符串里的引号标记和\需要加上\，"Jane said, \"See Dick run.\""是个合法字符串。字符串可以分割成多行，不需特殊语法。结束引号前的所有内容包括所有断行符都是字符串值的一部分。</li></ul><ul><li>布尔值：大部分情况下真值为t，假值为nil，如果能预估到布尔值，则任何非nil值都被看作真值。nil也被用作null或nonvalue。</li><br /><li>符号：Lisp实体名，如变量或函数名。有时需要引用实体的名字而非其值，这时可以在名字前加上单引号（'）。<br /></li></ul>setq用来赋值给变量，是个函数，而不象其它语言里用来赋值的专门语法=或:=。setq接收两个参数：一个变量名和一个值。也可以进行多次赋值，如：<br /><blockquote>(setq thisvar thisvalue<br />     thatvar thatvalue<br />     theothervar theothervalue)</blockquote>也可用其它方法设置值或变量，不过setq是使用最广的方法。<br /><h3>函数定义</h3>首先熟悉一下Lisp语法的特殊表示。- 用作“割断”字符用来分隔变量、函数等名称里的字（word），这是Lisp编程惯用法，类似C和Ada里的“_”。<br /><br />A
more important issue has to do with all of the parentheses in Lisp
code. Lisp is an old language that was designed before anyone gave much
thought to language syntax (it was still considered amazing that you
could use any language other than the native processor's binary
instruction set), so its syntax is not exactly programmer-friendly. Yet
Lisp's heavy use of lists¡ªand thus its heavy use of parentheses¡ªhas
its advantages, as we'll see toward the end of this chapter.<br /><br />让我们从一个实例开始。<br /><blockquote>1  (defun count-words-buffer ( )<br />2    (let ((count 0))<br />3      (save-excursion<br />4        (goto-char (point-min))<br />5        (while (&lt; (point) (point-max))<br />6          (forward-word 1)<br />7          (setq count (1+ count)))<br />8        (message "buffer contains %d words." count))))</blockquote>defun：
指定函数名和参数来定义函数。注意defun本身是一个函数――被调用时，定义一个新函数。（defun返回把所定义的函数作为一个symbol返回。）
函数的参数显示为在括号内的一个名字list；本例，函数没有参数。如果在参数前加关键字&amp;optional就表示参数是optional（可选
的）。如果参数是optional的，在函数调用时未指定该参数，则认为其值为nil。<br /><blockquote>(let ((var1 value1) (var2 value2) ... )<br />  statement-block)</blockquote>let：1.定义（或声明）一个变量list；2.变量设置初始值，同setq；3.创建一个语句块（类似函数体），在此块内这些变量可用，let块即这些变量的scope（作用域）。let里定义的变量可用setq改变其值，不过要小心使用setq。<br /><br />save
-excursion：Emacs内建函数，保存光标原来的位置（因为 count-words-buffer函数要移动光标以便计算字数）。调用
save-excursion就是要求Emacs记住实例函数开始执行时的光标位置，并在执行完函数体内的所有语句后返回至初始光标位置。<br /><br />goto
-char：Emacs内建函数，其参数是个（内嵌）函数调用，调用内建函数point-min。point是Emacs内部名称，表示光标的当前位置。
point-min返回当前buffer里第一个字符的位置值，几乎总是1；这样goto-char调用时其参数值为1，效果等同于把point移至
buffer起始处。<br /><br /><span class="Code">(while condition     statement-block)</span><br /><br />和let
及save-excursion一样，while也建立了一个语句块。condition是个值（atom、变量或返回一个值的函数）。while对这个
值进行测试，如果其值不是nil，则认为条件（condition）为真，语句块得以执行，然后condition再次被测试，之后重复上述过程。当然也
可以写个无限循环，如果你试图执行这样的语句，Emacs会挂起，键入C-g终止。<br /><br />在实例函数中，condition是函数 &lt;
，即带两个参数的小于函数，类似Java或Perl里的<运算符。第一个参数是另一个函数，它返回point的当前字符位置；第二个参数返回 buffer里的最大（最后）字符位置，即buffer的长度。函数="">&lt; （和其它关系函数）返回一个布尔值，t 或 nil。<br /><br />上
述循环的语句块由两条语句组成。第6行会把point往前移动一个字（word，即相当于M-f）。第7行，循环计数器加一；函数 1+ 是(+ 1
variable-name)的简写方式。注意第三个右括号（第7行）和while前面的左括号匹配。这样，在计算字数时，while循环会让Emacs
一次一个字（word）遍历整个当前buffer。<br /><br />实例函数的最后一个语句使用内建函数message在minibuffer里打印一行信息，提示buffer所含的字数。message函数的格式类似C语言。<br /><br /><table style="width: 569px; height: 212px;" align="" border="1" cellpadding="1" cellspacing="1"><caption>Message格式字符串</caption><tbody><tr><th> 格式字符串</th><th> 含义</th></tr><tr><td> %s</td><td> 字符串或symbol</td></tr><tr><td> %c</td><td> 字符 </td></tr><tr><td> %d</td><td> 整数</td></tr><tr><td> %e</td><td> 科学计数法表示的浮点数</td></tr><tr><td> %f</td><td> 十进制表示的浮点数</td></tr><tr><td> %g</td><td> 任意格式的浮点数，产生最短的字符串</td></tr></tbody></table><br /><h3>将Lisp函数变为Emacs命令</h3>函
数
count-words-buffer已编写完成，接下来该如何运行？在交互模式中，可以把光标移到函数的结束括号，然后键入C-j（或
Linefeed），让Emacs执行函数定义。你应该看到该函数的名字会再次出现在buffer里；defun函数的返回值就是已定义的符号（即函数名
称）。<br /><br />函数定义之后，可以在Lisp交互窗口中输入一行 (count-words-buffer) ，然后在结束括号后再次按下 C-j 。<br /><br />如
果你象其它Emacs命令一样用M-x来执行上述函数，M-x count-words-buffer Enter，会得到错误提示信息 [No
match]。这是因为你并未在Emacs中“注册”该函数，使其可供交互（interactive）使用。实现这一功能的函数是
interactive ，形式如下：<br /><br /><span class="Code">(interactive "prompt-string")</span><br /><br />上述语句必须出现在函数开始处，即紧随defun和文档说明字符串所在行之后。使用 interactive 会让Emacs把函数注册为一个命令，并提示用户输入defun语句中声明的参数。提示字符串为可选。<br /><br />提示字符串有一个特殊的格式：你要为想提示用户输入的每个参数都提供一段提示字符串，这些段用“\n”分隔。<br /><br /><table style="width: 572px; height: 360px;" align="" border="1" cellpadding="1" cellspacing="1"><caption>用于interactive函数的参数代码</caption><tbody><tr><th>代 码<br /></th><th>提示用户输入</th></tr><tr><td>  b  <br /></td><td> 现存buffer的名称</td></tr><tr><td>  e  <br /></td><td> 事件（鼠标动作或 function key press）</td></tr><tr><td>  f  <br /></td><td> 现存文件的名称 </td></tr><tr><td>  n  <br /></td><td>  数字（整数）</td></tr><tr><td>  s  <br /></td><td> 字符串</td></tr><tr><td></td><td> 上述代码都有一个大写的变种 </td></tr><tr><td>  B  </td><td> 可能不存在的buffer名称 </td></tr><tr><td>  F</td><td> 可能不存在的文件名称</td></tr><tr><td>  N  <br /></td><td> 数字，unless command is invoked with a prefix argument, in which case use the prefix argument and skip this prompt</td></tr><tr><td>  S </td><td> 符号</td></tr></tbody></table><br />示例：<br /><blockquote>(defun replace-string (from to)<br />  (interactive "sReplace string: \nsReplace string %s with: ")<br />  ...)</blockquote>回
到 count-words-buffer 命令：它不需参数，因此 interactive
命令不需要提示字符串。另外可以再给我们的命令添加一个文档说明字符串（doc
string），它会显示在describe-function（C-h f）之类的在线帮助工具中。Doc
string是普通的Lisp字符串，可选，行数长度任意，不过一般来说，第一行是个简要完整的句子，说明命令的功能。注意字符串里的任意双引号前必须加
上 \ 。<br /><blockquote>(defun count-words-buffer ( )<br />  "Count the number of words in the current buffer; <br />print a message in the minibuffer with the result."<br /><br />  (interactive)<br />  (save-excursion<br />    (let ((count 0))<br />      (goto-char (point-min))<br />      (while (&lt; (point) (point-max))<br />        (forward-word 1)<br />        (setq count (1+ count)))<br />      (message "buffer contains %d words." count))))</blockquote></运算符。第一个参数是另一个函数，它返回point的当前字符位置；第二个参数返回><img src ="http://www.cppblog.com/guangping/aggbug/10210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guangping/" target="_blank">王光平</a> 2006-07-19 11:04 <a href="http://www.cppblog.com/guangping/archive/2006/07/19/10210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用wvdial和ppp轻松上网</title><link>http://www.cppblog.com/guangping/archive/2006/07/12/9713.html</link><dc:creator>王光平</dc:creator><author>王光平</author><pubDate>Wed, 12 Jul 2006 00:51:00 GMT</pubDate><guid>http://www.cppblog.com/guangping/archive/2006/07/12/9713.html</guid><wfw:comment>http://www.cppblog.com/guangping/comments/9713.html</wfw:comment><comments>http://www.cppblog.com/guangping/archive/2006/07/12/9713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guangping/comments/commentRss/9713.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guangping/services/trackbacks/9713.html</trackback:ping><description><![CDATA[
		<p>
		</p>
		<span style="font-size: 15pt; font-family: 宋体;">
				<!--[endif]-->
				<o:p>
				</o:p>
		</span>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">
						<span style="">
						</span>wvdial是linux下的智能化拨号工具,利用wvdial和ppp可以实现linux下的轻松上网。在整个过程中wvdial的作用是拨号并等待提示，并根据提示输入相应的用户名和密码等认证信息；ppp的作用是与拨入方协商传输数据的方法并维持该连接。<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">
						<!--[if !supportEmptyParas]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">一、wvdial及其相关配置<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">wvdial的功能很强大，会试探着去猜测如何拨号及登录到服务器，同时它还会对常见的错误智能的进行处理，不象chat一样,要求你去写登录脚本。
wvdial只有一个配置文件 /etc/wvdial.conf。wvdial的启动过程是这样的：首先载入wvdial.conf配置文件，然后再初始化modem并拨号，拨号后等待拨入方的响应，收到拨入方响应后则启动pppd。<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">
						<!--[if !supportEmptyParas]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">可以用wvdialconf程序自动生成wvdial.conf配置文件，自行该程序的格式为：<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">wvdialconf
/etc/wvdial.conf<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">在执行该程序的过程中，程序会自动检测你的modem的相关配置，包括可用的设备文件名，modem的波特率，初始化字符等等相关的拨号信息，并根据这些信息自动生成wvdial.conf配置文件。如果/etc/wvdial.conf文件已经存在时，再次执行该命令只会改变其中的
Modem、Band、Init等选项。一个典型的自动生成的配置文件可能是这样的：<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">
						<!--[if !supportEmptyParas]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<span style="font-family: 宋体;" lang="EN-US">[Dialer Defaults]<o:p></o:p></span>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">Modem = /dev/ttyS1<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">Baud = 115200<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">Init1 = ATZ<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">Init2 = ATQ0 V1 E1 S0=0 &amp;C1
&amp;D2 S11=55 +FCLASS=0<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">；<span lang="EN-US">Phone =<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">；<span lang="EN-US">Username =<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">；<span lang="EN-US">Password =<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">wvdial</span>
				<span style="font-family: 宋体;">的执行格式为</span>
				<span style="font-family: 宋体;">：<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">wvdial --help | --version | section<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">相关的说明如下</span>
				<span style="font-family: 宋体;">：<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">--help：</span>
				<span style="font-family: 宋体;">显示简单的帮助信息</span>
				<span style="font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">--version:</span>
				<span style="font-family: 宋体;">显示</span>
				<span style="font-family: 宋体;" lang="EN-US">wvdial</span>
				<span style="font-family: 宋体;">的版本号</span>
				<span style="font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">section:</span>
				<span style="font-family: 宋体;">这里的</span>
				<span style="font-family: 宋体;" lang="EN-US">section</span>
				<span style="font-family: 宋体;">有点象</span>
				<span style="font-family: 宋体;" lang="EN-US">windows</span>
				<span style="font-family: 宋体;">里的</span>
				<span style="font-family: 宋体;" lang="EN-US">ini</span>
				<span style="font-family: 宋体;">文件</span>
				<span style="font-family: 宋体;">，</span>
				<span style="font-family: 宋体;">一个</span>
				<span style="font-family: 宋体;" lang="EN-US">wvdial.conf</span>
				<span style="font-family: 宋体;">配置文件可以有好多个</span>
				<span style="font-family: 宋体;" lang="EN-US">section，</span>
				<span style="font-family: 宋体;">每一个</span>
				<span style="font-family: 宋体;" lang="EN-US"> section</span>
				<span style="font-family: 宋体;">由一些变量组成</span>
				<span style="font-family: 宋体;">，</span>
				<span style="font-family: 宋体;">即由</span>
				<span style="font-family: 宋体;">
				</span>
				<span style="font-family: 宋体;">变量</span>
				<span style="font-family: 宋体;">＝</span>
				<span style="font-family: 宋体;">值的语句组成</span>
				<span style="font-family: 宋体;">，</span>
				<span style="font-family: 宋体;">如上所示。使用wvdialconf自动生成配置文件时将会自动生成一些常用的变量说明如下：<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">Inherits=InheritedSection:<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">使用wvdialconf自动生成配置文件时将会自动生成[Dialer
Defaults],除此之外，你还可以自定义你自己的section。程序运行时，首先载入[Dialer Defaults]，然后再用指定的section的相应选项覆盖[Dialer
Defaults]的相应选项。比如，我们在 wvdial.conf中还有[Dialer Tom]，假如我们运行wvdail Tom，则系统将先读入[Dialer
Defaults]，然后再用[Dialer Tom]覆盖[Dialer Defaults]的相应选项。如果除了以上 的section之外还有[Dialer
169]并且内容如下：<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">[Dialer
Tom]<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">Username=tom<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">Password=xxx<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">Inherits=169<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">[Dialer
169]<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">Phone=169<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">如果这时候我们执行wvdial
Tom则系统将先读入[Dialer Defaults]，然后再用[Dialer Tom]覆盖[Dialer Defaults]的相应选项，最后再用[Dialer
169]的相应选项来覆盖前二者的相应选项。由此可见，利用wvdial，我们可以很方便地在不同的ISP或modem之间来回移动（假如你有几个ISP 或medom的话）。<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">Medom=/dev/ttySx：用于指定是用的medom，缺省的为/dev/medom。当然，在这里我们的medom是由wvdialconf自动检测并配置的，所以我们可以忽略该变量。<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">Band=57600：wvdial与modem通信的波特率，同上可以忽略。<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">Area
Code=xxxx ： 设置区号<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">Dial
Prefix=x: 假如你正在使用分机，拨外线需拨9时，可设该值为9。<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">Username=xxxx:登录时的用户名<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">
						<!--[if !supportEmptyParas]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">Passwd=xxxxxx:登录密码<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">Phone＝xxxxx:
所拨的号码<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">
						<!--[if !supportEmptyParas]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">PPPP
Path=:设置pppd所在的路径，缺省为/usr/sbin/pppd<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">
						<!--[if !supportEmptyParas]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">Force
Address=x.x.x.x :设置静态ip,一般的isp都会为你分配动态的ip地址。<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">New
PPPD= 1 or 0: pppd 2.3.0及其以上版本需要/etc/ppp/peers/wvdial文件，如果你的pppd是2.3.0以上版本请设为1.<o:p></o:p></span>
		</p>
		<span style="font-family: 宋体;">Auto
Reconnect=on :断线时是否自动重新连接，缺省设为是。<o:p></o:p></span>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">以上只是wvdial.conf中的常用选项，具体情参考wvdial手册。<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">
						<!--[if !supportEmptyParas]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">二、pppd及其相关配置<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">pppd的配置选项相对要复杂得多，你可以用命令行的形式引用有关的选项，也可以把要引用的选项写到/etc/ppp/options中进行引用。<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">下面的示例文件包含了最常用的选项及其相关的说明：<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">#
/etc/ppp/options<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">#
主机名称<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">mng.null.edu.cn<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">#
如果没有给定本地ip, pppd 将使用主机的第一个ip地址；<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">#
如果指定了"noipdefault" 选项, pppd将使用拨入方提供的ip地址<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">noipdefault<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">#
选定该选项, pppd 将接受拨入方提供的ip地址<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">
						<!--[if !supportEmptyParas]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">ipcp-accept-local<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">#
选定该选项, pppd 将接受拨入方自己的ip地址<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">ipcp-accept-remote<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">
						<!--[if !supportEmptyParas]-->#
设置缺省网关<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">defaultroute<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">#
在传输数据包之前，让拨入方先自我认证，注意一般的ISP（如169、163)都不包含该机 # 制，故应选中noauth<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">noauth<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US"># </span>
				<span style="font-family: 宋体;">使用硬件流控制</span>
				<span style="font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">crtscts<o:p></o:p></span>
		</p>
		<span style="font-family: 宋体;">#将拨号信息作日志<o:p></o:p></span>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">debug<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">以上只是options中的常用选项，具体情参考pppd手册。<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">
						<!--[if !supportEmptyParas]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">三、一个实例<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">下面让我们来看一个具体的应用，在该应用中我们实现了拨号和断开连接的自动化。涉及到的配置文件有：<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">/etc/wvdial.conf
：wvdial的配置文件<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">/etc/ppp/option : pppd</span>
				<span style="font-family: 宋体;">的配置文件</span>
				<span style="font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">/etc/ppp/ppp-on ：</span>
				<span style="font-family: 宋体;">拨号自动化脚本</span>
				<span style="font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">/etc/ppp/ppp-of : </span>
				<span style="font-family: 宋体;">断开连接自动化脚本</span>
				<span style="font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">
						<!--[if !supportEmptyParas]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">步骤一</span>
				<span style="font-family: 宋体;">：</span>
				<span style="font-family: 宋体;">确保</span>
				<span style="font-family: 宋体;" lang="EN-US">modem</span>
				<span style="font-family: 宋体;">已经正确连接</span>
				<span style="font-family: 宋体;">，<span lang="EN-US">linux</span></span>
				<span style="font-family: 宋体;">已检测并自动配置了该</span>
				<span style="font-family: 宋体;" lang="EN-US">modem<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">步骤二</span>
				<span style="font-family: 宋体;">：</span>
				<span style="font-family: 宋体;">运行</span>
				<span style="font-family: 宋体;" lang="EN-US">wvdialconf，</span>
				<span style="font-family: 宋体;">生成</span>
				<span style="font-family: 宋体;" lang="EN-US"> /etc/wvdial.conf </span>
				<span style="font-family: 宋体;">文件并修改如下</span>
				<span style="font-family: 宋体;">：<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">[Dialer Defaults]<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">
						<!--[if !supportEmptyParas]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">Modem = /dev/ttyS1<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">Baud = 115200<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">Init1 = ATZ<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">Init2 = ATQ0 V1 E1 S0=0 &amp;C1
&amp;D2 S11=55 +FCLASS=0<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">New PPPD= 1<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">[Dialer Tom]<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">Phone =<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">169<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">Username =<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">tom<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">Password = *******<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">步骤三</span>
				<span style="font-family: 宋体;">：</span>
				<span style="font-family: 宋体;">编辑并配置</span>
				<span style="font-family: 宋体;" lang="EN-US">/etc/ppp/options,</span>
				<span style="font-family: 宋体;">如下所示</span>
				<span style="font-family: 宋体;">：<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">noipdefault<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">
						<!--[if !supportEmptyParas]-->ipcp-accept-local<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">
						<!--[if !supportEmptyParas]-->ipcp-accept-remote<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">
						<!--[if !supportEmptyParas]-->defaultroute<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->noauth<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">
						<!--[if !supportEmptyParas]-->
						<!--[endif]--> crtscts<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->debug<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">
						<!--[if !supportEmptyParas]-->
						<!--[endif]--> 步骤四</span>
				<span style="font-family: 宋体;">：</span>
				<span style="font-family: 宋体;">编写自动化脚本</span>
				<span style="font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">1.</span>
				<span style="font-family: 宋体;">拨号脚本</span>
				<span style="font-family: 宋体;" lang="EN-US"> /etc/ppp/ppp-on:<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">#!/bin/sh<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US"># This script initiates the ppp
connections by wvdial<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">wvdial tom &amp;<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">2.</span>
				<span style="font-family: 宋体;">断开连接自动化脚本</span>
				<span style="font-family: 宋体;" lang="EN-US">/etc/ppp/ppp-off:<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">#!/bin/sh<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">
						<!--[if !supportEmptyParas]-->
						<!--[endif]--> #!stop wvdial<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">killall wvdial<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US"># If the ppp0 pid file is present
then the program is running. Stop it<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">
						<!--[if !supportEmptyParas]-->
						<!--[endif]--> if [ -r /var/run/ppp0.pid ]; then<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">kill -INT `cat /var/run/ppp0.pid`<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">echo "PPP link to ppp0
terminated."<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">else<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">echo "ERROR: PPP link is not
active on ppp0"<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">exit 0<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">fi<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;" lang="EN-US">exit 1<o:p></o:p></span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">
						<!--[if !supportEmptyParas]-->
						<!--[endif]--> 编辑完后</span>
				<span style="font-family: 宋体;">，</span>
				<span style="font-family: 宋体;">执行</span>
				<span style="font-family: 宋体;" lang="EN-US"> chmod u+x /etc/ppp/ppp* </span>
				<span style="font-family: 宋体;">改变文件权限。到此大功告成</span>
				<span style="font-family: 宋体;">，</span>
				<span style="font-family: 宋体;">以后只要运行</span>
				<span style="font-family: 宋体;" lang="EN-US"> /etc/ppp/ppp-on </span>
				<span style="font-family: 宋体;">便自动拨号</span>
				<span style="font-family: 宋体;">，</span>
				<span style="font-family: 宋体;">执行</span>
				<span style="font-family: 宋体;" lang="EN-US"> /etc/ppp/ppp-of </span>
				<span style="font-family: 宋体;">便自动断开连接。</span>
				<span style="font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
<img src ="http://www.cppblog.com/guangping/aggbug/9713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guangping/" target="_blank">王光平</a> 2006-07-12 08:51 <a href="http://www.cppblog.com/guangping/archive/2006/07/12/9713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mount 常见使用方法</title><link>http://www.cppblog.com/guangping/archive/2006/07/12/9712.html</link><dc:creator>王光平</dc:creator><author>王光平</author><pubDate>Wed, 12 Jul 2006 00:43:00 GMT</pubDate><guid>http://www.cppblog.com/guangping/archive/2006/07/12/9712.html</guid><wfw:comment>http://www.cppblog.com/guangping/comments/9712.html</wfw:comment><comments>http://www.cppblog.com/guangping/archive/2006/07/12/9712.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guangping/comments/commentRss/9712.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guangping/services/trackbacks/9712.html</trackback:ping><description><![CDATA[
		<p>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-size: 15pt; font-family: 宋体;" lang="X-NONE">
				</span>
				<span style="font-family: 宋体;" lang="X-NONE">mount </span>
				<span style="font-family: 宋体;">命令： 格式：<span lang="X-NONE">mount [-</span>参数<span lang="X-NONE">] [</span>设备名称<span lang="X-NONE">] [</span>挂载点<span lang="X-NONE">] <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">常用的参数：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>-t&lt;&lt;/span&gt;
				<span style="font-family: 宋体;">文件系统类型<span lang="X-NONE">&gt; </span>指定设备的文件系统类型，常见的有：<span lang="X-NONE"><o:p></o:p></span></span></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 5.85pt 36pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>minix linux</span>
				<span style="font-family: 宋体;">最早使用的文件系统<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 5.85pt 36pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>ext2 linux</span>
				<span style="font-family: 宋体;">目前常用的文件系统<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 5.85pt 36pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>MS-DOS</span>
				<span style="font-family: 宋体;">的<span lang="X-NONE">fat</span>，就是<span lang="X-NONE">fat16 vfat <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 5.85pt 36pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>windows98</span>
				<span style="font-family: 宋体;">常用的<span lang="X-NONE">fat32 <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 5.85pt 36pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>nfs </span>
				<span style="font-family: 宋体;">网络文件系统<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 5.85pt 36pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>iso9660 CD-ROM</span>
				<span style="font-family: 宋体;">光盘标准文件系统<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 5.85pt 36pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>ntfs windows NT 2000</span>
				<span style="font-family: 宋体;">的文件系统<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 5.85pt 36pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>hpfs OS/2</span>
				<span style="font-family: 宋体;">文件系统<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 5.85pt 36pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>auto </span>
				<span style="font-family: 宋体;">自动检测文件系统<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>-o&lt;&lt;/span&gt;
				<span style="font-family: 宋体;">选项<span lang="X-NONE">&gt; </span>指定挂载文件系统时的选项。有些也可用在<span lang="X-NONE">/etc/fstab</span>中。常用的有：<span lang="X-NONE"><o:p></o:p></span></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
						<span style="">
						</span>codepage=XXX </span>
				<span style="font-family: 宋体;">代码页<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>iocharset=XXX </span>
				<span style="font-family: 宋体;">字符集<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>ro </span>
				<span style="font-family: 宋体;">以只读方式挂载<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>rw </span>
				<span style="font-family: 宋体;">以读写方式挂载<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>nouser </span>
				<span style="font-family: 宋体;">使一般用户无法挂载<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>user </span>
				<span style="font-family: 宋体;">可以让一般用户挂载设备<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>-o </span>
				<span style="font-family: 宋体;">参数里的<span lang="X-NONE">codepage iocharset</span>选项。<span lang="X-NONE">codepage</span>指定文件系统的代码页，简体中文中文代码是<span lang="X-NONE">936</span>；<span lang="X-NONE">iocharset</span>指定字符集，简体中文一般用<span lang="X-NONE">cp936</span>或<span lang="X-NONE"> gb2312</span>。 （我对<span lang="X-NONE">codepage</span>和<span lang="X-NONE">iocharset</span>不是特别了解<span lang="X-NONE">,</span>试了<span lang="X-NONE">UFT-8</span>没有成功）<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>mount</span>
				<span style="font-family: 宋体;">举例：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">1. </span>
				<span style="font-family: 宋体;">加挂<span lang="X-NONE"> fat </span>文件系统 　<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>mount -t vfat -o
codepage=936,iocharset=cp936 /dev/hda5 /mnt/d <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">cp936</span>
				<span style="font-family: 宋体;">是指简体中文，<span lang="X-NONE">cp950</span>是指繁体中文。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">2. </span>
				<span style="font-family: 宋体;">加挂<span lang="X-NONE">NTFS</span>文件系统 可以通过编译内核，我没用过。 也可通过在<span lang="X-NONE"> http://linux-ntfs.sourceforge.net/ </span>下载<span lang="X-NONE">NTFS</span>补丁。
以下为转载别人，忘记出处）<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">3. </span>
				<span style="font-family: 宋体;">加挂<span lang="X-NONE">usb </span>优盘<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>Linux</span>
				<span style="font-family: 宋体;">对<span lang="X-NONE">USB</span>设备有很好的支持，在你插入<span lang="X-NONE">U</span>盘后，<span lang="X-NONE">U</span>盘被识别为一个<span lang="X-NONE">SCSI</span>盘，通常您用以下命令就能加挂<span lang="X-NONE">U</span>盘上的文件系统 ：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>mount /dev/sda1 /usb <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">同样对于中文的文件名和目录名会出现乱码的问题可以指定字符集，命令类似于上面对<span lang="X-NONE">FAT32</span>介绍的：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>mount /dev/sda1 /usb -o
pagecode=936,iocharset=cp936 <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">4. </span>
				<span style="font-family: 宋体;">加挂<span lang="X-NONE">Linux</span>系统通过<span lang="X-NONE">samba</span>共享出来的目录<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">　　利用<span lang="X-NONE">samba</span>共享出来的目录其实很难说其原来是哪种文件系统，不过这一点不重要，只要它对用户是透明的就好啦。加挂时，我们指定类型为<span lang="X-NONE">smbfs</span>，在加挂<span lang="X-NONE">samba</span>共享的分区时，也会出现中文的文件名和目录名乱码情况，可以用以下命令加挂：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">　<span lang="X-NONE"><span style=""></span>mount -t smbfs -o
username=terry,password=terry,codepage=936,iocharset=cp936 </span>　　<span lang="X-NONE">//terry-linux/terry /mp3/ <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">　　<span lang="X-NONE"> mount -t smbfs -o </span>　　<span lang="X-NONE">username=terry,password=terry,codepage=936,iocharset=cp936
</span>　　<span lang="X-NONE">//192.168.100.228/terry /mp3/<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">　　注意：你可以不直接写<span lang="X-NONE">password=terry</span>这个参数，系统界时会要你输入密码，这样就可以防止有人直接看到你的密码。视具体情况而定，<span lang="X-NONE">-o</span>后面的参数可以对应增减。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">5. </span>
				<span style="font-family: 宋体;">加挂<span lang="X-NONE">Window</span>系统共享出来的目录<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">　　在局域网中，常常需要去访问其它<span lang="X-NONE">Windows</span>系统共享出来的目录，在<span lang="X-NONE">Linux</span>下，安装了<span lang="X-NONE">samba</span>后就可以使用<span lang="X-NONE">samba</span>中带的命令来访问<span lang="X-NONE">Windows</span>机器的共享资源。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">　　用<span lang="X-NONE">smbclient</span>来列出<span lang="X-NONE">Windows</span>机器的共享资源：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">　　<span lang="X-NONE">smbclient -L 192.168.100.111 <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">　　根据上面所列出<span lang="X-NONE">Windows</span>的共享资源后，可以选择需要加挂到本地<span lang="X-NONE">Linux</span>中去的<span lang="X-NONE">Windows</span>的共享资源，然后使用<span lang="X-NONE">smbmount</span>或<span lang="X-NONE">mount</span>来加挂，请参照下面几条命令： 　　<span lang="X-NONE"><span style=""></span><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>smbmount
//192.168.100.111/public /public/ <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">　　<span lang="X-NONE">mount //192.168.100.111/d /mnt/cdrom -o username=terry (</span>这样要在命令行输入密码的<span lang="X-NONE">) <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">　　<span lang="X-NONE">mount //192.168.100.111/d /mnt/cdrom -o username=terry34 (</span>这样则不必在命令行输入密码<span lang="X-NONE">)<o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">　　注：除了上面介绍的命令行方法之外，这时最好的方法就是使用其它的客户端，如<span lang="X-NONE">LinNeighborhood</span>、<span lang="X-NONE">networkneighbours</span>、<span lang="X-NONE">ksmbshare</span>等，请参考其它文章。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>mount</span>
				<span style="font-family: 宋体;">自动挂在文件系统， 通常有<span lang="X-NONE">2</span>种方法：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">　　方法<span lang="X-NONE">1. </span>把加挂的命令放在<span lang="X-NONE">/etc/rc.d/rc.local</span>中。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<span style="font-size: 12pt; font-family: 宋体;" lang="X-NONE">
				<span style="">
				</span>
		</span>
		<span style="font-size: 12pt; font-family: 宋体;">　　方法<span lang="X-NONE">2. </span>修改分区配置文件<span lang="X-NONE">/etc/fstab</span>，在启动时加挂文件系统。</span>
<img src ="http://www.cppblog.com/guangping/aggbug/9712.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guangping/" target="_blank">王光平</a> 2006-07-12 08:43 <a href="http://www.cppblog.com/guangping/archive/2006/07/12/9712.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tar命令的使用</title><link>http://www.cppblog.com/guangping/archive/2006/05/23/7534.html</link><dc:creator>王光平</dc:creator><author>王光平</author><pubDate>Tue, 23 May 2006 07:24:00 GMT</pubDate><guid>http://www.cppblog.com/guangping/archive/2006/05/23/7534.html</guid><wfw:comment>http://www.cppblog.com/guangping/comments/7534.html</wfw:comment><comments>http://www.cppblog.com/guangping/archive/2006/05/23/7534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guangping/comments/commentRss/7534.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guangping/services/trackbacks/7534.html</trackback:ping><description><![CDATA[
		<p>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">
						<span style="">
						</span>对许多用户来说，在<span lang="X-NONE">DOS</span>和<span lang="X-NONE">Windows</span>环境下利用工具软件<span lang="X-NONE">WinZip</span>、<span lang="X-NONE">ARJ</span>等压缩或解压文件是比较容易的事。但是，在<span lang="X-NONE">Linux</span>中如何对文件进行压缩与解压呢？<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
						<b>
								<span style="">
								</span>
						</b>
				</span>
				<b>
						<span style="font-family: 宋体;">用<span lang="X-NONE">tar</span>建立存档</span>
				</b>
				<span style="font-family: 宋体;" lang="X-NONE">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>tar</span>
				<span style="font-family: 宋体;">是“<span lang="X-NONE">tape archive</span>”<span lang="X-NONE">(</span>磁带存档<span lang="X-NONE">)</span>的简称，它出现在还没有软盘驱动器、硬盘和光盘驱动器的计算机早期阶段。那时软件的发行和备份都需要大卷的磁带，计算机上运行的头几个程序中就得有一个是磁带的阅读程序。随着时间的推移，<span lang="X-NONE"> tar</span>命令逐渐变为一个将很多文件进行存档的工具，目前许多用于<span lang="X-NONE">Linux</span>操作系统的程序就是打包为<span lang="X-NONE">tar</span>档案文件的形式。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">tar </span>
				<span style="font-family: 宋体;">命令的格式是</span>
				<span style="font-family: 宋体;">：</span>
				<span style="font-family: 宋体;" lang="X-NONE"> tar [option] <file>;<o:p></o:p></file></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>tar</span>
				<span style="font-family: 宋体;">命令有很多参数，利用<span lang="X-NONE">f</span>选项、设备或文件的名字可以指示<span lang="X-NONE">tar</span>命令将档案置于特定的设备或文件中。当为<span lang="X-NONE">tar</span>的档案创建一个文件时<span lang="X-NONE">,</span>这个文件名的扩展通常是如果指定了一个目录名<span lang="X-NONE">,</span>那么它所有的子目录都会被包含在档案之中。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">利用<span lang="X-NONE">tar</span>命令和<span lang="X-NONE">f</span>选项的格式如下所示：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>#tar opionsf<span style=""></span>archive-name.tar directory-and-filenames<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">要创建一个档案应使用<span lang="X-NONE">c</span>选项，与<span lang="X-NONE">f</span>选项一起，<span lang="X-NONE">c</span>选项会在设备或文件中创建档案，应在<span lang="X-NONE">f</span>选项的左边输入这一选项。在下例中，目录<span lang="X-NONE">mydir</span>和它所有的子目录都被存入文件<span lang="X-NONE">myarch.tar</span>中。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>#tar cf<span style=""></span>myarch.tar<span style=""></span>mydir<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">如果想要改动已经存档的目录中的文件，可以使用<span lang="X-NONE">u</span>选项使<span lang="X-NONE">tar</span>更新档案中的文件。<span lang="X-NONE">tar</span>比较每一个档案文件与相应用户目录中文件最近一次修改的时间<span lang="X-NONE">,</span>然后将上一次存档之后又被修改过的文件拷贝到档案文件中去。在用户目录中新创建的文件也会被添加到档案文件中。在下面的例子中<span lang="X-NONE">,</span>用户用<span lang="X-NONE">mydir</span>目录中最近被修改或添加的文件来对<span lang="X-NONE">myarch.tar</span>文件进行更新。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>#tar uf myarch.tar mydir<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">如果想查看在一个档案中存储着哪些文件，可以使用<span lang="X-NONE">tar</span>命令和<span lang="X-NONE">t</span>选项。下面命令列出所有存储在<span lang="X-NONE">myarch.tar</span>档案中的文件：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>#tar tf myarch.tar<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">要将文件备份到一个特定的设备，只须把设备名作为档案。在下面的例子中，用户在<span lang="X-NONE">/dev/fdo</span>设备的软盘中创建了一个档案<span lang="X-NONE">,</span>并将<span lang="X-NONE">mydir</span>目录中所有的文件都拷贝到档案中。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>#tar cf/dev/fdo<span style=""></span>mydir<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">要恢复设备磁盘中的文件<span lang="X-NONE">,</span>可使用<span lang="X-NONE">xf</span>选项<span lang="X-NONE">: <o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>#tar xf/dev/fdo<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">如果所备份的文件大小超过设备可用的存储器<span lang="X-NONE">,</span>比如软盘<span lang="X-NONE">,</span>此时就可以创建一个使用多个标号的<span lang="X-NONE">tar</span>档案。当使用<span lang="X-NONE">m</span>选项向一个软驱进行存档时<span lang="X-NONE">,tar</span>命令在一张软盘已满的时候会提醒再放入一张新的软盘。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>#tar cmf/dev/fdo<span style=""></span>mydir<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">要想恢复几张盘中的档案<span lang="X-NONE">,</span>只要将第一张软盘放入软驱<span lang="X-NONE">,</span>然后输入有<span lang="X-NONE">x</span>和<span lang="X-NONE">m</span>选项的<span lang="X-NONE">tar</span>命令。必要时会被提醒放入另外一张软盘。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>#tar<span style=""></span>xmf/dev/fdo<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>tar</span>
				<span style="font-family: 宋体;">操作不会对档案文件实行压缩操作。如果想压缩档案文件<span lang="X-NONE">,</span>可以指示<span lang="X-NONE">tar</span>激活<span lang="X-NONE">gzip</span>实用工具<span lang="X-NONE">,</span>在存档之前对文件进行压缩。利用<span lang="X-NONE">z</span>选项<span lang="X-NONE">,tar</span>在对文件存档之前首先要使用<span lang="X-NONE">gzip</span>来压缩文件。当恢复文件时<span lang="X-NONE">,</span>同样的<span lang="X-NONE">Z</span>选项将激活<span lang="X-NONE">gzip</span>对文件解压。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>#tar czf<span style=""></span>myarch.tar mydir<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">值得注意的是，压缩档案中的单个文件和整体压缩档案是不同的。通常档案文件是为了便于传输而把几个文件组合成为一个<span lang="X-NONE">tar</span>文件。为了缩短传输时间<span lang="X-NONE">,</span>档案应当越小越好，可以将其压缩然后传送压缩后的版本。接收者可以对之解压缩，然后恢复<span lang="X-NONE">tar</span>文件。在<span lang="X-NONE">tar</span>文件上使用<span lang="X-NONE">gzip</span>将会产生有<span lang="X-NONE">.tar.gz</span>扩展名的文件。扩展名<span lang="X-NONE">.gz</span>被加到被压缩的<span lang="X-NONE">gzip</span>文件名之后。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">下面的例子创建了<span lang="X-NONE">myarch.tar</span>的一个压缩的版本<span lang="X-NONE">,</span>它具有了<span lang="X-NONE">.gz</span>的扩展名。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">#gzip<span style=""></span>myarch.tar<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">#ls<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">#myarch.tar.gz<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>tar</span>
				<span style="font-family: 宋体;">命令虽然有非常多的参数，但是使用起来并不困难，可以快速而又简单地为任何需要的子目录生成档案文件。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">首先，我们来建立一个有三个文件的子目录，再建立一个有另外三个文件的子目录，如下所示：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># mkdir mydir<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">#cd mydir<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># touch file1 file2 file3<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># mkdir mydir2<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">#cd mydir2<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># touch file21 file22 file23<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">#cd../..<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">#tree mydir<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>file1<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>file2<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>file3<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir2<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>file21<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>file22<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>file23<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">现在已经有了一个子目录和其中的文件，使用这个命令的<span lang="X-NONE">c(</span>生成<span lang="X-NONE">)</span>和<span lang="X-NONE">f(</span>文件<span lang="X-NONE">)</span>参数来生成一个<span lang="X-NONE">tar</span>档案文件：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># tar cf mydir.tar mydir<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># ls -l *.tar<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">- r w - r - - r - - 1 bball u s e r s 10240 Jan 5 15 : 01 mydir. t a r<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">请注意，原来的子目录并没有发生变化。在缺省的情况下，<span lang="X-NONE">tar</span>命令不会删除原来的子目录和文件。如果想看看命令执行的过程，可以使用<span lang="X-NONE">v</span>参数，如下所示：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># tar cvf mydir.tar mydir<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/file1<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/file2<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/file3<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/mydir2/<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/mydir2/file21<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/mydir2/file22<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/mydir2/file23<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>tar</span>
				<span style="font-family: 宋体;">命令在进行操作的时候，就会把正在添加到档案文件中去的子目录和文件的文件名显示出来。使用<span lang="X-NONE">w</span>参数，即交互参数，这样<span lang="X-NONE">tar</span>命令在执行的过程当中会询问是否想加入每个文件。当想有选择地备份内容不多的子目录的时候，</span>
				<span style="font-size: 15pt; font-family: 宋体;" lang="X-NONE">11</span>
				<span style="font-size: 15pt; font-family: 宋体;">、<span lang="X-NONE">mount </span>常见使用方法</span>
				<span style="font-family: 宋体;">这样就非常地方便，如下所示：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># tar cwf mydir.tar mydir<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">add mydir?y<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">add mydir/file1?n<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">add mydir/file2?y<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">add mydir/file3?n<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">add mydir/mydir2?y<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">add mydir/mydir2/file21?y<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">add mydir/mydir2/file22?n<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">add mydir/mydir2/file23?y<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">在上面的例子中，没有把文件<span lang="X-NONE">file1</span>、<span lang="X-NONE">file3</span>和文件<span lang="X-NONE">file22</span>归档。可以使用<span lang="X-NONE">tar</span>命令的<span lang="X-NONE">t</span>参数列出档案文件中的内容，<span lang="X-NONE">f</span>参数定义操作所使用的<span lang="X-NONE">tar</span>档案文件，如下所示：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># tar tf mydir.tar<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/file2<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/mydir2/<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/mydir2/file21<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/mydir2/file23<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">需要注意的是，如果参数的顺序放错了，<span lang="X-NONE">tar</span>命令会显示出错信息并退出。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">下面就来看看如何来释放整个的档案文件或者其中的某一个文件。如果想释放其中所有的文件，可以同时使用<span lang="X-NONE">-x</span>释放参数和<span lang="X-NONE">-f</span>。为了了解命令执行的过程，还可以加上<span lang="X-NONE">-v</span>参数：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># tar xvf mydir.tar<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/file2<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/mydir2/<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/mydir2/file21<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/mydir2/file23<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">如果只是想从档案文件中释放几个文件的话，可以再次使用<span lang="X-NONE">w</span>参数：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># tar xvwf mydir.tar<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">extract mydir/?y<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">extract mydir/file2?y<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/file2<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">extract mydir/mydir2/?y<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/mydir2/<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">extract mydir/mydir2/file21?y<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/mydir2/file21<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">extract mydir/mydir2/file23?y<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">mydir/mydir2/file23<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">上例表明查看了档案文件，并交互地释放了文件。如果只想从档案文件中释放某一个文件，可以在命令行中指定这个文件。作为示例，我先删除了原始的<span lang="X-NONE">mydir</span>子目录，然后使用一个空的子目录进行如下操作：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># tar xf mydir.tar mydir/mydir2/file23<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># tree mydir<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">m y d i r<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">- - mydir2<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">- - file23<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">1 directory, 1 file<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>
				</span>
				<span style="font-family: 宋体;">注意，正如所看到的只有一个文件被释放出来。虽然<span lang="X-NONE">tar</span>命令不会覆盖整个的子目录，但是它会覆盖掉那些有着相同文件名的文件。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">使用<span lang="X-NONE">gzip</span>压缩文件<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<span style="">
						</span>gzip</span>
				<span style="font-family: 宋体;">命令是用来压缩文件的。它不仅可以用来压缩大的、较少使用的文件以节省磁盘空间，还可以和<span lang="X-NONE">tar</span>命令一起构成<span lang="X-NONE">Linux</span>操作系统中比较流行的压缩文件格式。据统计，<span lang="X-NONE">gzip</span>命令对文本文件有<span lang="X-NONE">60%</span>～<span lang="X-NONE">70%</span>的压缩率。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">gzip</span>
				<span style="font-family: 宋体;">命令的格式是：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">gzip [option] [file]<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">gzip</span>
				<span style="font-family: 宋体;">很容易使用。如果想压缩某个文件或者磁带档案文件，可输入下面的内容：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># gzip mydir.tar<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">在缺省的状态下，<span lang="X-NONE">gzip</span>会压缩文件、再加上一个<span lang="X-NONE">.gz</span>扩展名，然后删除掉原来的文件。如果想解压缩文件，可以使用<span lang="X-NONE">gzip</span>的对应程序命令<span lang="X-NONE">gunzip</span>或者<span lang="X-NONE">gzip</span>命令的<span lang="X-NONE">-d</span>解压缩参数。但是必须保证这个用于解压缩的文件有<span lang="X-NONE">.gz(</span>或者<span lang="X-NONE">.Z</span>、<span lang="X-NONE">-gz</span>、<span lang="X-NONE">.z</span>、<span lang="X-NONE">-z</span>、或者<span lang="X-NONE">_z)</span>扩展名，否则<span lang="X-NONE">gzip</span>命令和<span lang="X-NONE">gunzip</span>命令都会显示出错信息。如果想使用自己的扩展名，可以使用<span lang="X-NONE">-S</span>后缀参数，如下所示：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># gzip -S .gzipped mydir.tar<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">gzip</span>
				<span style="font-family: 宋体;">还可以处理用<span lang="X-NONE">zip</span>命令、<span lang="X-NONE">compress</span>命令和<span lang="X-NONE">pack</span>命令压缩的文件包。如果想在压缩或者解压缩的过程中看到更多的信息，可以使用<span lang="X-NONE">-l</span>列清单参数看到文件在被压缩或解压缩的时候的文件长度。在前一个例子中，压缩完子目录<span lang="X-NONE">mydir</span>之后，可以使用<span lang="X-NONE">gzip</span>命令按照下面的方法得到有关的数据：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE"># gzip -l mydir.tar.gz<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">compressed uncompr.ratio uncompressed_name<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">312 21330 98.2% mydir.tar<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">此外，<span lang="X-NONE">gzip</span>还有一个很有用的参数<span lang="X-NONE">-t</span>，可以用来测试压缩文件的完整性。如果文件正常，<span lang="X-NONE">gzip</span>不会给出任何显示。如果想看到<span lang="X-NONE">OK</span>这两个字母，可以在测试某个文件时使用<span lang="X-NONE">-tv</span>参数。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">使用<span lang="X-NONE">compress</span>压缩文件<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">compress</span>
				<span style="font-family: 宋体;">命令就像它的文件名那样是用来压缩文件的。这是<span lang="X-NONE">Unix</span>中出现得比较早的一个压缩程序<span lang="X-NONE">,</span>它通过使用自适应的<span lang="X-NONE">Lemple-Ziv</span>编码来缩小所指文件的大小。每一个文件将被一个带有<span lang="X-NONE">.Z</span>扩展名的压缩文件所代替，但文件的属主关系、访问时间和修改时间将保持不变。如果没有指点文件，则接受标准输入的文件进行压缩并送到标准输出。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">compress</span>
				<span style="font-family: 宋体;">命令格式是</span>
				<span style="font-family: 宋体;">：</span>
				<span style="font-family: 宋体;" lang="X-NONE">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">compress [option] [file]<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">与<span lang="X-NONE">compress</span>对应的有一个解压缩命令<span lang="X-NONE">uncompress</span>，其格式如下：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">uncompress [option] [file]<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">它使“<span lang="X-NONE">.Z</span>”的压缩文件恢复。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">compress</span>
				<span style="font-family: 宋体;">和<span lang="X-NONE">uncompress</span>命令的选项如下：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">◆<span lang="X-NONE">-c </span>写到标准输出，不改变文件。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">◆<span lang="X-NONE">-f </span>强制压缩，即使文件并不真正减小或<span lang="X-NONE">.Z</span>文件已经存在，也进行压缩。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">◆<span lang="X-NONE">-v </span>显示每一个被压缩文件的缩小的百分比。<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">下面举例说明<span lang="X-NONE">compress</span>命令的用法：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">#compress file<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;">上面代码表明将生成压缩文件<span lang="X-NONE">file.Z</span>代替<span lang="X-NONE">file</span>，要解压缩输入：<span lang="X-NONE"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">#uncompress file.Z<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="margin-bottom: 5.85pt;">
				<span style="font-family: 宋体;" lang="X-NONE">
						<!--[if !supportEmptyParas]-->
						<!--[endif]-->
						<o:p>
						</o:p>
				</span>
		</p>
		<span style="font-size: 12pt; font-family: 宋体;">注意，像使用<span lang="X-NONE">gzip</span>命令一样，使用<span lang="X-NONE">uncompress</span>命令时必须给出一个带有<span lang="X-NONE">.Z</span>扩展名的文件名，否则<span lang="X-NONE">uncompress</span>命令显示出错信息。<span lang="X-NONE"><br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--></span></span>
		<file>
		</file>
<img src ="http://www.cppblog.com/guangping/aggbug/7534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guangping/" target="_blank">王光平</a> 2006-05-23 15:24 <a href="http://www.cppblog.com/guangping/archive/2006/05/23/7534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>华硕ASUS V7100M显卡在Debian3.1下的安装</title><link>http://www.cppblog.com/guangping/archive/2006/05/18/7337.html</link><dc:creator>王光平</dc:creator><author>王光平</author><pubDate>Thu, 18 May 2006 01:14:00 GMT</pubDate><guid>http://www.cppblog.com/guangping/archive/2006/05/18/7337.html</guid><wfw:comment>http://www.cppblog.com/guangping/comments/7337.html</wfw:comment><comments>http://www.cppblog.com/guangping/archive/2006/05/18/7337.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guangping/comments/commentRss/7337.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guangping/services/trackbacks/7337.html</trackback:ping><description><![CDATA[这两天折腾linux,先是装了几次Ubuntu,总是出不来图形界面，很是恼火，还发了一通牢骚。未果，回过头来还是安装我最欣裳的Debian，不过自从领导给我换了一台机器之后，还未装过，先试试再说，至于 ubuntu，等它再完善些，再稳定些，再争气一些，再折腾吧。果不出所料，Debian一路通畅，几乎没有问题，看来Debian还是linux中的老大呵。只是重启时，还是不能进入图形界面，但有提示，不像 ubuntu，我分析是显卡的linux驱动支持问题，于是开始在网上寻找，但找来找去，能找的地方都找了，也找不到支持linux的华硕显卡驱动。很有些沮丧，突然灵光一闪，虽然找不到华硕的驱动，但我的这个华硕显卡用的是nVidia GeForce2的显示核心芯片，可不可以用nVidia的驱动支持呢？说试就试，找来的nVidia的linux驱动及别人写的安装文档，一试，果然OK，很是开心，以下是具体步骤记录下来，备查：<br /> 1、# apt-get install kernel-headers-$(uname -r)   当然要事先设好源。
<br /> 2、# ln -s /usr/src/kernel-headers-$(uname -r) /lib/modules/$(uname -r)/build
<br /> 3、# sh NVIDIA-Linux-x86-1.0-8756-pkg1.run     这里下载的驱动程序
<br /> 4、# dpkg-reconfigure xserver-xfree86 --priority=medium  这一步，反正我是没作，但别人作了，可能情况不尽相同，记下，备不时之需。
<br /> 5、重启机器，OK.


<img src ="http://www.cppblog.com/guangping/aggbug/7337.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guangping/" target="_blank">王光平</a> 2006-05-18 09:14 <a href="http://www.cppblog.com/guangping/archive/2006/05/18/7337.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>忍不住了，发发linux的牢骚！</title><link>http://www.cppblog.com/guangping/archive/2006/05/12/7024.html</link><dc:creator>王光平</dc:creator><author>王光平</author><pubDate>Fri, 12 May 2006 07:36:00 GMT</pubDate><guid>http://www.cppblog.com/guangping/archive/2006/05/12/7024.html</guid><wfw:comment>http://www.cppblog.com/guangping/comments/7024.html</wfw:comment><comments>http://www.cppblog.com/guangping/archive/2006/05/12/7024.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.cppblog.com/guangping/comments/commentRss/7024.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guangping/services/trackbacks/7024.html</trackback:ping><description><![CDATA[   这几天，从csdn上看到ubuntu让你的老旧机器重新跑起来的新闻，很是欣喜。我的机子可是足够老的了，mmx166,64M内存，1M显卡。我兴冲冲的下了Xubuntu6.06以及硬盘安装所需的initrd.gz 及vmlinuz，安装过程虽有波折，但经过摸索，总算安装成功了，可重新启动时，就是不能进入图形界面，急呵。回到 windows2000下看论坛里的办法，都试了，不管用。startx 也试了，说没有此命令，晕。还有说进入root用户，可整个安装过程也没提示创建root  用户呀，试着login in:root,可密码又不知是什么。至今还是在文本界面下。一头雾水，不知如何处理。忍不住想发发linux的牢骚：
1、我是一个linux的推崇者，我喜欢它的自由开放，但它一次次伤我的心。我不是一个玩弄操作系统的发烧友，我不想在安装使用上这样麻烦，我只想linux能 像windows一样方便用户，同时又开放自由。我希望 linux 的开发者能放弃linux 是个专家专用的操作系统这个无谓的情结，这个情结最终会伤害 linux的发展，毕竟东西是要让人用的，不是玩的，而用户更多的是普通人群，只想多一个操作系统的选择。因此，方便、简单、稳定是占第一位的。
2、当年，我们接触  windows时，可没有这么多麻烦呀，只要看看，试试，就不知不觉的熟悉的windows，而 linux呢，好像看了不少资料（至少相对于 了解windows），可依旧在门外徘徊。这是为什么呢，难道是我们的资质太差，不适合用linux吗？晕，又回到那个"linux是专业人员使用的"狗屁情结上来了。如果按照这个标准的话，会安装并且会使用linux就是专家，这专家也太烂了吧。
3、不同的用户出于不同的目的选择linux，有的作文档，有的作家用电器，有的上网，我想真正愿意花大量时间精力来研究linux是如何作文档，如何实现用户上网，如何实现多媒体的，只有少数的linux开发人员及发烧友们。
4、linux的版本多如牛毛，据说全球有几百，上千个版本，有这个必要吗，用户只需要一个稳定的、高效的、自由的，简洁的linux，在每个桌面上开发的软件也不能在别的桌面平台使用，这更要命，有哪个硬件厂商愿意为每个linux都开发一个驱动程序，终于，到了最终用户手里，不是找不到主板驱动，就是找不到显卡驱动，再是声卡驱动，真的能找全驱动程序的机器想必真是好运气。这个问题在这两天出台的LSB3.1有了标准解决软件兼容性，可什么时候才真正能做到拿一个程序在任一台 linux机器上都可以运行呢？
    不说了，愈说愈来气，两个字，现在的linux还是太令人失望。

<img src ="http://www.cppblog.com/guangping/aggbug/7024.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guangping/" target="_blank">王光平</a> 2006-05-12 15:36 <a href="http://www.cppblog.com/guangping/archive/2006/05/12/7024.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>