??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品久久久久国产A级,久久久这里只有精品加勒比,久久精品一区二区http://www.shnenglu.com/guangping/category/11051.html<font face="Arial" size="4" color="#FF8000">Q-Q宁静致q,然世外?lt;/font> zh-cnWed, 01 Jul 2009 22:32:50 GMTWed, 01 Jul 2009 22:32:50 GMT60Linux 下串口编E入?/title><link>http://www.shnenglu.com/guangping/archive/2009/06/28/66914.html</link><dc:creator>王光q?/dc:creator><author>王光q?/author><pubDate>Sun, 28 Jun 2009 15:16:00 GMT</pubDate><guid>http://www.shnenglu.com/guangping/archive/2009/06/28/66914.html</guid><wfw:comment>http://www.shnenglu.com/guangping/comments/66914.html</wfw:comment><comments>http://www.shnenglu.com/guangping/archive/2009/06/28/66914.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/guangping/comments/commentRss/66914.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/guangping/services/trackbacks/66914.html</trackback:ping><description><![CDATA[ <div id="lrbdv11" class="title"> <h1>Linux 下串口编E入?/h1> </div> <b>计算Z口的引脚定义<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">W号</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">h发?/td> <td align="center">RTS</td> <td align="center">DTE→DCE</td> <td>DTE h 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 U\已接通可以发送数?/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">载L?/td> <td align="center">DCD</td> <td align="center">DTE←DCE</td> <td>表示 DCE 接收到远E蝲?/td> </tr> <tr> <td align="center">20</td> <td align="center">数据l端准备?/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 id="nhlfz3x" 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> /*文g控制定义*/<br />#include <termios.h> /*PPSIX l端控制定义*/<br />#include <errno.h> /*错误号定?/<br /></errno.h></termios.h></fcntl.h></unistd.h></stdlib.h></stdio.h></pre> <p> <a name="N10148"> <span id="3d3fhfl" class="atitle">打开串口</span> </a> </p> <p> ?Linux 下串口文件是位于 /dev 下的 </p> <p>串口一 ?/dev/ttyS0 </p> <p>串口??/dev/ttyS1 </p> <p>打开串口是通过使用标准的文件打开函数操作Q? </p> int fd; /*以读写方式打开串口*/ <br />fd = open( "/dev/ttyS0", O_RDWR);//| O_NOCTTY | O_NDELAY<br />if (-1 == fd)<br />{ <br /> /* 不能打开串口一*/ <br /> perror(" 提示错误Q?); <br />}<br /><p><a name="N1015E"><span id="nxvh7pb" class="atitle">讄串口</span></a></p><p>最基本的设|串口包括L特率讄Q效验位和停止位讄?/p><p>串口的设|主要是讄 struct termios l构体的各成员倹{? </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>讄q个l构体很复杂Q我q里只说说常见的一些设|:(x) </p><p>波特率设|?/p><p>下面是修Ҏ(gu)L特率的代码:(x)</p><pre class="displaycode">struct termios Opt;<br />tcgetattr(fd, &Opt);<br />cfsetispeed(&Opt,B19200); /*讄?9200Bps*/<br />cfsetospeed(&Opt,B19200);<br />tcsetattr(fd,TCANOW,&Opt);<br />讄波特率的例子函数Q?br />/**<br />*@brief 讄串口通信速率<br />*@param fd cd int 打开串口的文件句?br />*@param speed cd 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, &Opt); <br /> for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) { <br /> if (speed == name_arr[i]) { <br /> tcflush(fd, TCIOFLUSH); <br /> cfsetispeed(&Opt, speed_arr[i]); <br /> cfsetospeed(&Opt, speed_arr[i]); <br /> status = tcsetattr(fd1, TCSANOW, &Opt); <br /> if (status != 0) { <br /> perror("tcsetattr fd1"); <br /> return; <br /> } <br /> tcflush(fd,TCIOFLUSH); <br /> } <br /> }<br />}<br />效验位和停止位的讄Q?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 &= ~PARENB; <br /> Option.c_cflag &= ~CSTOPB; <br /> Option.c_cflag &= ~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 &= ~PARODD; <br /> Option.c_cflag &= ~CSTOPB; <br /> Option.c_cflag &= ~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 &= ~PARENB; <br /> Option.c_cflag |= ~PARODD; <br /> Option.c_cflag &= ~CSTOPB; <br /> Option.c_cflag &= ~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 &= ~PARENB; <br /> Option.c_cflag &= ~CSTOPB; <br /> Option.c_cflag &= &~CSIZE; <br /> Option.c_cflag |= CS8; </td></tr></tbody></table><pre class="displaycode">讄效验的函敎ͼ(x)<br />/**<br />*@brief 讄串口数据位,停止位和效验?br />*@param fd cd int 打开的串口文件句?br />*@param databits cd int 数据? 取??7 或?<br />*@param stopbits cd int 停止? 取gؓ(f) 1 或?<br />*@param parity cd int 效验cd 取gؓ(f)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,&options) != 0) { <br /> perror("SetupSerial 1"); <br /> return(FALSE); <br /> }<br /> options.c_cflag &= ~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 &= ~PARENB; /* Clear parity enable */<br /> options.c_iflag &= ~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 &= ~PARODD; /* 转换为偶效验*/ <br /> options.c_iflag |= INPCK; /* Disnable parity checking */<br /> break;<br /> case 'S': <br /> case 's': /*as no parity*/ <br /> options.c_cflag &= ~PARENB;<br /> options.c_cflag &= ~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 &= ~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,&options) != 0) <br />{ <br /> perror("SetupSerial 3"); <br /> return (FALSE); <br />} <br />return (TRUE); <br />}<br /></pre><p><b>需要注意的?</b></p><p>如果不是开发终端之cȝQ只是串口传输数据,而不需要串口来处理Q那么用原始模?Raw Mode)方式来通讯Q设|方式如下:(x) <br /></p><pre class="displaycode">options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/<br />options.c_oflag &= ~OPOST; /*Output*/<br /></pre><p><a name="N10200"><span id="jvv1vll" class="atitle">d串口</span></a></p><p> 讄好串口之后,d串口很Ҏ(gu)了,把串口当作文件读写就是? </p> 发送数?br /><pre class="displaycode">char buffer[1024];int Length;int nByte;nByte = write(fd, buffer ,Length)<br /></pre>d串口数据 <p>使用文g操作read函数dQ如果设|ؓ(f)原始模式(Raw Mode)传输数据Q那么read函数q回的字W数是实际串口收到的字符数? </p><p>可以使用操作文g的函数来实现异步dQ如fcntlQ或者select{来操作?<br /></p><pre class="displaycode">char buff[1024];int Len;int readByte = read(fd,buff,Len);<br /></pre><p><a name="N10220"><span id="5bxfltf" class="atitle">关闭串口</span></a></p><p> 关闭串口是关闭文g?<br /></p><pre class="displaycode">close(fd);</pre><img src ="http://www.shnenglu.com/guangping/aggbug/66914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/guangping/" target="_blank">王光q?/a> 2009-06-28 23:16 <a href="http://www.shnenglu.com/guangping/archive/2009/06/28/66914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VI命o(h)一览表http://www.shnenglu.com/guangping/archive/2008/08/21/59516.html王光q?/dc:creator>王光q?/author>Thu, 21 Aug 2008 05:08:00 GMThttp://www.shnenglu.com/guangping/archive/2008/08/21/59516.htmlhttp://www.shnenglu.com/guangping/comments/59516.htmlhttp://www.shnenglu.com/guangping/archive/2008/08/21/59516.html#Feedback0http://www.shnenglu.com/guangping/comments/commentRss/59516.htmlhttp://www.shnenglu.com/guangping/services/trackbacks/59516.html VI命o(h)一览表Q?/font>


q入vi的命?/span>
vi filename :打开或新建文Ӟq将光标|于W一行首
vi +n filename Q打开文gQƈ光标置?font color="#ff6600">Wn行首

vi + filename Q打开文gQƈ光标置?font color="#ff6600">最后一行首
vi +/pattern filenameQ打开文gQƈ光标置于第一个与pattern匚w的串?
vi -r filename Q在上次正用vi~辑时发生系l崩溃,恢复filename
vi filename....filename Q打开多个文gQ依ơ进行编?

Ud光标cd?/span>
h ?BackspaceQ:(x) 光标左移一个字W?
l ?spaceQ:(x) 光标右移一个字W?
k ?Ctrl+pQ? 光标上移一?
j ? Enter ?Ctrl+n Q光标下UM?


w Q? 光标右移一个字臛_?

W Q光标右UM个字臛_首,忽略标点W号
b ?B Q? 光标左移一个字臛_?
e ?E Q? 光标右移一个字臛_?


) Q光标移臛_?
( Q光标移臛_?
}Q光标移x落开?
{Q光标移x落结?


nGQ光标移至第n行首
n+Q光标下Un?
n-Q光标上Un?
n$Q光标移至第n行尾
H Q光标移臛_q顶?
M Q光标移臛_q中间行
L Q光标移臛_q最后行
0Q(注意是数字零Q光标移臛_前行?
$Q光标移臛_前行?

屏幕Lcd?/span>
Ctrl+uQ?向文仉d?
Ctrl+dQ?向文件尾d?
Ctrl+fQ? 向文件尾M?
CtrlQbQ向文g首翻一?
nzQ? 第n行滚臛_q顶部,不指定n时将当前行滚臛_q顶部?

插入文本cd?/span>
i Q在光标?
I Q在当前行首
aQ光标后
AQ在当前行尾
oQ在当前行之下新开一?
OQ在当前行之上新开一?
rQ替换当前字W?
RQ替换当前字W及其后的字W,直至按ESC?
sQ从当前光标位置处开始,以输入的文本替代指定数目的字W?
SQ删除指定数目的行,q以所输入文本代替?
ncw或nCWQ修Ҏ(gu)定数目的?
nCCQ修Ҏ(gu)定数目的?

删除命o(h)
ndw或ndWQ删除光标处开始及其后的n-1个字
doQ删臌?
d$Q删臌?
nddQ删除当前行及其后n-1?
x或XQ删除一个字W,x删除光标后的Q而X删除光标前的
Ctrl+uQ删除输入方式下所输入的文?

搜烦及替换命?/span>
/patternQ从光标开始处向文件尾搜烦pattern
?patternQ从光标开始处向文仉搜烦pattern
nQ在同一方向重复上一ơ搜索命?
NQ在反方向上重复上一ơ搜索命?
Qs/p1/p2/gQ将当前行中所有p1均用p2替代
Qn1,n2s/p1/p2/gQ将Wn1至n2行中所有p1均用p2替代
Qg/p1/s//p2/gQ将文g中所有p1均用p2替换

选项讄
allQ列出所有选项讄情况
termQ设|终端类?
ignoranceQ在搜烦中忽略大写
listQ显C制表位(Ctrl+I)和行标志($)
numberQ显C?
reportQ显C由面向行的命o(h)修改q的数目
terseQ显C简短的警告信息
warnQ在转到别的文g时若没保存当前文件则昄NO write信息
nomagicQ允许在搜烦模式中,使用前面不带“\”的Ҏ(gu)字符
nowrapscanQ禁止vi在搜索到达文件两端时Q又从另一端开?
mesgQ允许vi昄其他用户用write写到自己l端上的信息

末行方式命o(h)
Qn1,n2 co n3Q将n1行到n2行之间的内容拯到第n3行下
Qn1,n2 m n3Q将n1行到n2行之间的内容U至到第n3行下
Qn1,n2 d Q将n1行到n2行之间的内容删除
Qw Q保存当前文?
Qe filenameQ打开文gfilenameq行~辑
QxQ保存当前文件ƈ退?
QqQ退出vi
Qq!Q不保存文gq出vi
Q?commandQ执行shell命o(h)command
Qn1,n2 w!commandQ将文g中n1行至n2行的内容作ؓ(f)command的输入ƈ执行之,若不指定n1Qn2Q则表示整个文件内容作为command的输?
Qr!commandQ将命o(h)command的输出结果放到当前行

寄存器操?/span>
"?nyyQ将当前行及其下n行的内容保存到寄存器Q中Q其?Z个字母,nZ个数?
"?nywQ将当前行及其下n个字保存到寄存器Q中Q其?Z个字母,nZ个数?
"?nylQ将当前行及其下n个字W保存到寄存器?中,其中?Z个字母,nZ个数?
"?pQ取出寄存器Q中的内容ƈ其攑ֈ光标位置处。这里?可以是一个字母,也可以是一个数?
nddQ将当前行及其下共n行文本删除,q将所删内Ҏ(gu)?号删除寄存器中?/p>

光标控制命o(h)

命o(h) 光标Ud

h ?/span> ^h 向左UM个字W?/span>

j ?/span> ^j ?/span> ^n 向下UM?/span>

k ?/span> ^p 向上UM?/span>

l 或空?/span> 向右UM个字W?/span>

G Ud文g的最后一?/span>

nG Ud文g的第 n ?/span>

w Ud下一个字的开?/span>

W Ud下一个字的开_(d)忽略标点W号

b Ud前一个字的开?/span>

B Ud前一个字的开_(d)忽略标点W号

L Ud屏幕的最后一?/span>

M Ud屏幕的中间一?/span>

H Ud屏幕的第一?/span>

e Ud下一个字的结?/span>

E Ud下一个字的结,忽略标点W号

( Ud句子的开?/span>

) Ud句子的结?/span>

{ UdD落的开?/span>

} Ud下一个段落的开?/span>

0 ?/span> | Ud当前行的W一?/span>

n| Ud当前行的W?/span> n ?/span>

^ Ud当前行的W一个非I字W?/span>

Q?span> Ud当前行的最后一个字W?/span>

+ ?/span> return Ud下一行的W一个字W?/span>

- Ud前一行的W一个非I字W?/span>

?/span> vi 中添加文?/span>

命o(h) 插入动作

a 在光标后插入文本

A 在当前行插入文本

i 在光标前插入文本

I 在当前行前插入文?/span>

o 在当前行的下Ҏ(gu)入新?/span>

O 在当前行的上Ҏ(gu)入新?/span>

:r file d文g file 内容Qƈ插在当前行后

:nr file d文g file 内容Qƈ插在W?/span> n 行后

escape 回到命o(h)模式

^v char 插入时忽?/span> char 的指定意义,q是Z插入Ҏ(gu)字符

?/span> vi 中删除文?/span>

命o(h) 删除操作

x 删除光标处的字符Q可以在 x 前加上需要删除的字符数目

nx 从当前光标处往后删?/span> n 个字W?/span>

X 删除光标前的字符Q可以在 X 前加上需要删除的字符数目

nX 从当前光标处往前删?/span> n 个字W?/span>

dw 删至下一个字的开?/span>

ndw 从当前光标处往后删?/span> n 个字

dG 删除行,直到文gl束

dd 删除整行

ndd 从当前行开始往后删?/span>

db 删除光标前面的字

ndb 从当前行开始往前删?/span> n ?/span>

:n,md 从第 m 行开始往前删?/span> n ?/span>

d ?/span> dQ?span> 从光标处删除到行?/span>

dcursor_command 删除臛_标命令处Q如 dG 从当胆行删除x件的末尾

^h ?/span> backspace 插入Ӟ删除前面的字W?/span>

^w 插入Ӟ删除前面的字

修改 vi 文本

每个命o(h)前面的数字表C命o(h)重复的次?/span>

命o(h) 替换操作

rchar ?/span> char 替换当前字符

R text escape ?/span> text 替换当前字符直到换下 Esc ?/span>

stext escape ?/span> text 代替当前字符

S ?/span> cctext escape ?/span> text 代替整行

cwtext escape 当前字改ؓ(f) text

Ctext escape 当前行余下的改?/span> text

cG escape 修改x件的末尾

ccursor_cmd text escape 从当前位|处到光标命令位|处都改?/span> text

?/span> vi 中查找与替换

命o(h) 查找与替换操?/span>

/text 在文件中向前查找 text

?text 在文件中向后查找 text

n 在同一方向重复查找

N 在相反方向重复查?/span>

ftext 在当前行向前查找 text

Ftext 在当前行向后查找 text

ttext 在当前行向前查找 text Qƈ光标定位在 text 的第一个字W?/span>

Ttext 在当前行向后查找 text Qƈ光标定位在 text 的第一个字W?/span>

:set ic 查找时忽略大写

:set noic 查找时对大小写敏?/span>

s/ pat1 /g ?/span> newtext 替换 oldtext

:m,ns/oldtext/newtext ?/span> m 行通过 n Q用 newtext 替换 oldtext

& 重复最后的 :s 命o(h)

:g/text1/s/text2/text3 查找包含 text1 的行Q用 text3 替换 text2

:g/text/command 在所有包?/span> text 的行q行 command 所表示的命?/span>

:v/text/command 在所有不包含 text 的行q行 command 所表示的命?/span>

?/span> vi 中复制文?/span>

命o(h) 复制操作

yy 当前行的内Ҏ(gu)入(f)时缓冲区

nyy ?/span> n 行的内容攑օ临时~冲?/span>

p (f)时缓冲区中的文本攑օ光标?/span>

P (f)时缓冲区中的文本攑օ光标?/span>

"(a-z)nyy 复制 n 行放入名字ؓ(f)圆括号内的可命名~冲区,省略 n 表示当前?/span>

"(a-z)ndd 删除 n 行放入名字ؓ(f)圆括号内的可命名~冲区,省略 n 表示当前?/span>

"(a-z)p 名字ؓ(f)圆括L(fng)可命名缓冲区的内Ҏ(gu)入当前行?/span>

"(a-z)P 名字ؓ(f)圆括L(fng)可命名缓冲区的内Ҏ(gu)入当前行?/span>

?/span> vi 中撤消与重复

命o(h) 撤消操作

u 撤消最后一ơ修?/span>

U 撤消当前行的所有修?/span>

. 重复最后一ơ修?/span>

, 以相反的方向重复前面?/span> f ?/span> F ?/span> t ?/span> T 查找命o(h)

; 重复前面?/span> f ?/span> F ?/span> t ?/span> T 查找命o(h)

"np 取回最后第 n ơ的删除 ( ~冲Z存有一定次数的删除内容Q一般ؓ(f) 9)

n 重复前面?/span> / ?/span> ? 查找命o(h)

N 以相反方向重复前面的 / ?/span> ? 命o(h)

保存文本和退?/span> vi

命o(h) 保存?/span> / 或退出操?/span>

:w 保存文g但不退?/span> vi

:w file 修改保存在 file 中但不退?/span> vi

:wq ?/span> ZZ ?/span> :x 保存文gq?/span> vi

:q! 不保存文Ӟ退?/span> vi

:e! 攑ּ所有修改,从上ơ保存文件开始再~辑

vi 中的选项

选项 作用

:set all 打印所有选项

:set nooption 关闭 option 选项

:set nu 每行前打印行?/span>

:set showmode 昄是输入模式还是替换模?/span>

:set noic 查找时忽略大写

:set list 昄制表W?/span> (^I) 和行?/span>

:set ts=8 为文本输入设|?/span> tab stops

:set window=n 讄文本H口昄 n ?/span>

:syntax on 语法加亮




VI的状?/strong>

选项 作用

:.= 打印当前行的行号

:= 打印文g中的行数

^g 昄文g名、当前的行号、文件的总行数和文g位置的百分比

:l 使用字母 "l" 来显C多的Ҏ(gu)字符Q如制表W和换行W?/span>

在文本中定位D落和放|标?/strong>

选项 作用

{ 在第一列插?/span> { 来定义一个段?/span>

[[ 回到D落的开头处

]] 向前Ud下一个段落的开头处

m(a-z) 用一个字母来标记当前位置Q如?/span> mz 表示标记 z

'(a-z) 光标移动到指定的标讎ͼ如用 'z 表示Ud?/span> z

?/span> vi 中连接行

选项 作用

J 下一行连接到当前行的末尾

nJ q接后面 n ?/span>

光标攄与屏q调?/strong>

选项 作用

H 光标移动到屏幕的顶?/span>

nH 光标移动到屏幕行下的W?/span> n ?/span>

M 光标移动到屏幕的中?/span>

L 光标移动到屏幕的底?/span>

nL 光标移动到屏幕底行上的W?/span> n ?/span>

^e(ctrl+e) 屏q上滚一?/span>

^y 屏q下滚一?/span>

^u 屏q上滚半?/span>

^d 屏q下滚半?/span>

^b 屏q上滚一?/span>

^f 屏q下滚一?/span>

^l 重绘屏幕

z-return 当前行|ؓ(f)屏幕的顶?/span>

nz-return 当前行下的W?/span> n 行置为屏q的行

z. 当前行|ؓ(f)屏幕的中?/span>

nz. 当前行上的W?/span> n 行置为屏q的中央

z- 当前行|ؓ(f)屏幕的底?/span>

nz- 当前行上的W?/span> n 行置为屏q的底行

vi 中的 shell 转义命o(h)

选项 作用

:!command 执行 shell ?/span> command 命o(h)Q如 :!ls

:!! 执行前一?/span> shell 命o(h)

:r!command d command 命o(h)的输入ƈ插入Q如 :r!ls ?x)先执?/span> ls Q然后读入内?/span>

:w!command 当前已~辑文g作ؓ(f) command 命o(h)的标准输入ƈ执行 command 命o(h)Q如 :w!grep all

:cd directory 当前工作目录更改ؓ(f) directory 所表示的目?/span>

:sh 启动一个子 shell Q?/span> ^d(ctrl+d) q回 vi

:so file ?/span> shell E序 file 中读入和执行命o(h)

vi 中的宏与~写

( 避免使用控制键和W号Q不要用字W?/span> K ?/span> V ?/span> g ?/span> q ?/span> v ?/span> * ?/span> = 和功能键 )

选项 作用

:map key command_seq 定义一个键来运?/span> command_seq Q如 :map e ea Q无Z么时候都可以 e Ud一个字的末来q加文本

:map 在状态行昄所有已定义的宏

:umap key 删除该键的宏

:ab string1 string2 定义一个羃写,使得当插?/span> string1 Ӟ?/span> string2 替换 string1 。当要插入文本时Q键?/span> string1 然后?/span> Esc 键,pȝ插入了 string2

:ab 昄所有羃?/span>

:una string 取消 string 的羃?/span>

?/span> vi 中羃q文?/span>

选项 作用

^i(ctrl+i) ?/span> tab 插入文本Ӟ插入Ud的宽度,Ud宽度是事先定义好?/span>

:set ai 打开自动~进

:set sw=n 移动宽度设|ؓ(f) n 个字W?/span>

n<&lt; ?/span> n 行都向左Ud一个宽?/span>

n>> ?/span> n 行都向右Ud一个宽度,例如 3>> 将接下来的三行每行都向右移动一个移动宽?/span>



]]>
选择GPLq是BSD?http://www.shnenglu.com/guangping/archive/2008/02/18/42909.html王光q?/dc:creator>王光q?/author>Mon, 18 Feb 2008 12:51:00 GMThttp://www.shnenglu.com/guangping/archive/2008/02/18/42909.htmlhttp://www.shnenglu.com/guangping/comments/42909.htmlhttp://www.shnenglu.com/guangping/archive/2008/02/18/42909.html#Feedback0http://www.shnenglu.com/guangping/comments/commentRss/42909.htmlhttp://www.shnenglu.com/guangping/services/trackbacks/42909.html
1.?br />
  什么是GPL软g授权许可证?

   GNU通用公共许可?GPL,The GNU General Public License)的全文非常烦琐冗长,其主要宗旨是在程序员C֌内保证和促进可以q箋自由和开攑֜保证软g源代码的׃n。它的出现؜淆了"free"? "freedom"的含义,因ؓ(f)其实际上限制了那些不希望开攑օ享那些从GPL授权的Y件进行二ơ开发的E序员的自由。Rick Holbert我们使用解放软g(liberated software)q个名词来替代自pY?free software)q个名词。但q仍然我感到迷惑,因ؓ(f)GNU软gq不是真正的解放软gQ其实你q不能Q意处理GPL软g的源代码Q但?解放"q个? 仍然要比"自由"q个词来的准一些。GPL许可证强q用户将对开攑օ享的GPL软g的修改后的源代码l箋公开。因此,GPL保证了那些Y件用者自q q箋性,而不是那些修改Y件的E序员。如果仔l分析可以发玎ͼGPL有一些o(h)人؜淆的地方Q一斚w它保证了以后软g"接受?的自由,而剥Z软g开发? L处置自己~写的代码的权利。ȝ来说Q对于那些希望将自己的Y件A(ch)献出来的人来GPL是o(h)人满意的Q因为在GPL授权许可下,软g在整个开发中都保? 了源码的开攑֒所有的人都可以使用和添加修改Y件?

  但是从商业角度来_(d)当然是希望用那些可以可以关闭源码共享的软gQ因Z 往往是希望根据其开发一个具有潜在h(hun)值的产品。如果你关闭了具有h(hun)值的软g的源码,q且对其q行改进和二ơ开发,使其h更高的h(hun)|q样你才能向那些? 有能力自行开发的软g使用者收费Q那么你应该考虑使用hBSD授权许可的Y件作v炏V?

  考虑另外一U情况下Q如果你更着? 于服务而不是Y件品,那么GPL软g对你来说没有什么缺陷了。例如,IBM在其各种服务器中使用Linux。如果你是在GPL软gq_之上开发一个商 业YӞ你也不必担心GPL对你的媄响。另外,M从头开发的软g或者是使用BSD软g作ؓ(f)基础来开发的软gQ你都可以封闭自q源代码。仍然有很多Ҏ(gu) 可以利用GPL软g而不威胁你的商务zd。一般来说客户ƈ不真正关心事情是如何完成的,他们仅仅兛_事情完成的结果。一个最好的例子是在最行的桌面操? pȝ之上q行的各UYӞ使用q些p糕的Y件的用户?9%都不知道Q也不关心他们用的软g是如何的垃圾和糟p。只要看看用h如何乐于下蝲和安装那? L(fng)是最可靠和稳定的保证向后兼容的操作系l的补丁可以理解这一点了。ؓ(f)什么一开始这些操作系l不能保证稳定和可靠的呢Qƈ且如果最E_和可靠的当前? 本仍然时常崩溃ƈ且有巨多的bugQ那么以前的版本是不是垃圑֑Q我一直在对h们强调那些比垃圾更加E_和可靠的东西Q实际上仍然是垃圾,只不q是E稍? 加稳定和可靠一些Ş了。这q没有太多的意义。在商业上,重要的不是被卖的产品的可靠性和E_性,如果你能满使用者的最低要求,q且你能以便宜的h占有 主要市场Q或者你能实现垄断,q且对用戯行洗脑宣传,大量q行q告金钱宣传Q那么你的品就是最"?的。如果你׃商业的原因害怕GPL许可证,那么 你可能ƈ没有_地深入和仔细地考虑你的商业模型。在US最行的Linux发布q不是最好的Q其~Z很多应该h的特Ԍ但是它仍然是最行的,因ؓ(f)? 已经占有了市场,q且每次版本升其品都有改q,q样使得它们的客h的很开心,即用户q不知道软g实际上应该有多好?br />
2.什么是BSD授权许可证?

   BSD授权许可?FreeBSD Copyright Information)h多种授权许可证。ȝ来说你可以对软gL处理Q只要你在Y件中注明其是来自于那个项目的可以了。也是说你h更大的自 由度来处|Y件。如果你对Y件进行了修改Q你可以限制其他使用者得C修改的Y件的自由?br />
  BSD授权许可证没有实?通透?自由Q也是其不保证软g源代码开攄q箋性。这样如果你希望采用别h开发的BSD软gQ进行一些修改,然后作ؓ(f)产品卖,或者仅仅保密自q做的一些除了Y件开发以外的工作Q那么你可以从中得利?br />
   当一个非E序员仅仅理解一个程序的功能Q但是不了解E序是如何做的时Q即使你没有在开发Y件中做Q何工作那你就可以通过高超的市场技巧将软g卖给该用 戗比如拿最行的桌面操作系l作Z子,你就能很好的理解一个没有很好的E序技巧的软g公司只要h高超的市销{略同样可以垃圑֍l客戗如果你 不具有很强大的编E能力,但是h很强的市力和能将其他开发者的软g包括到自qpȝQ而同时不自q修改开攑և来将是非常强大的能力。从赚钱为目 的的商务角度看来Q如果你使用了BSD授权许可证的软gQ那么你可以Q意进行。你可以更好地控制你的OSpȝQƈ且防止其他h拯你的商业产品?br />
  我看来Q只要是开放源码的东西Q就都不是垃圾,因ؓ(f)只要是开攄其就可能被修改,发生变化Q而一旦变成封闭源码的东西Q它马上成Z垃圾Q因为我不知道它是如何实现的。所有BSD授权声明的开放源码的软g都是很棒的东ѝ?

3.哪种更适合你?

   有一个信念你是必ȝ解的Q授权许可之间ƈ没有好坏之分Q除非你从你希望辑ֈ的目的的角度ȝ待问题。一个授权许可证是h们行为的基础Q就象法规一栗? 从商务角度来_(d)国有一个非常棒的政府,因ؓ(f)q里是金qM切;从h性角度看来,其他政府可能更具有理想主义一些。但是如果他们实C他们人民希望? 到的目标Q它们之间是没有好坏之分的。如果授权许可证保证了你希望的目标,那么它对你来说就是好的,但是对于其他人来说可能ƈ不是如此Q但是你可能往往? ?x)关心别人对该授权许可证的看法。因此,只有白痴才会(x)认ؓ(f)一U授权许可证比另外一U授权许可更好。一旦我们知道了你创造程序的目标Q那么我们就可以判断? 的Y件更适合使用哪种授权许可?br />
  无论什么时候我和BSDZ交谈Q他们往往也承认GPL是一个不错的东西。怎么?x)这样呢Q正如前面讨 论的那样Q授权许可是Zh们来使用的。没有h你对你的软g使用GPL或者是BSD授权许可。因此如果你选择使用GPL作ؓ(f)自己创造的软g的授权许可, 那么不要在意ZҎ(gu)代码h完全处理的权限。既然你选择了GPLQ那么你׃应该在意Q因Z没有希望从其他封闭授权的软g获利Q因此你׃希望其他? 通过你的软g获利。GPL划定了游戏范围以保证每个q等C同一个Y件获利的权利。就象好的市场驱动竞争以促进商业发展一P大家都有q等的权利但? 有最优秀的h可以莯一栗同样一旦你选择了将自己的Y件^{地l所有h׃n。如果有Z惌别h那样׃n代码Q他可以选择投资几百万来开发自q软gQ? 没有Z(x)L他这么做?br />
  可以对Y件定义若q种授权许可Q例如Perl同时hGPL授权许可和艺术性授权许?Artistic Licenses)。如果你希望你的软g和其他自pY件一起配合用,那么你必d其不仅仅定义GPL授权许可。但是GPL一般往往q不能和其他免费软g 授权许可很好的配合用?br />
  自由软gC֌对于GPL的一U批评是Q它L(fng)了自?freedom)q个单词。问题是q样的:(x)一个独裁? 有自由成Z个独裁者吗Q答案:(x)是可以的。自由和C֌没有M关系。自由意味着你可以在M时候随意做你想做的M事情。h们有自由选择不自?have the freedom not to be free)。困扰我的一件事情是Q虽然我从政治角度理解ؓ(f)什么他们要q么做,但是FSF和GPLq些人则們֐于重新按照他们希望的目的来定义自q含义Q? 但其实他们只是看C很狭义的自由的含义,而不是完全的自由。他们感兴趣的是在社区内部共享Y件代码,而不是个人对自己的Y件的L处置的自由,例如? GPL化的一D代码变成封闭代码等{。因此GPL本n从自q正的含义上ƈ没有真正Cq自由,而是限制了自由,仅仅保证了社区内׃n代码的自由。我不喜 Ƣ这些家伙,他们重新定义了自q含义Q而且如果你按照他们的意思定义自׃们往往懒得答理你。但是我认ؓ(f)从政{意义上来说Q他们是很好的,因ؓ(f)他强q? Z考虑自由Q大多数人没有时间去考虑自由的真正含义?br />
  那么对于BSDQ它也是不坏的选择。它对于那些希望~写闭代码E序的程序员是很有意义的。我理解Z么BSD授权许可q么有吸引力和它对于一些hZ么如此重要。但是也使我对从政治角度来看没有意义的BSD有了更深入的理解Q?br />
   如果有h以BSD授权许可发布软gQ那么别人就可以利用该Y件创Z个封闭源码版本,他不必向M人公开自己做了哪些修改。因此一个项目组可能p数年 来开发一个很的软gQ而一个h或一个公司则可能"L(fng)"该YӞq行一些简单的二次开发ƈ形成一个封闭源码的产品来盈利,却和原始开发者则可能没有从中 得到M利益。我是不能理解Z么这么多么辛苦的工作来努力其他人成为百万富。GPL则组l这U事情的发生Q它保证了Y件开放性的q箋和所有 用者具有^{的权利?br />
  BSD授权许可危险性的一个明昄例子是Q它如何使一个病毒扩散到整个世界。只要看看Kerberos的情? 可以了解情冉|如何p糕的。对于我自己来说Q当一个邪恶的公司p蹋了一个YӞ那么没有Q何办法强q它们和C会(x)一起合作来改善情况Q我个h是抵制所? q些软g的。我不能承受担心怺之间不兼容的版本到处出现。Kerberos是q样被糟y掉的,我永q不?x)再使用它。ؓ(f)什么说它被p蹋了呢Q被p蹋的版 本到处都是,而且影响很大之间又不怺兼容。我不会(x)花时间去使用q样的YӞ(x)知道有一天它?x)变成封闭源码的Q但是而且?x)和我在使用的版本不兼容。对于我? 说不兼容性是非常p糕的和不能接受的,如果我能避免使用q样的Y件我一定不?x)用它?br />
  既然GPL和BSD各有优缺点,那么哪个更适合你呢Q其中一个,没有一个或者是都适合你。重要的是要理解授权许可的含义,如果你不重视l果Q那么很好。虽然我不喜ƢBSD授权声明适用于我的YӞ但是如果你不介意别h利用你的软g获利那么BSD是你的最好的选择?br />
4.哪种更适合Q?br />
   哪种更好一些?{案是两个一样好。然而我选择了GPLQؓ(f)什么呢Q我对于所有的自由软g都是非常的感ȀQ我没有真正开发Q何能被用来售卖的软g(我通常 使用Python来开发web脚本)。我Z界创造的M东西我都希望在我之后有h能利用它和改q它Q所以我选择了GPL。但是我从来没有Ҏ(gu)的Y件? BSD授权许可Q因为我不希望那些不劌获者利用我的Y件来盈利Q而隐藏对软g的修攏V但是BSD授权许可Ҏ(gu)来说好的一面是它是未来的一U选择Q我不是 用它但是我很高兴它是一U选择?br />
5.l论

  Anonymous Coward有很好的l论Q“我可以认真写一个很长的短文作ؓ(f)回应Q但是大多数的读者可能希望有一个简单的概要QGPL授权许可有益于Y件的解放QBSD 则有益于人的解放。对于GPLQ确保了软g的发展拥有比软g开发者更多的自由Q而对于BSDQ保了Y件开发者拥有比软g的发展更多的自由。?

  我个栯为:(x)

GPL提倡和促进最l用L(fng)自由
BSD提倡程序开发者的自由?
   ȝ来说QQ何认ZU授权许可比另外一U好的h都是思想单的人,他们不能理解他们仅仅从他们自q角度考虑问题Q而不是从别h的角度考虑问题。我? 望强调的是这些h应该被消灭,q样他们的DNA׃?x)传播,不?x)创造那U用另外的标准对待别人和做出判断的政客、将军和法官?br />
  我这? 严重的冒犯了那些在关于Y件授权问题上为别人做军_的hQ可能要E微冒犯了那些让别h己做军_的h。我不介意有x权许可是如何影响世界的理论,但是 不要宣称一U授权比另外一U好的,因ؓ(f)q是一U基于特定h(hun)值的选择而已Q而不是一U事实。我接受q样的事实:(x)你所考虑的对你来说随最合适的授权许可Q但? 不一定是其他人的最佳选择?

  参考资?br />
  感谢Rick Holbert的徏议,使得我得以提高我的文章,使我明白被解放一词比自由一词更适合于讨论GPL?br />
  Slashdot有很多很好的文章l予我了很多的启q?br />
  作者Mark Nielsen一个独立咨询者,l诸如GNUJobs.com{写评论文章Q编写自pY件和在eastmont.net作ؓ(f)一个自愿者工作?br />
作者:(x)Mark Nielsen
~译Qideal

]]>
[Linux技术] 与用戯̎h关的pȝ文ghttp://www.shnenglu.com/guangping/archive/2007/10/26/35240.html王光q?/dc:creator>王光q?/author>Fri, 26 Oct 2007 07:32:00 GMThttp://www.shnenglu.com/guangping/archive/2007/10/26/35240.htmlhttp://www.shnenglu.com/guangping/comments/35240.htmlhttp://www.shnenglu.com/guangping/archive/2007/10/26/35240.html#Feedback0http://www.shnenglu.com/guangping/comments/commentRss/35240.htmlhttp://www.shnenglu.com/guangping/services/trackbacks/35240.html [Linux技术] 与用戯̎h关的pȝ文g






完成用户理的工作有许多U方法,但是每一U方法实际上都是Ҏ(gu)关的pȝ文gq行修改。与用户和用L(fng)相关的信息都存放在一些系l文件中Q这些文件包?etc/passwd, /etc/shadow, /etc/group{?


1 /etc/passwd

/etc/passwd文g是用L(fng)理工作涉及的最重要的一个文件。Linuxpȝ中的每个用户都在/etc/passwd文g中有一个对应的记录行,它记录了q个用户的一些基本属性。这个文件对所有用户都是可ȝ。它的内容类g面的例子Q?/font>

  Q?cat /etc/passwd

  root:x:0:0:Superuser:/:

  daemon:x:1:1:System daemons:/etc:

  bin:x:2:2:Owner of system commands:/bin:

  sys:x:3:3:Owner of system files:/usr/sys:

  adm:x:4:4:System accounting:/usr/adm:

  uucp:x:5:5:UUCP administrator:/usr/lib/uucp:

  auth:x:7:21:Authentication administrator:/tcb/files/auth:

  cron:x:9:16:Cron daemon:/usr/spool/cron:

  listen:x:37:4:Network daemon:/usr/net/nls:

  lp:x:71:18:Printer administrator:/usr/spool/lp:

  sam:x:200:50:Sam san:/usr/sam:/bin/sh

  从上面的例子我们可以看到Q?etc/passwd中一行记录对应着一个用P每行记录又被冒号(:)分隔?个字D,其格式和具体含义如下Q?/font>

  用户?口o(h):用户标识?l标识号:注释性描q?ȝ?dShell

  “用户名”是代表用户账号的字W串Q是用户在终端登录时输入的名U。它在系l中应该是惟一的,即不同用L(fng)d名应该是不同的。通常q个字段? 长度不超q?个字W,q且由大写字母?或数字组成。登录名中不能有冒号(:)Q因为冒号在q里是分隔符。ؓ(f)了兼容v见,d名中最好不要包含点字符 (.)Qƈ且不使用q字W?-)和加?+)打头?/font>

  “口令”一些系l中Q存攄加密后的用户口o(h)字。用户口令是用户q入pȝ的“凭证”,它对于系l的安全性有着非常重要的意义。虽然这个字D存? 的只是用户口令的加密Ԍ不是明文Q但是由?etc/passwd文gҎ(gu)有用户都可读Q所以这仍是一个安全隐(zhn)。因此,现在许多Linux pȝQ如SVR4Q都使用了shadow技术,把真正的加密后的用户口o(h)字存攑ֈ/etc/shadow文g中,而在/etc/passwd文g的口令字 D中只存放一个特D的字符Q例如“x”或者?”?/font>

  “用h识号”是一个整敎ͼpȝ内部用它来标识用戗一般情况下它与用户名是一一对应的。如果几个用户名对应的用h识号是一L(fng)Q系l内部将把它们视为同一个用P但是它们可以有不同的口o(h)、不同的ȝ录以及不同的dShell{?/font>

  通常用户标识L(fng)取D围是0?5 535?是超U用户root的标识号Q??9ql保留,作ؓ(f)理账号Q普通用L(fng)标识号从100开始。在Linuxpȝ中,q个界限?00?/font>

  “组标识号”字D记录的是用h属的用户l。它对应着/etc/group文g中的一条记录?/font>

  “注释性描q”字D记录着用户的一些个人情况,例如用户的真实姓名、电(sh)话、地址{,q个字段q没有什么实际的用途。在不同的Linux pȝ中,q个字段的格式ƈ没有l一。在许多Linuxpȝ中,q个字段存放的是一DQ意的注释性描q文字,用做finger命o(h)的输出?/font>

  “主目录”,也就是用L(fng)起始工作目录Q它是用户在d到系l之后所处的目录。在大多数系l中Q各用户的主目录都被l织在同一个特定的目录下, 而用户主目录的名U就是该用户的登录名。各用户对自qȝ录有诅R写、执行(搜烦Q权限,其他用户Ҏ(gu)目录的访问权限则Ҏ(gu)具体情况讄?/font>

  用户d后,要启动一个进E,负责用L(fng)操作传给内核Q这个进E是用户d到系l后q行的命令解释器或某个特定的E序Q即Shell? Shell是用户与Linuxpȝ之间的接口。Linux的Shell有许多种Q每U都有不同的特点。常用的有sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell){。系l管理员可以Ҏ(gu)pȝ情况和用户习(fn)惯ؓ(f)用户指定某个Shell。如果不指定ShellQ那么系l用sh为默认的dShellQ即q? 个字D늚gؓ(f)/bin/sh?/font>

  用户的登录Shell也可以指定ؓ(f)某个特定的程序(此程序不是一个命令解释器Q。利用这一特点Q我们可以限制用户只能运行指定的应用E序Q在该应用程序运行结束后Q用户就自动退Zpȝ。有些Linux pȝ要求只有那些在系l中登记了的E序才能出现在这个字D中?/font>

  pȝ中有一cȝL(fng)Z用户Qpsuedo usersQ,q些用户?etc/passwd文g中也占有一条记录,但是不能dQ因为它们的dShell为空。它们的存在主要是方便系l管理,满相应的系l进E对文g属主的要求?br />
/etc/passwd文g中常见的伪用?

bin 拥有可执行的用户命o(h)文g

sys 拥有pȝ文g

adm 拥有帐户文g

uucp UUCP使用

lp lp或lpd子系l?/font>

nobody NFS使用


  除了上面列出的伪用户外,q有许多标准的伪用户Q例如:(x)audit, cron, mail, usenet{,它们也都各自为相关的q程和文件所需要?/font>


2 /etc/shadow

׃/etc/passwd文g是所有用户都可读的,如果用户的密码太单或规律比较明显的话Q一台普通的计算机就能够很容易地它破解Q因此对安全性要 求较高的Linuxpȝ都把加密后的口o(h)字分d来,单独存放在一个文件中Q这个文件是/etc/shadow文g。只有超U用h拥有该文件读权限Q这 ׃证了用户密码的安全性?/font>

  /etc/shadow中的记录行与/etc/passwd中的一一对应Q它由pwconv命o(h)Ҏ(gu)/etc/passwd中的数据自动产生。它的文件格式与/etc/passwdcMQ由若干个字D늻成,字段之间用?”隔开。这些字D|Q?/font>

  d?加密口o(h):最后一ơ修Ҏ(gu)?最时间间?最大时间间?警告旉:不活动时?

  失效旉:标志

  “登录名”是?etc/passwd文g中的d名相一致的用户账号?/font>

  “口令”字D存攄是加密后的用户口令字Q长度ؓ(f)13个字W。如果ؓ(f)I,则对应用h有口令,d时不需要口令;如果含有不属于集?{ ./0-9A-Za-z }中的字符Q则对应的用户不能登录?/font>

  “最后一ơ修Ҏ(gu)间”表C的是从某个时刻P到用h后一ơ修改口令时的天数。时间v点对不同的系l可能不一栗例如在SCO Linux 中,q个旉L(fng)?970q??日?/font>

  “最时间间隔”指的是两次修改口o(h)之间所需的最天数?/font>

  “最大时间间隔”指的是口o(h)保持有效的最大天数?/font>

  “警告时间”字D表C的是从pȝ开始警告用户到用户密码正式失效之间的天数?/font>

  “不zd旉”表C的是用h有登录活动但账号仍能保持有效的最大天数?/font>

  “失效时间”字D늻出的是一个绝对的天数Q如果用了q个字段Q那么就l出相应账号的生存期。期满后Q该账号׃再是一个合法的账号Q也׃能再用来d了?/font>

  下面?etc/shadow的一个例子:(x)

  Q?cat /etc/shadow

  root:Dnakfw28zf38w:8764:0:168:7:::

  daemon:*::0:0::::

  bin:*::0:0::::

  sys:*::0:0::::

  adm:*::0:0::::

  uucp:*::0:0::::

  nuucp:*::0:0::::

  auth:*::0:0::::

  cron:*::0:0::::

  listen:*::0:0::::

  lp:*::0:0::::

  sam:EkdiSECLWPdSa:9740:0:0::::


3 /etc/group

用户分l是Linux pȝ中对用户q行理及控制访问权限的一U手Dc每个用户都属于某个用户l;一个组中可以有多个用户Q一个用户也可以属于不同的组。当一个用户同时是多个 l中的成员时Q在/etc/passwd文g中记录的是用h属的ȝQ也是d时所属的默认l,而其他组UCؓ(f)附加l。用戯讉K属于附加l的文gӞ 必须首先使用newgrp命o(h)使自己成为所要访问的l中的成员。用L(fng)的所有信息都存放?etc/group文g中。此文g的格式也cM? /etc/passwd文gQ由冒号(:)隔开若干个字D,q些字段有:(x)

  l名:口o(h):l标识号:l内用户列表

  “组名”是用户l的名称Q由字母或数字构成。与/etc/passwd中的d名一Pl名不应重复?/font>

  “口令”字D存攄是用L(fng)加密后的口o(h)字。一般Linux pȝ的用L(fng)都没有口令,卌个字D一般ؓ(f)I,或者是*?/font>

  “组标识号”与用户标识L(fng)|也是一个整敎ͼ被系l内部用来标识组?/font>

  “组内用户列表”是属于q个l的所有用L(fng)列表Q不同用户之间用逗号(,)分隔。这个用L(fng)可能是用L(fng)ȝQ也可能是附加组?/font>

  /etc/group文g的一个例子如下:(x)

  # cat /etc/group

  root::0:root

  bin::2:root,bin

  sys::3:root,uucp

  adm::4:root,adm

  daemon::5:root,daemon

  lp::7:root,lp

  users::20:root,sam



]]>
Linuxpȝ下C语言~程基础知识介绍(一很好的入门介绍)Q{载)http://www.shnenglu.com/guangping/archive/2007/07/10/27773.html王光q?/dc:creator>王光q?/author>Tue, 10 Jul 2007 01:25:00 GMThttp://www.shnenglu.com/guangping/archive/2007/07/10/27773.htmlhttp://www.shnenglu.com/guangping/comments/27773.htmlhttp://www.shnenglu.com/guangping/archive/2007/07/10/27773.html#Feedback0http://www.shnenglu.com/guangping/comments/commentRss/27773.htmlhttp://www.shnenglu.com/guangping/services/trackbacks/27773.htmlq篇文章介绍在LINUX下进行C语言~程所需要的基础知识.在这文章当?我们会(x)学到以下内容:

源程序编?

Makefile的编?

E序库的链接

E序的调?

头文件和pȝ求助


1.源程序的~译

在Linux下面,如果要编译一个C语言源程?我们要用GNU的gcc~译? 下面我们以一个实例来说明如何使用gcc~译?

假设我们有下面一个非常简单的源程?hello.c):


int main(int argc,char **argv)
{
printf(""Hello Linux "");
}


要编译这个程?我们只要在命令行下执?

gcc -o hello hello.c

gcc ~译器就?x)?f)我们生成一个hello的可执行文g.执行./hello可以看到程序的输出l果?命o(h)行中 gcc表示我们是用gcc来编译我们的源程?-o 选项表示我们要求~译器给我们输出的可执行文g名ؓ(f)hello 而hello.c是我们的源程序文?

gcc~译器有许多选项,一般来说我们只要知道其中的几个够? -o选项我们已经知道?表示我们要求输出的可执行文g? -c选项表示我们只要求编译器输出目标代码,而不必要输出可执行文? -g选项表示我们要求~译器在~译的时候提供我们以后对E序q行调试的信?

知道了这三个选项,我们可以编译我们自己所写的单的源程序了,如果你想要知道更多的选项,可以查看gcc的帮助文?那里有着许多对其它选项的详l说?

2.Makefile的编?

假设我们有下面这L(fng)一个程?源代码如?


/* main.c */
#include ""mytool1.h""
#include ""mytool2.h""
int main(int argc,char **argv)
{
mytool1_print(""hello"");
mytool2_print(""hello"");
}
/* mytool1.h */
#ifndef _MYTOOL_1_H
#define _MYTOOL_1_H
void mytool1_print(char *print_str);
#endif
/* mytool1.c */
#include ""mytool1.h""
void mytool1_print(char *print_str)
{
printf(""This is mytool1 print %s "",print_str);
}
/* mytool2.h */
#ifndef _MYTOOL_2_H
#define _MYTOOL_2_H
void mytool2_print(char *print_str);
#endif
/* mytool2.c */
#include ""mytool2.h""
void mytool2_print(char *print_str)
{
printf(""This is mytool2 print %s "",print_str);
}


当然׃q个E序是很短的我们可以q样来编?

gcc -c main.c

gcc -c mytool1.c

gcc -c mytool2.c

gcc -o main main.o mytool1.o mytool2.o

q? L(fng)话我们也可以产生mainE序,而且也不时很ȝ.但是如果我们考虑一下如果有一天我们修改了其中的一个文?比如说mytool1.c)那么我们? 道还要重新输入上面的命o(h)?也许你会(x)?q个很容易解军_,我写一个SHELL脚本,让她帮我d成不可以了.是的对于q个E序来说,是可以vC? ?但是当我们把事情想的更复杂一?如果我们的程序有几百个源E序的时?N也要~译器重C个一个的ȝ?

为此,聪明的程? 员们惛_了一个很好的工具来做qg事情,q就是make.我们只要执行以下make,可以把上面的问题解x.在我们执行make之前,我们要先~写一 个非帔R要的文g.Makefile.对于上面的那个程序来?可能的一个Makefile的文件是:

# q是上面那个E序的Makefile文g

main:main.o mytool1.o mytool2.o

gcc -o main main.o mytool1.o mytool2.o

main.o:main.c mytool1.h mytool2.h

gcc -c main.c

mytool1.o:mytool1.c mytool1.h

gcc -c mytool1.c

mytool2.o:mytool2.c mytool2.h

gcc -c mytool2.c

有了q个Makefile文g,不过我们什么时候修改了源程序当中的什么文?我们只要执行make命o(h),我们的编译器都只?x)去~译和我们修改的文g有关的文?其它的文件她q理都不惛_理的.

下面我们学习(fn)Makefile是如何编写的.

在Makefile中也#开始的行都是注释行.Makefile中最重要的是描述文g的依赖关pȝ说明.一般的格式?

target: components

TAB rule

W一行表C的是依赖关p?W二行是规则.

比如说我们上面的那个Makefile文g的第二行

main:main.o mytool1.o mytool2.o

? C我们的目标(target)main的依赖对?components)是main.o mytool1.o mytool2.o 当倚赖的对象在目标修改后修改的?pL行规则一行所指定的命?p我们的上面那个MakefileW三行所说的一栯执行 gcc -o main main.o mytool1.o mytool2.o 注意规则一行中的TAB表示那里是一个TAB?

Makefile有三个非常有用的变量.分别?@,$^,$<代表的意义分别是:>

$@目标文g,$^所有的依赖文g,$

如果我们使用上面三个变量,那么我们可以化我们的Makefile文g?

# q是化后的Makefile

main:main.o mytool1.o mytool2.o

gcc -o $@ $^

main.o:main.c mytool1.h mytool2.h

gcc -c $<

mytool1.o:mytool1.c mytool1.h

gcc -c $<

mytool2.o:mytool2.c mytool2.h

gcc -c $<

l过化后我们的Makefile是简单了一?不过Z有时候还想简单一?q里我们学习(fn)一个Makefile的缺省规?

.c.o:

gcc -c $<

q个规则表示所有的 .o文g都是依赖与相应的.c文g?例如mytool.o依赖于mytool.cq样Makefileq可以变?

# q是再一ơ简化后的Makefile

main:main.o mytool1.o mytool2.o

gcc -o $@ $^

.c.o:

gcc -c $<

好了,我们的Makefile 也差不多?如果想知道更多的关于Makefile规则可以查看相应的文?

3.E序库的链接

试着~译下面q个E序

/* temp.c */

#include

int main(int argc,char **argv)

{

double value;

printf(""Value:%f "",value);

}

q个E序相当?但是当我们用 gcc -o temp temp.c ~译时会(x)出现下面所C的错误.

/tmp/cc33Kydu.o: In function ``main´´:

/tmp/cc33Kydu.o(.text+0xe): undefined reference to ``log´´

collect2: ld returned 1 exit status

? 现这个错误是因ؓ(f)~译器找不到l(f)og的具体实?虽然我们包括了正的头文?但是我们在编译的时候还是要q接定的库.在Linux?Z使用数学? ?我们必须和数学库q接,为此我们要加?-lm 选项. gcc -o temp temp.c -lmq样才能够正的~译.也许有h要问,前面我们用printf函数的时候怎么没有q接库呢?是这L(fng),对于一些常用的函数的实?gcc~译器会(x)? 动去q接一些常用库,q样我们没有必要自己去指定? 有时候我们在~译E序的时候还要指定库的\?q个时候我们要用到~译器的 -L选项指定路径.比如说我们有一个库?/home/hoyt/mylib?q样我们~译的时候还要加? -L/home/hoyt/mylib.对于一些标准库来说,我们没有必要指出路径.只要它们在v~省库的路径下就可以?pȝ的缺省库的\?lib /usr/lib /usr/local/lib 在这三个路径下面的库,我们可以不指定\?

q有一个问?有时候我们用了某个 函数,但是我们不知道库的名?q个时候怎么办呢?很抱?对于q个问题我也不知道答?我只有一个傻办法.首先,我到标准库\径下面去扄看有没有和我 用的函数相关的库,我就q样扑ֈ了线E?thread)函数的库文g(libpthread.a). 当然,如果找不?只有一个笨Ҏ(gu).比如我要找sinq个函数所在的? 只好用 nm -o /lib/*.so|grep sin>~/sin 命o(h),然后看~/sin文g,到那里面L? 在sin文g当中,我会(x)扑ֈq样的一行libm-2.1.2.so:00009fa0 W sin q样我就知道了sin? libm-2.1.2.so库里?我用 -lm选项可以了(L前面的lib和后面的版本标志,剩下m了所以是 -lm). 如果你知道怎么?误快告诉我,我回非常感激?谢谢!

4.E序的调?

我们~写的程序不太可能一ơ性就?x)成功?在我们的E序当中,?x)出现许许多多我们想不到的错?q个时候我们就要对我们的程序进行调试了.

最 常用的调试Y件是gdb.如果你想在图形界面下调试E序,那么你现在可以选择xxgdb.记得要在~译的时候加? -g选项.关于gdb的用可以看gdb的帮助文?׃我没有用q这个Y?所以我也不能够说出如何使用. 不过我不喜欢用gdb.跟踪一个程序是很烦的事?我一般用在程序当中输Z间变量的值来调试E序?当然你可以选择自己的办?没有必要d别h?? 在有了许多IDE环境,里面已经自己带了调试器了.你可以选择几个试一试找己喜Ƣ的一个用.

5.头文件和pȝ求助

有时候我们只知道一个函数的大概形式,不记得确切的表达?或者是不记得着函数在那个头文gq行了说?q个时候我们可以求助系l?

? 如说我们想知道freadq个函数的确切Ş?我们只要执行 man fread pȝ׃(x)输出着函数的详l解释的.和这个函数所在的头文件说明了. 如果我们要writeq个函数的说?当我们执行man write?输出的结果却不是我们所需要的. 因ؓ(f)我们要的是writeq个函数的说?可是出来的却是writeq个命o(h)的说?Z得到write的函数说明我们要?man 2 write. 2表示我们用的writeq个函数是系l调用函?q有一个我们常用的?表示函数是C的库函数?

C不管什么时?man都是我们的最好助手?

好了,q一章就讲这么多?有了q些知识我们可以进入激动h心的Linux下的CE序探险zd?/W一个依赖文?>

]]>
emacs23的?/title><link>http://www.shnenglu.com/guangping/archive/2006/08/25/11683.html</link><dc:creator>王光q?/dc:creator><author>王光q?/author><pubDate>Fri, 25 Aug 2006 01:35:00 GMT</pubDate><guid>http://www.shnenglu.com/guangping/archive/2006/08/25/11683.html</guid><wfw:comment>http://www.shnenglu.com/guangping/comments/11683.html</wfw:comment><comments>http://www.shnenglu.com/guangping/archive/2006/08/25/11683.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/guangping/comments/commentRss/11683.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/guangping/services/trackbacks/11683.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;============================ 语言环境字符集设|?=================================<br>;;q一部䆾主要用在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-modeq,好像没作?br>;=========================== 语言环境字符集设|结?===============================</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;============================ MS Windows环境下字体设|?===========================<br>(setq default-frame-alist <br>(append <br>  '((font . "fontset-chinese")) default-frame-alist))</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>(create-fontset-from-fontset-spec<br>  "-outline-Courier New-normal-r-normal-normal-13-97-96-96-c-*-fontset-chinese")<br>(set-fontset-font<br> "fontset-default" nil<br> "-outline-新宋?normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)<br>(set-fontset-font<br> "fontset-chinese" 'kana<br> "-outline-新宋?normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)<br>(set-fontset-font<br> "fontset-chinese" 'han<br> "-outline-新宋?normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)<br>(set-fontset-font<br> "fontset-chinese" 'cjk-misc<br> "-outline-新宋?normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)<br>(set-fontset-font<br> "fontset-chinese" 'symbol<br> "-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"> </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>;;;;;;;;;;;;;;;;;;;;语言环境字体讄l束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</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>;;;;;;;;;;;;;;;;;;;;;;;;;;;  讄H口界面 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</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>;;讄滚动栏在H口右侧Q而默认是在左?/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>             '((vertical-scroll-bars)  <br>               (top . 25)<br>               (left . 45)                               <br>               (width . 110)<br>               (height . 40)           <br>               (background-color . "black")<br>               (foreground-color . "grey")<br>               (cursor-color     . "gold1")<br>               (mouse-color      . "gold1")<br>               (tool-bar-lines . 0)<br>               (menu-bar-lines . 1)<br>               (right-fringe)<br>               (left-fringe)))</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">               <br>;; 讄另外一些颜Ԍ(x)语法高亮昄的背景和主题Q区域选择的背景和主题Q二ơ选择的背景和选择<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"> </p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;;;;;;;;;;;;;;;;;;;;;;;;;;;  讄界面l束  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;;;;;;;;;;;;;;;;;;;;;;;;;;;   昄旉讄   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br>(display-time-mode 1);;启用旉昄讄Q在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);;旉的变化频率,单位多少来着Q?br> <br>;;;;;;;;;;;;;;;;;;;;;;;;;;;  昄旉讄l束  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;定制操作?fn)?;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;讄打开文g的缺省\?br>(setq default-directory "/") </p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;ido的配|?q个可以使你在用C-x C-f打开文g的时候在后面有提C?<br>;;q里是直接打开了ido的支持,在emacs23中这个是自带?<br>(ido-mode t) </p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq visible-bell t)<br>;;关闭烦h的出错时的提C声<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 或空格键表示 yesQn 表示 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>;;不要在鼠标点ȝ那个地方插入剪脓(chung)板内宏V我不喜Ƣ那Pl常把我的文档搞的一团糟。我觉得先用光标定位Q然后鼠标中键点击要好的多。不你的光标在文档的那个位|,或是?minibufferQ鼠标中键一点击QX selection 的内容就被插入到那个位置?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq kill-ring-max 200)<br>;;讄_脓(chung)~冲条目数量.用一个很大的kill ring(最多的记录个数). q样防止我不心删掉重要的东?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq-default auto-fill-function 'do-auto-fill) <br> ; Autofill in all modes;;<br>(setq default-fill-column 120)<br>;;?fill-column 设ؓ(f) 60. q样的文字更好读</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, q会(x)引v很多奇怪的错误。编?Makefile 的时候也不用担心Q因?makefile-mode ?x)?TAB 键设|成真正?TAB 字符Qƈ且加亮显C的?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq sentence-end "\\([。!Q]\\|……\\|[.?!][]\"')}]*\\($\\|[ \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  scroll-conservatively 10000)<br>;;防止面滚动时蟩动, scroll-margin 3 可以在靠q屏q边?行时开始滚动,可以很好的看C下文?/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>;;讄~省L式是textQ?q进入auto-fillơ模?而不是基本模式fundamental-mode</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq show-paren-mode t) ;;打开括号匚w昄模式<br>(setq show-paren-style 'parenthesis)<br>;;括号匚w时可以高亮显C另外一边的括号Q但光标不会(x)烦h的蟩到另一个括号处?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq mouse-avoidance-mode 'animate)<br>;;光标靠近鼠标指针Ӟ让鼠标指针自动让开Q别挡住视线?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq frame-title-format "<a href="mailto:emacs@%b">emacs@%b</a>")<br>;;在标题栏昄buffer的名字,而不?<a href="mailto:emacs@wangyin.com">emacs@wangyin.com</a> q样没用的提C?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq uniquify-buffer-name-style 'forward);;好像没v作用<br>;; 当有两个文g名相同的~冲Ӟ使用前缀的目录名?buffer 名字Q不用原来的foobar<?> 形式?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq auto-image-file-mode t)<br>;;?Emacs 可以直接打开和显C图片?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;(auto-compression-mode 1)   <br>;打开压羃文g时自动解压羃?</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq global-font-lock-mode t)<br>;;q行语法加亮?/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>      'comint-watch-for-password-prompt)<br>;;当你在shell、telnet、w3m{模式下Ӟ必然到q要输入密码的情?此时加密昑և你的密码</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; (setq version-control t);;启用版本控制Q即可以备䆾多次<br>;; (setq kept-old-versions 2);;备䆾最原始的版本两ơ,及第一ơ编辑前的文档,和第二次~辑前的文档<br>;; (setq kept-new-versions 1);;备䆾最新的版本1ơ,理解同上<br>;; (setq delete-old-versions t);;删掉不属于以?中版本的版本<br>;; (setq backup-directory-alist '(("." . "~/backups")));;讄备䆾文g的\?br>;; (setq backup-by-copying t);;备䆾讄Ҏ(gu)Q直接拷?br>;; Emacs 中,改变文gӞ默认都会(x)产生备䆾文g(?~ l尾的文?。可以完全去?br>;; (q不可取)Q也可以制定备䆾的方式。这里采用的是,把所有的文g备䆾都放在一<br>;; 个固定的地方("~/backups")。对于每个备份文Ӟ保留最原始的两个版本和最新的<br>;; 1个版本。ƈ且备份的时候,备䆾文g是复本,而不是原件?/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>;; 不生成(f)时文?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(put 'scroll-left 'disabled nil)     ;允许屏幕左移<br>(put 'scroll-right 'disabled nil)    ;允许屏幕右移<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和外部其他程序的_脓(chung)<br>(setq x-select-enable-clipboard t)</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq mouse-yank-at-point t)<br>;;使用鼠标中键可以_脓(chung)</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq user-full-name "王光q?)<br>(setq user-mail-address "<a href="mailto:getmails@163.com">getmails@163.com</a>")<br>;;讄有用的个Z?q在很多地方有用?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq require-final-newline t)<br>;; 自动的在文g末增加一新行</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>;; 当光标在行尾上下Ud的时候,始终保持在行?/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 中已l是~省讄。按 C-n 或向下键时不d新行?br>  <br>(global-set-key [home] 'beginning-of-buffer)<br>(global-set-key [end] 'end-of-buffer)<br>;;讄home键指向buffer开_(d)end键指向bufferl尾</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>(global-set-key (kbd "C-,") 'scroll-left)<br>;; "C-,"设ؓ(f)屏幕左移命o(h)<br>(global-set-key (kbd "C-.") 'scroll-right)<br>;; "C-."设ؓ(f)屏幕右移命o(h)</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 的另一个bufferH口</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(defun du-onekey-compile ()<br>  "Save buffers and start compile"<br>  (interactive)<br>  (save-some-buffers t)<br>  (switch-to-buffer-other-window "*compilation*")<br>  (compile compile-command))<br>  (global-set-key [C-f5] 'compile)<br>  (global-set-key [f5] 'du-onekey-compile)<br>;;  C-f5, 讄~译命o(h); f5, 保存所有文件然后编译当前窗口文?</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key [f6] 'gdb)             <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>  "Open eshell in other buffer"<br>  (interactive)<br>  (split-window-vertically)<br>  (eshell))<br>(global-set-key [(f8)] 'open-eshell-other-buffer)<br>(global-set-key [C-f8] 'eshell)<br>;;目的是开一个shell的小bufferQ用于更方便地测试程?也就是运行程序了)Q我l常?x)用到?br>;;f8是另开一个buffer然后打开shellQC-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 h<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命o(h)<br>;;使用 n ?p 可以上下UdQ?br>;; + 展开目录或文件进行浏览,- 收羃QRET 讉K目录或文Ӟ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命o(h)</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key [f10] 'undo)             <br>;;讄F10为撤销</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key [f11] 'calendar) <br>;;讄F11快捷键指定Emacs 的日历系l?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(global-set-key [f12] 'list-bookmarks)<br>;;讄F12 快速察看日E安?/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>;; 讄旉戻I标识出最后一ơ保存文件的旉?/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-<SPC>") 'set-mark-command)<br>;;q样 我就不用?C-@ ?setmark ? C-@ 很不好按?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;定制操作?fn)惯l束;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  讄日历 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<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">;;讄我所在地方的l纬度,calendar里有个功能是日月食的预测Q和你的l纬度相联系的?br>;; 让emacs能计日出日落的旉Q在 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">;; 讄阴历昄Q在 calendar 上用 pC 昄阴历<br>(setq chinese-calendar-celestial-stem<br>  ["? "? "? "? "? "? "? "? "? "?])<br>(setq chinese-calendar-terrestrial-branch<br>  ["? "? "? "? "? "? "? "? "? "? "? "?])</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; 讄 calendar 的显C?br>(setq calendar-remove-frame-by-deleting t)<br>(setq calendar-week-start-day 1)            ; 讄星期一为每周的W一?br>(setq mark-diary-entries-in-calendar t)     ; 标记calendar上有diary的日?br>(setq mark-holidays-in-calendar nil)        ; ZH出有diary的日期,calendar上不标记节日<br>(setq view-calendar-holidays-initially nil) ; 打开calendar的时候不昄一堆节?</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; L不关心的节日Q设定自己在意的节日Q在 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>                         (holiday-fixed 2 14 "情h?)<br>                         (holiday-fixed 3 14 "白色情h?)<br>                         (holiday-fixed 4 1 "愚h?)<br>                         (holiday-fixed 5 1 "力_?)<br>                         (holiday-float 5 0 2 "母亲?)<br>                         (holiday-fixed 6 1 "儿童?)<br>                         (holiday-float 6 0 3 "父亲?)<br>                         (holiday-fixed 7 1 "建党?)<br>                         (holiday-fixed 8 1 "建军?)<br>                         (holiday-fixed 9 10 "教师?)<br>                         (holiday-fixed 10 1 "国庆?)<br>                         (holiday-fixed 12 25 "圣诞?)))</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;Calendar模式支持各种方式来更改当前日?br>;;Q这里的“?#8221;是指q没有到来的那一天,“?#8221;是指已经q去的日子)<br>;;  q      退出calendar模式<br>;; C-f     让当前日期向前一?br>;; C-b     让当前日期向后一?br>;; C-n     让当前日期向前一?br>;; C-p     让当前日期向后一?br>;; M-}     让当前日期向前一个月<br>;; M-{     让当前日期向后一个月<br>;; C-x ]   让当前日期向前一q?br>;; C-x [   让当前日期向后一q?br>;; C-a     Ud到当前周的第一?br>;; C-e     Ud到当前周的最后一?br>;; M-a     Ud到当前月的第一?br>;; M-e     多动到当前月的最后一?br>;; M-<     Ud到当前年的第一?br>;; M->     Ud到当前年的最后一?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;Calendar模式支持Ud多种Ud到特珠日期的方式<br>;; g d     UdC个特别的日期<br>;;  o      使某个特D的月分作ؓ(f)中间的月?br>;;  .      Ud到当天的日期<br>;; p d     昄某一天在一q中的位|,也显C本q度q有多少天?br>;; C-c C-l hCalendarH口</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; Calendar支持生成LATEX代码?br>;; t m     按月生成日历<br>;; t M     按月生成一个美化的日历<br>;; t d     按当天日期生成一个当天日?br>;; t w 1   在一上生成q个周的日历<br>;; t w 2   在两上生成q个周的日历<br>;; t w 3   生成一个ISO-SYTLE风格的当前周日历<br>;; t w 4   生成一个从周一开始的当前周日?br>;; t y     生成当前q的日历</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;EMACS Calendar支持配置节日Q?br>;; h       昄当前的节?br>;; x       定义当天为某个节?br>;; u       取消当天已被定义的节?br>;; e       昄所有这前后׃个月的节日?br>;; M-x holiday  在另外的H口的显C前后三个月的节日?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;; 另外Q还有一些特D的Q有意思的命o(h)Q?br>;; S       昄当天的日出日落时?是大写的S)<br>;; p C     昄农历可以使用<br>;; g C     使用农历Ud日期可以使用</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  日历讄l束 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  讄日记 ;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq diary-file "~/diary");; 默认的日记文?br>(setq diary-mail-addr "<a href="mailto:getmails@163.com">getmails@163.com</a>")<br>(add-hook 'diary-hook 'appt-make-list)<br>;;当你创徏了一?~/diary'文gQ你可以用calendarL看里面的内容。你可以查看当天的事Ӟ相关命o(h)如下 Q?br>;;  d     昄被选中的日期的所有事?br>;;  s     昄所有事Ӟ包括q期的,未到期的{等</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; 创徏一个事件的样例Q?br>;; 02/11/1989<br>;;     Bill B. visits Princeton today<br>;;     2pm Cognitive Studies Committee meeting<br>;;     2:30-5:30 Liz at Lawrenceville<br>;;     4:00pm Dentist appt<br>;;     7:30pm Dinner at George's<br>;;     8:00-10:00pm concert</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; 创徏事g的命令:(x)<br>;; i d   为当天日期添加一个事?br>;; i w   为当天周创徏一个周事g<br>;; i m   为当前月创徏一个月事g<br>;; i y   为当前年创徏一个年事g<br>;; i a   为当前日期创Z个周q纪忉|<br>;; i c   创徏一个@环的事g</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  讄日记l束  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"> </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>;;q几句Lisp代码的作用是讄中文环境、注册五W字型输入法。保?emacs后请重新启动emacsQ?br>;;使得上面的设|生效。现在?zhn)可以用快捷键C-\ Q同时按?Ctrl和反斜线键)唤出五笔字型输入法了?br>;;在emacs的mode line上会(x)出现“五笔字型”的字栗?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;=======================五笔输入法设|结?==================</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;======================= cscope 讄 =======================<br>;;使用 cscope 览源代?q个xcscope是个改进版,为每一ơ查扄l果使用不同 buffer Q?br>;;q样可以保存以前的l果?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(add-to-list 'load-path  "~/lisp/xcscope") ;; Y件包所在的路径加到 EMACS ?load-path<br>(require 'xcscope) ;; 加蝲相应的Y?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; C-c s a             讑֮初始化的目录Q一般是你代码的根目?br>;; C-s s I             对目录中的相x件徏立列表ƈq行索引<br>;; C-c s s             序找W号<br>;; C-c s g             L全局的定?br>;; C-c s c             看看指定函数被哪些函数所调用<br>;; C-c s C             看看指定函数调用了哪些函?br>;; C-c s e             L正则表达?br>;; C-c s f             L文g<br>;; C-c s i             看看指定的文件被哪些文ginclude</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;===================== cscope 讄l束 ======================</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;======================== tabbar讄 ========================<br>(add-to-list 'load-path  "~/lisp/tabbar")<br>(require 'tabbar)<br>(tabbar-mode)<br>;========================tabbar讄l束=======================</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;======================= wb-line-number讄 ================== <br>;;增加一个显CL(fng)buffer<br>;(add-to-list 'load-path  "~/lisp/wb-line-number")<br>;(require 'wb-line-number)<br>;(wb-line-number-enable)<br>;====================== wb-line-number讄l束 ================</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;======================= setnu讄 ============================ <br>;;再增加一个显CL(fng)功能<br>(add-to-list 'load-path  "~/lisp/setnu")<br>(require 'setnu)<br>(global-set-key [f2] (quote setnu-mode))</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;======================= setnu讄l束 Q=Q================== </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  "~/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>  "Set mark for rectangle." t)<br>(autoload 'rm-exchange-point-and-mark "rect-mark"<br>  "Exchange point and mark for rectangle." t)<br>(autoload 'rm-kill-region "rect-mark"<br>  "Kill a rectangular region and save it in the kill ring." t)<br>(autoload 'rm-kill-ring-save "rect-mark"<br>  "Copy a rectangular region to the kill ring." t)<br>(autoload 'rm-mouse-drag-region "rect-mark"<br>  "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>  "Example rect-mark key and mouse bindings for picture mode.")</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;=====================  rect-mark讄l束 =========================</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;=====================  info文g讄 ==============================<br>;;Info 的菜单是?Info-directory-list 的顺序列出的Q?Info-directory-list 是在启动 info ?br>;;用Info-default-directory-list 来初始的。所以要d Info 目录是要讄 Info-default-directory-list?br>;;在添加的 Info 目录中,创徏一个叫 dir 的文Ӟ其实所?Info-directory-list 里有一个文件就行了Q?br>;;?${emacs}/info 文g夹下有这个文Ӟ修改q个也可以)?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(add-to-list 'Info-default-directory-list  "~/lisp/info/") </p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; nQ蟩转到该节点的下一个节点;           <br>;; pQ蟩转到该节点的上一个节点;<br>;; m: 指定菜单名而选择另外一个节点;<br>;; fQ进入交叉引用主题;<br>;; lQ进入该H口中的最后一个节点;<br>;; TABQ蟩转到该窗口的下一个超文本链接Q?br>;; RETQ进入光标处的超文本链接Q?br>;; uQ{C一U主题;<br>;; dQ回?info 的初始节点目录;<br>;; hQ调?info 教程Q?br>;; qQ退?info?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;===================  info文g讄l束 ============================</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讄l束 =============================</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;===================== 文g头header讄 ===========================<br>;;当我们保存文件的时?有很多信息可以自动更?如何自动更新信息, 更新那些信息,<br>;也是可以完全自己配置. 包括文g名称,最后一ơ修Ҏ(gu)?文g保存?gu)ơ?最后一ơ修改的作者等{?<br>;;可以?M-x make-header 自动生成文g头信? <br>(add-to-list 'load-path  "~/lisp/header")<br>(require 'header)<br>(setq make-header-hooks '(header-mode-line<br>                            header-blank<br>                            header-file-name<br>                            header-blank<br>                            header-copyright<br>                            header-blank<br>                            header-author<br>                            header-creation-date<br>                            header-modification-author<br>                            header-modification-date<br>                            header-update-count<br>                            header-blank<br>                            header-history<br>                            header-blank<br>                            ))<br>(setq header-copyright-notice "  源成工作?作品" )<br>(make-local-variable 'user-full-name)<br>(make-local-variable 'user-mail-address)</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;===================== 文g头header讄l束 ==========================</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;===================== template讄 =================================<br>(add-to-list 'load-path  "~/lisp/template")<br>(require 'template)<br>(template-initialize)</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;===================== template讄l束===============================</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 目录列表H口<br>;; C-c . g s 源码H口<br>;; C-c . g m Ҏ(gu)和变量窗?br>;; C-c . g h 历史H口<br>;; C-c . g l 最后选择q的~辑H口<br>;; C-c . g 1 ~辑H口1<br>;; C-c . g n ~辑H口n<br>;; C-c . l c 选择版面<br>;; C-c . l r 重画版面<br>;; C-c . l t 拴牢版面(锁定版面)<br>;; C-c . l w 拴牢可见的ecbH口<br>;; C-c . \   拴牢~绎H口</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;; 其中l为小写字?L),大家别看?!</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;======================cedet讄l束==================================</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;;;;;;;;;;;;;;;;;;;;;;;;;; 自定义lisp包设|结?nbsp; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>;=====================    GNUS讄  =================================<br>(setq gnus-select-method '(nntp "news.yaako.com"))<br>(setq gnus-default-subscribed-newsgroups<br>  '( "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>   gnus-group-name-charset-group-alist '((".*" . chinese-iso-8bit))<br>   gnus-summary-show-article-charset-alist<br>       '((1 . chinese-iso-8bit)<br>         (2 . gbk)<br>         (3 . big5)<br>         (4 . utf-8))<br>   gnus-newsgroup-ignored-charsets<br>       '(unknown-8bit x-unknown iso-8859-1))</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br>(setq mail-sources<br>       '((pop :server "pop3.163.com" ;; 在这里设|pop3服务?br>       :user "66656799" ;; 用户?br>;;       :port "110"<br>       :password "wcmwlw"))) ;; 密码<br>(setq gnus-secondary-select-methods '((nnfolder "")))</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq user-full-name "getmails") ;; 外发的邮仉用这个名?br>(setq user-mail-address "<a href="mailto:getmails@163.com">getmails@163.com</a>") ;;外发的邮仉用这个地址<br>(setq smtpmail-auth-credentials<br>      '(("smtp.163.com" ;; SMTP服务?br>      25<br>      "getmails" ;; 用户?br>      "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 默认的保质期?天,如果你觉得时间不合适,可以自己讄</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(add-hook 'gnus-article-prepare-hook<br>          (lambda ()<br>            (setq fill-column 60)<br>            (gnus-article-fill-long-lines)))<br>;;让gnus把这U邮件排版整齐后再显C给我们?/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>                          (vertical 1.0<br>                                    (summary .4 point)<br>                                    (article 1.0))))<br>;; 改变阅读新闻时窗口的布局Q窗口划分ؓ(f)??Q比例)</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(eval-after-load "mm-decode"<br>  '(progn<br>     (add-to-list 'mm-discouraged-alternatives "text/html")<br>     (add-to-list 'mm-discouraged-alternatives "text/richtext"))) <br>;另外Q有些用web方式发出的邮仉有htmlQ加入下面的讄Q只看其中的<br>;plain text部分Q?/p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq gnus-thread-sort-functions<br>      '(<br>        (not gnus-thread-sort-by-date)<br>        (not gnus-thread-sort-by-number)<br>        ))<br>;;排序</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)<br>;; 有时订阅了很多新ȝQ堆在一起不好管理。这个功能可以创建目录来分层理</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">(setq gnus-read-newsrc-file nil  gnus-save-newsrc-file nil)</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;========================   GNUS讄l束  ===============================</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"> </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命o(h)是调用make -kQ我把它Ҏ(gu)了make。你也可以把它改成其他的Q比如gcc之类?</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;把c语言风格讄为k&r风格<br>(add-hook 'c-mode-hook<br>'(lambda ()<br>(c-set-style "k&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>;;能把一个代码块~v来,需要的时候再展开<br>;;  M-x              hs-minor-mode<br>;;  C-c @ ESC C-s    show all<br>;;  C-c @ ESC C-h    hide all<br>;;  C-c @ C-s        show block<br>;;  C-c @ C-h        hide block<br>;;  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>  (interactive)<br>  (make-local-variable 'skeleton-pair-alist)<br>  (setq skeleton-pair-alist  '(<br>    (?` ?` _ "''")<br>    (?\( ?  _ " )")<br>    (?\[ ?  _ " ]")<br>    (?{ \n > _ \n ?} >)))<br>  (setq skeleton-pair t)<br>  (local-set-key (kbd "(") 'skeleton-pair-insert-maybe)<br>  (local-set-key (kbd "{") 'skeleton-pair-insert-maybe)<br>  (local-set-key (kbd "`") 'skeleton-pair-insert-maybe)<br>  (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׃(x)自动补全双的部?包括(), "", [] , {} , {等?/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>        (list<br>        (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-/ l定?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>      '(senator-try-expand-semantic  ;优先调用了senator的分析结?br>        try-expand-dabbrev     ;当前的buffer补全<br> try-expand-dabbrev-visible   ;别的可见的窗口里L补全<br> try-expand-dabbrev-all-buffers  ;所有打开的buffer<br> try-expand-dabbrev-from-kill<br> try-complete-file-name-partially<br> try-complete-file-name<br> try-expand-all-abbrevs<br> try-expand-list<br> try-expand-line<br> try-complete-lisp-symbol-partially<br> try-complete-lisp-symbol))<br>;讄 hippie-expand 的补全方式。它是一个优先列表, hippie-expand ?x)优先用表最前面的函数来补全?/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"> </p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new">;;========================== 方便~程操作讄l束====================================</p> <p style="FONT-SIZE: 8pt; FONT-FAMILY: courier new"><br> </p> <img src ="http://www.shnenglu.com/guangping/aggbug/11683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/guangping/" target="_blank">王光q?/a> 2006-08-25 09:35 <a href="http://www.shnenglu.com/guangping/archive/2006/08/25/11683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初步认识emacs的lisp~程http://www.shnenglu.com/guangping/archive/2006/07/19/10210.html王光q?/dc:creator>王光q?/author>Wed, 19 Jul 2006 03:04:00 GMThttp://www.shnenglu.com/guangping/archive/2006/07/19/10210.htmlhttp://www.shnenglu.com/guangping/comments/10210.htmlhttp://www.shnenglu.com/guangping/archive/2006/07/19/10210.html#Feedback0http://www.shnenglu.com/guangping/comments/commentRss/10210.htmlhttp://www.shnenglu.com/guangping/services/trackbacks/10210.htmlEmacs 3/eQ?.8.The Lisp ModesQ?1.Emacs Lisp Programming

Emacs有三ULisp模式Q其命o(h)名称如下Q?br />
emacs-lisp-mode 用于Emacs Lisp代码的编辑(文g?emacs或后~.elQ?/td>
lisp-mode 用来~辑另一个Lisppȝ的Lisp代码Q后~.l?lispQ?/td>
lisp-interaction-mode 用来~辑和运行Emacs Lisp代码Q交互模式)

本文只讨?lisp-interaction-mode模式?br />
~省情况?scratch*是处于q种模式Q无后缀的文件名一般也?x)让Emacsq入Lisp交互模式Q当然你可以使用变量auto-mode-alistq行讄?br />
? ?M-x lisp-interaction-mode EnterQ回车)可以让Q何bufferq入Lisp交互模式Q如要新Z个Lisp交互bufferQ只需键入C-x bQ即switch-to-buffer命o(h)Q,输入buffer名,然后令该bufferq入Lisp交互模式?br />
Lisp交互模式? Emacs Lisp模式完全一_(d)除一个重要特性外QC-j已绑定到eval-print-last-sexp命o(h)上。该命o(h)提取point之前的那个S- expressionQ对其进行评伎ͼ然后在buffer里打印结果。如果要使用其它模式里绑定到C-j的常见功能newline-and- indentQ你必须按下EnterQƈ紧跟Tab键?br />
C S-expression是Q何符合Lisp语法的表辑ּ。因此,可以使用 Lisp交互模式的C-j来检查变量的|认函数定义Q运行函数等{。比如,如果你输入auto-save-intervalq按下C-jQ就?x)显C 变量的|~省?00Q。如果你输入一个defunq在其最双的括号后按下C-jQEmacs?x)保存所定义的函敎ͼ供以后调用)q输出其名称Q这U情 况下QC-jcMC-M-xQ即eval-defun命o(h)Q,不过光标必须位于所定义的函C后(因ؓ(f)有可能在定义前或中间Q。如果你调用了一个函敎ͼ Emacs׃(x)评估Q运行)该表辑ּq显C函数的所有返回倹{?br />
Lisp交互模式的C-j提供了很的功能Q你可以用它来增量方式开发和调试Emacs Lisp代码Q因为Emacs Lisp是种“真正的”LispQ它甚至可用来开发其它Lisppȝ的代码片断?br />

基本Lisp实体

你需要熟(zhn)Lisp基本元素包括函数、变量和atomQ原子)。函数是Lisp的唯一E序单元Qprogram unitQ,늛了其它语a的过E、子E序、程序甚x作符{标记?br />
? 数被定义作上q实体的列表QlistQ,通常是对其它现存函数调用的列表。所有函数都有返回|return valueQ(cMPerl函数和non-void Java函数Q;函数的返回值就是list里最后一的|一般是最后调用的函数q回的倹{在其它函数里的函数调用{h(hun)于其它语a的语? QstatementQ,函数的语法如下:(x)

(function-name argument1 argument2 ...)

{h(hun)于Java的:(x)

method_name (argument1, argument2, ...);

q一语法用于所有函敎ͼ包括那些{h(hun)于其它语a的算术或比较q算W。例如,在Java或Perl??Q你?x)用表达?+4Q而在Lisp里你?x)用如下写法?x)

(+ 2 4)

cM的,4 >= 2的Lisp方式Q?br />
(>= 4 2)

Lisp中的变量和其它语a的相|不过没有cd。Lisp变量能够推测Mcd的|值本w没有类型,不过变量对其能存攄内容不加M限制Q?br />
原子QatomQ是个Q意类型的|包括整数、Q点(实)数、字W、字W串、布?yu)(dng)倹{符PsymbolQ和EmacsҎ(gu)cd如buffer、window和process。各Uatom的语法如下:(x)
  • 整数Q和你常用的一P有符P范围-2+27?+27 - 1Q?/li>
  • 点敎ͼ(x)可用十进制和U学计数法表C的实数。例?489可写?489?.489e3?46.9e1{;
  • 字符Q以问号开_(d)??a 。Esc、Newline和Tab可分别简写ؓ(f)\e、\n和\tQ其它控制字W可以加\C-前缀来表C,例如C-a表示?\C-a。整C可用来表C字W,如ASCII表等?/li>
  • 字符Ԍ(x)用双引号包围Q字W串里的引号标记和\需要加上\Q?Jane said, \"See Dick run.\""是个合法字符丌Ӏ字W串可以分割成多行,不需Ҏ(gu)语法。结束引号前的所有内容包括所有断行符都是字符串值的一部分?/li>
  • 布尔|(x)大部分情况下真gؓ(f)tQ假gؓ(f)nilQ如果能预估到布?yu)(dng)|则Q何非nil值都被看作真倹{nil也被用作null或nonvalue?/li>
  • W号QLisp实体名,如变量或函数名。有旉要引用实体的名字而非其|q时可以在名字前加上单引P'Q?br />
setq用来赋值给变量Q是个函敎ͼ而不象其它语a里用来赋值的专门语法=?=。setq接收两个参数Q一个变量名和一个倹{也可以q行多次赋|如:(x)
(setq thisvar thisvalue
thatvar thatvalue
theothervar theothervalue)
也可用其它方法设|值或变量Q不qsetq是用最q的Ҏ(gu)?br />

函数定义

首先熟?zhn)一下Lisp语法的特D表C? 用作“割断”字W用来分隔变量、函数等名称里的字(wordQ,q是Lisp~程惯用法,cMC和Ada里的“_”?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 />
1 (defun count-words-buffer ( )
2 (let ((count 0))
3 (save-excursion
4 (goto-char (point-min))
5 (while (< (point) (point-max))
6 (forward-word 1)
7 (setq count (1+ count)))
8 (message "buffer contains %d words." count))))
defunQ? 指定函数名和参数来定义函数。注意defun本n是一个函数――被调用Ӟ定义一个新函数。(defunq回把所定义的函CZ个symbolq回。) 函数的参数显CZؓ(f)在括号内的一个名字listQ本例,函数没有参数。如果在参数前加关键?amp;optionalpC参数是optionalQ可? 的)。如果参数是optional的,在函数调用时未指定该参数Q则认ؓ(f)其gؓ(f)nil?br />
(let ((var1 value1) (var2 value2) ... )
statement-block)
letQ?.定义Q或声明Q一个变量listQ?.变量讄初始|同setqQ?.创徏一个语句块Q类似函CQ,在此块内q些变量可用Qlet块即q些变量的scopeQ作用域Q。let里定义的变量可用setq改变其|不过要小心用setq?br />
save -excursionQEmacs内徏函数Q保存光标原来的位置Q因?count-words-buffer函数要移动光标以便计字敎ͼ。调? save-excursion是要求EmacsC实例函数开始执行时的光标位|,q在执行完函C内的所有语句后q回臛_始光标位|?br />
goto -charQEmacs内徏函数Q其参数是个Q内嵌)函数调用Q调用内建函数point-min。point是Emacs内部名称Q表C光标的当前位置? point-minq回当前buffer里第一个字W的位置|几乎L1Q这样goto-char调用时其参数gؓ(f)1Q效果等同于把pointU至 buffer起始处?br />
(while condition statement-block)

和let 及save-excursion一Pwhile也徏立了一个语句块。condition是个|atom、变量或q回一个值的函数Q。while对这? D行测试,如果其g是nilQ则认ؓ(f)条gQconditionQؓ(f)真,语句块得以执行,然后condition再次被测试,之后重复上述q程。当然也 可以写个无限循环Q如果你试图执行q样的语句,Emacs?x)挂P键入C-gl止?br />
在实例函CQcondition是函?< Q即带两个参数的于函数Q类似Java或Perl里的< Q和其它关系函数Q返回一个布?yu)(dng)|t ?nil?br />
? q@环的语句块由两条语句l成。第6行会(x)把point往前移动一个字QwordQ即相当于M-fQ。第7行,循环计数器加一Q函?1+ ?+ 1 variable-name)的简写方式。注意第三个xPW?行)和while前面的左括号匚w。这P在计字数时Qwhile循环?x)让Emacs 一ơ一个字QwordQ遍历整个当前buffer?br />
实例函数的最后一个语句用内建函数message在minibuffer里打C行信息,提示buffer所含的字数。message函数的格式类似C语言?br />
Message格式字符?/caption>
格式字符?/th> 含义
%s 字符串或symbol
%c 字符
%d 整数
%e U学计数法表C的点?/td>
%f 十进制表C的点?/td>
%g L格式的QҎ(gu)Q生最短的字符?/td>

Lisp函数变ؓ(f)Emacs命o(h)

? ? count-words-buffer已编写完成,接下来该如何q行Q在交互模式中,可以把光标移到函数的l束括号Q然后键入C-jQ或 LinefeedQ,让Emacs执行函数定义。你应该看到该函数的名字?x)再ơ出现在buffer里;defun函数的返回值就是已定义的符P卛_数名 Uͼ?br />
函数定义之后Q可以在Lisp交互H口中输入一?(count-words-buffer) Q然后在l束括号后再ơ按?C-j ?br />
? 果你象其它Emacs命o(h)一L(fng)M-x来执行上q函敎ͼM-x count-words-buffer EnterQ会(x)得到错误提示信息 [No match]。这是因Zq未在Emacs中“注册”该函数Q其可供交互(interactiveQ用。实现这一功能的函数是 interactive QŞ式如下:(x)

(interactive "prompt-string")

上述语句必须出现在函数开始处Q即紧随defun和文档说明字W串所在行之后。?interactive ?x)让Emacs把函数注册ؓ(f)一个命令,q提C用戯入defun语句中声明的参数。提C字W串为可选?br />
提示字符串有一个特D的格式Q你要ؓ(f)xC用戯入的每个参数都提供一D|C字W串Q这些段用“\n”分隔?br />
用于interactive函数的参C?/caption>
??br />提示用户输入
b
现存buffer的名U?/td>
e
事gQ鼠标动作或 function key pressQ?/td>
f
现存文g的名U?
n
数字Q整敎ͼ
s
字符?/td>
上述代码都有一个大写的变种
B 可能不存在的buffer名称
F 可能不存在的文g名称
N
数字Qunless command is invoked with a prefix argument, in which case use the prefix argument and skip this prompt
S W号

CZQ?br />
(defun replace-string (from to)
(interactive "sReplace string: \nsReplace string %s with: ")
...)
? ?count-words-buffer 命o(h)Q它不需参数Q因?interactive 命o(h)不需要提C字W串。另外可以再l我们的命o(h)d一个文档说明字W串Qdoc stringQ,它会(x)昄在describe-functionQC-h fQ之cȝ在线帮助工具中。Doc string是普通的Lisp字符Ԍ可选,行数长度LQ不q一般来_(d)W一行是个简要完整的句子Q说明命令的功能。注意字W串里的L双引号前必须? ?\ ?br />
(defun count-words-buffer ( )
"Count the number of words in the current buffer;
print a message in the minibuffer with the result."

(interactive)
(save-excursion
(let ((count 0))
(goto-char (point-min))
(while (< (point) (point-max))
(forward-word 1)
(setq count (1+ count)))
(message "buffer contains %d words." count))))


]]>
用wvdial和pppL上网http://www.shnenglu.com/guangping/archive/2006/07/12/9713.html王光q?/dc:creator>王光q?/author>Wed, 12 Jul 2006 00:51:00 GMThttp://www.shnenglu.com/guangping/archive/2006/07/12/9713.htmlhttp://www.shnenglu.com/guangping/comments/9713.htmlhttp://www.shnenglu.com/guangping/archive/2006/07/12/9713.html#Feedback0http://www.shnenglu.com/guangping/comments/commentRss/9713.htmlhttp://www.shnenglu.com/guangping/services/trackbacks/9713.html

wvdial是linux下的化拨号工?利用wvdial和ppp可以实现l(f)inux下的L上网。在整个q程中wvdial的作用是拨号q等待提C,q根据提C入相应的用户名和密码{认证信息;ppp的作用是与拨入方协商传输数据的方法ƈl持该连接?o:p>

一、wvdial及其相关配置

wvdial的功能很强大Q会(x)试探着ȝ如何拨号及d到服务器Q同时它q会(x)对常见的错误的进行处理,不象chat一?要求你去写登录脚本? wvdial只有一个配|文?/etc/wvdial.conf。wvdial的启动过E是q样的:(x)首先载入wvdial.conf配置文gQ然后再初始化modemq拨P拨号后等待拨入方的响应,收到拨入方响应后则启动pppd?o:p>

可以用wvdialconfE序自动生成wvdial.conf配置文gQ自行该E序的格式ؓ(f)Q?o:p>

wvdialconf /etc/wvdial.conf

在执行该E序的过E中Q程序会(x)自动你的modem的相关配|,包括可用的设备文件名Qmodem的L特率Q初始化字符{等相关的拨号信息,q根据这些信息自动生成wvdial.conf配置文g。如?etc/wvdial.conf文g已经存在Ӟ再次执行该命令只?x)改变其中? Modem、Band、Init{选项。一个典型的自动生成的配|文件可能是q样的:(x)

[Dialer Defaults]

Modem = /dev/ttyS1

Baud = 115200

Init1 = ATZ

Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 S11=55 +FCLASS=0

Q?span lang="EN-US">Phone =

Q?span lang="EN-US">Username =

Q?span lang="EN-US">Password =

wvdial 的执行格式ؓ(f) Q?span lang="EN-US">

wvdial --help | --version | section

相关的说明如?/span> Q?span lang="EN-US">

--helpQ?/span> 昄单的帮助信息

--version: wvdial 的版本号

section: q里?/span> section 有点?/span> windows 里的 ini 文g Q?/span> 一?/span> wvdial.conf 配置文g可以有好多个 sectionQ?/span> 每一?/span> section ׃些变量组?/span> Q?/span> 即由 变量 Q?/span> 值的语句l成 Q?/span> 如上所C。用wvdialconf自动生成配置文g时将?x)自动生成一些常用的变量说明如下Q?o:p>

Inherits=InheritedSection:

使用wvdialconf自动生成配置文g时将?x)自动生成[Dialer Defaults],除此之外Q你q可以自定义你自qsection。程序运行时Q首先蝲入[Dialer Defaults]Q然后再用指定的section的相应选项覆盖[Dialer Defaults]的相应选项。比如,我们?wvdial.conf中还有[Dialer Tom]Q假如我们运行wvdail TomQ则pȝ先d[Dialer Defaults]Q然后再用[Dialer Tom]覆盖[Dialer Defaults]的相应选项。如果除了以?的section之外q有[Dialer 169]q且内容如下Q?o:p>

[Dialer Tom]

Username=tom

Password=xxx

Inherits=169

[Dialer 169]

Phone=169

如果q时候我们执行wvdial Tom则系l将先读入[Dialer Defaults]Q然后再用[Dialer Tom]覆盖[Dialer Defaults]的相应选项Q最后再用[Dialer 169]的相应选项来覆盖前二者的相应选项。由此可见,利用wvdialQ我们可以很方便地在不同的ISP或modem之间来回UdQ假如你有几个ISP 或medom的话Q?o:p>

Medom=/dev/ttySxQ用于指定是用的medomQ缺省的?dev/medom。当Ӟ在这里我们的medom是由wvdialconf自动ƈ配置的,所以我们可以忽略该变量?o:p>

Band=57600Qwvdial与modem通信的L特率Q同上可以忽略?o:p>

Area Code=xxxx Q?讄区号

Dial Prefix=x: 假如你正在用分机,拨外UK?Ӟ可设该gؓ(f)9?o:p>

Username=xxxx:d时的用户?o:p>

Passwd=xxxxxx:d密码

PhoneQxxxxx: 所拨的L(fng)

PPPP Path=:讄pppd所在的路径Q缺省ؓ(f)/usr/sbin/pppd

Force Address=x.x.x.x :讄静态ip,一般的isp都会(x)Z分配动态的ip地址?o:p>

New PPPD= 1 or 0: pppd 2.3.0及其以上版本需?etc/ppp/peers/wvdial文gQ如果你的pppd?.3.0以上版本误?.

Auto Reconnect=on :断线时是否自动重新连接,~省设ؓ(f)是?o:p>

以上只是wvdial.conf中的常用选项Q具体情参考wvdial手册?o:p>

二、pppd及其相关配置

pppd的配|选项相对要复杂得多,你可以用命o(h)行的形式引用有关的选项Q也可以把要引用的选项写到/etc/ppp/options中进行引用?o:p>

下面的示例文件包含了最常用的选项及其相关的说明:(x)

# /etc/ppp/options

# L名称

mng.null.edu.cn

# 如果没有l定本地ip, pppd 用主机的W一个ip地址Q?o:p>

# 如果指定?noipdefault" 选项, pppd用拨入方提供的ip地址

noipdefault

# 选定该选项, pppd 接受拨入方提供的ip地址

ipcp-accept-local

# 选定该选项, pppd 接受拨入方自己的ip地址

ipcp-accept-remote

# 讄~省|关

defaultroute

# 在传输数据包之前Q让拨入方先自我认证Q注意一般的ISPQ如169?63)都不包含该机 # Ӟ故应选中noauth

noauth

# 使用g控?/span>

crtscts

#拨号信息作日志

debug

以上只是options中的常用选项Q具体情参考pppd手册?o:p>

三、一个实?o:p>

下面让我们来看一个具体的应用Q在该应用中我们实现了拨号和断开q接的自动化。涉及到的配|文件有Q?o:p>

/etc/wvdial.conf Qwvdial的配|文?o:p>

/etc/ppp/option : pppd 的配|文?/span>

/etc/ppp/ppp-on Q?/span> 拨号自动化脚?/span>

/etc/ppp/ppp-of : 断开q接自动化脚?/span>

步骤一 Q?/span> modem 已经正确q接 Q?span lang="EN-US">linux 已检ƈ自动配置了该 modem

步骤?/span> Q?/span> q行 wvdialconfQ?/span> 生成 /etc/wvdial.conf 文gq修改如?/span> Q?span lang="EN-US">

[Dialer Defaults]

Modem = /dev/ttyS1

Baud = 115200

Init1 = ATZ

Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 S11=55 +FCLASS=0

New PPPD= 1

[Dialer Tom]

Phone =

169

Username =

tom

Password = *******

步骤?/span> Q?/span> ~辑q|?/span> /etc/ppp/options, 如下所C?/span> Q?span lang="EN-US">

noipdefault

ipcp-accept-local

ipcp-accept-remote

defaultroute

noauth

crtscts

debug

步骤?/span> Q?/span> ~写自动化脚?/span>

1. 拨号脚本 /etc/ppp/ppp-on:

#!/bin/sh

# This script initiates the ppp connections by wvdial

wvdial tom &

2. 断开q接自动化脚?/span> /etc/ppp/ppp-off:

#!/bin/sh

#!stop wvdial

killall wvdial

# If the ppp0 pid file is present then the program is running. Stop it

if [ -r /var/run/ppp0.pid ]; then

kill -INT `cat /var/run/ppp0.pid`

echo "PPP link to ppp0 terminated."

else

echo "ERROR: PPP link is not active on ppp0"

exit 0

fi

exit 1

~辑完后 Q?/span> 执行 chmod u+x /etc/ppp/ppp* 改变文g权限。到此大功告?/span> Q?/span> 以后只要q行 /etc/ppp/ppp-on 便自动拨?/span> Q?/span> 执行 /etc/ppp/ppp-of 便自动断开q接?/span>



]]>
mount 常见使用Ҏ(gu)http://www.shnenglu.com/guangping/archive/2006/07/12/9712.html王光q?/dc:creator>王光q?/author>Wed, 12 Jul 2006 00:43:00 GMThttp://www.shnenglu.com/guangping/archive/2006/07/12/9712.htmlhttp://www.shnenglu.com/guangping/comments/9712.htmlhttp://www.shnenglu.com/guangping/archive/2006/07/12/9712.html#Feedback0http://www.shnenglu.com/guangping/comments/commentRss/9712.htmlhttp://www.shnenglu.com/guangping/services/trackbacks/9712.html

mount 命o(h)Q?格式Q?span lang="X-NONE">mount [-参数] [讑֤名称] [挂蝲?span lang="X-NONE">]

常用的参敎ͼ(x)

-t<</span> 文gpȝcd> 指定讑֤的文件系l类型,常见的有Q?span lang="X-NONE">

minix linux 最早用的文gpȝ

ext2 linux 目前常用的文件系l?span lang="X-NONE">

MS-DOS ?span lang="X-NONE">fatQ就?span lang="X-NONE">fat16 vfat

windows98 常用?span lang="X-NONE">fat32

nfs |络文gpȝ

iso9660 CD-ROM 光盘标准文gpȝ

ntfs windows NT 2000 的文件系l?span lang="X-NONE">

hpfs OS/2 文gpȝ

auto 自动文件系l?span lang="X-NONE">

-o<</span> 选项> 指定挂蝲文gpȝ时的选项。有些也可用?span lang="X-NONE">/etc/fstab中。常用的有:(x)

codepage=XXX 代码?span lang="X-NONE">

iocharset=XXX 字符?span lang="X-NONE">

ro 以只L式挂?span lang="X-NONE">

rw 以读写方式挂?span lang="X-NONE">

nouser 使一般用h法挂?span lang="X-NONE">

user 可以让一般用h载设?span lang="X-NONE">

-o 参数里的codepage iocharset选项?span lang="X-NONE">codepage指定文gpȝ的代码页Q简体中文中文代码是936Q?span lang="X-NONE">iocharset指定字符集,体中文一般用cp936?span lang="X-NONE"> gb2312?Q我?span lang="X-NONE">codepage?span lang="X-NONE">iocharset不是特别了解,试了UFT-8没有成功Q?span lang="X-NONE">

mount 举例Q?span lang="X-NONE">

1. 加挂 fat 文gpȝ  

mount -t vfat -o codepage=936,iocharset=cp936 /dev/hda5 /mnt/d

cp936 是指体中文,cp950是指J体中文?span lang="X-NONE">

2. 加挂NTFS文gpȝ 可以通过~译内核Q我没用q?也可通过?span lang="X-NONE"> http://linux-ntfs.sourceforge.net/ 下蝲NTFS补丁? 以下{载别人,忘记出处Q?span lang="X-NONE">

3. 加挂usb 优盘

Linux ?span lang="X-NONE">USB讑֤有很好的支持Q在你插?span lang="X-NONE">U盘后Q?span lang="X-NONE">U盘被识别Z?span lang="X-NONE">SCSI盘,通常(zhn)用以下命o(h)p加挂U盘上的文件系l?Q?span lang="X-NONE">

mount /dev/sda1 /usb

同样对于中文的文件名和目录名?x)出Cؕ码的问题可以指定字符集,命o(h)cM于上面对FAT32介绍的:(x)

mount /dev/sda1 /usb -o pagecode=936,iocharset=cp936

4. 加挂Linuxpȝ通过samba׃n出来的目?span lang="X-NONE">

  利用samba׃n出来的目录其实很难说其原来是哪种文gpȝQ不q这一点不重要Q只要它对用h透明的就好啦。加挂时Q我们指定类型ؓ(f)smbfsQ在加挂samba׃n的分区时Q也?x)出C文的文g名和目录名ؕ码情况,可以用以下命令加挂:(x)

 mount -t smbfs -o username=terry,password=terry,codepage=936,iocharset=cp936   //terry-linux/terry /mp3/

   mount -t smbfs -o   username=terry,password=terry,codepage=936,iocharset=cp936   //192.168.100.228/terry /mp3/

  注意Q你可以不直接写password=terryq个参数Q系l界时会(x)要你输入密码Q这样就可以防止有h直接看到你的密码。视具体情况而定Q?span lang="X-NONE">-o后面的参数可以对应增减?span lang="X-NONE">

5. 加挂Windowpȝ׃n出来的目?span lang="X-NONE">

  在局域网中,常常需要去讉K其它Windowspȝ׃n出来的目录,?span lang="X-NONE">Linux下,安装?span lang="X-NONE">samba后就可以使用samba中带的命令来讉KWindows机器的共享资源?span lang="X-NONE">

  ?span lang="X-NONE">smbclient来列?span lang="X-NONE">Windows机器的共享资源:(x)

  smbclient -L 192.168.100.111

  Ҏ(gu)上面所列出Windows的共享资源后Q可以选择需要加挂到本地Linux中去?span lang="X-NONE">Windows的共享资源,然后使用smbmount?span lang="X-NONE">mount来加挂,请参照下面几条命令:(x)   

smbmount //192.168.100.111/public /public/

  mount //192.168.100.111/d /mnt/cdrom -o username=terry (q样要在命o(h)行输入密码的)

  mount //192.168.100.111/d /mnt/cdrom -o username=terry34 (q样则不必在命o(h)行输入密?span lang="X-NONE">)

  注:(x)除了上面介绍的命令行Ҏ(gu)之外Q这时最好的Ҏ(gu)是使用其它的客L(fng)Q如LinNeighborhood?span lang="X-NONE">networkneighbours?span lang="X-NONE">ksmbshare{,请参考其它文章?span lang="X-NONE">

mount 自动挂在文gpȝQ?通常?span lang="X-NONE">2U方法:(x)

  Ҏ(gu)1. 把加挂的命o(h)攑֜/etc/rc.d/rc.local中?span lang="X-NONE">

  Ҏ(gu)2. 修改分区配置文g/etc/fstabQ在启动时加挂文件系l?/span>

]]>
tar命o(h)的?/title><link>http://www.shnenglu.com/guangping/archive/2006/05/23/7534.html</link><dc:creator>王光q?/dc:creator><author>王光q?/author><pubDate>Tue, 23 May 2006 07:24:00 GMT</pubDate><guid>http://www.shnenglu.com/guangping/archive/2006/05/23/7534.html</guid><wfw:comment>http://www.shnenglu.com/guangping/comments/7534.html</wfw:comment><comments>http://www.shnenglu.com/guangping/archive/2006/05/23/7534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/guangping/comments/commentRss/7534.html</wfw:commentRss><trackback:ping>http://www.shnenglu.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>对许多用h_(d)?span lang="X-NONE">DOS</span>?span lang="X-NONE">Windows</span>环境下利用工兯Y?span lang="X-NONE">WinZip</span>?span lang="X-NONE">ARJ</span>{压~或解压文g是比较容易的事。但是,?span lang="X-NONE">Linux</span>中如何对文gq行压羃与解压呢Q?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>的简Uͼ它出现在q没有Y盘驱动器、硬盘和光盘驱动器的计算机早期阶Dc那时Y件的发行和备份都需要大L(fng)带Q计机上运行的头几个程序中得有一个是带的阅ȝ序。随着旉的推U,<span lang="X-NONE"> tar</span>命o(h)逐渐变ؓ(f)一个将很多文gq行存档的工P目前许多用于<span lang="X-NONE">Linux</span>操作pȝ的程序就是打包ؓ(f)<span lang="X-NONE">tar</span>档案文g的Ş式?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: 宋体;">命o(h)的格式是</span> <span style="font-family: 宋体;">Q?/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: 宋体;">命o(h)有很多参敎ͼ利用<span lang="X-NONE">f</span>选项、设备或文g的名字可以指C?span lang="X-NONE">tar</span>命o(h)档案置于特定的讑֤或文件中。当?span lang="X-NONE">tar</span>的档案创Z个文件时<span lang="X-NONE">,</span>q个文g名的扩展通常是如果指定了一个目录名<span lang="X-NONE">,</span>那么它所有的子目录都?x)被包含在档案之中?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>命o(h)?span lang="X-NONE">f</span>选项的格式如下所C:(x)<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: 宋体;">要创Z个档案应使用<span lang="X-NONE">c</span>选项Q与<span lang="X-NONE">f</span>选项一P<span lang="X-NONE">c</span>选项?x)在讑֤或文件中创徏档案Q应?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>更新档案中的文g?span lang="X-NONE">tar</span>比较每一个档案文件与相应用户目录中文件最q一ơ修改的旉<span lang="X-NONE">,</span>然后上一ơ存档之后又被修改过的文件拷贝到档案文g中去。在用户目录中新创徏的文件也?x)被d到档案文件中。在下面的例子中<span lang="X-NONE">,</span>用户?span lang="X-NONE">mydir</span>目录中最q被修改或添加的文g来对<span lang="X-NONE">myarch.tar</span>文gq行更新?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: 宋体;">如果x看在一个档案中存储着哪些文gQ可以?span lang="X-NONE">tar</span>命o(h)?span lang="X-NONE">t</span>选项。下面命令列出所有存储在<span lang="X-NONE">myarch.tar</span>档案中的文gQ?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: 宋体;">要将文g备䆾C个特定的讑֤Q只L讑֤名作为档案。在下面的例子中Q用户在<span lang="X-NONE">/dev/fdo</span>讑֤的Y盘中创徏了一个档?span lang="X-NONE">,</span>q将<span lang="X-NONE">mydir</span>目录中所有的文g都拷贝到档案中?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: 宋体;">如果所备䆾的文件大超q设备可用的存储?span lang="X-NONE">,</span>比如软盘<span lang="X-NONE">,</span>此时可以创Z个用多个标L(fng)<span lang="X-NONE">tar</span>档案。当使用<span lang="X-NONE">m</span>选项向一个Yp行存档时<span lang="X-NONE">,tar</span>命o(h)在一张Y盘已满的时候会(x)提醒再放入一张新的Y盘?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>只要第一张Y盘放入Y?span lang="X-NONE">,</span>然后输入?span lang="X-NONE">x</span>?span lang="X-NONE">m</span>选项?span lang="X-NONE">tar</span>命o(h)。必要时?x)被提醒攑օ另外一张Y盘?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: 宋体;">操作不会(x)Ҏ(gu)案文件实行压~操作。如果想压羃档案文g<span lang="X-NONE">,</span>可以指示<span lang="X-NONE">tar</span>Ȁz?span lang="X-NONE">gzip</span>实用工具<span lang="X-NONE">,</span>在存档之前对文gq行压羃。利?span lang="X-NONE">z</span>选项<span lang="X-NONE">,tar</span>在对文g存档之前首先要?span lang="X-NONE">gzip</span>来压~文件。当恢复文g?span lang="X-NONE">,</span>同样?span lang="X-NONE">Z</span>选项激z?span lang="X-NONE">gzip</span>Ҏ(gu)件解压?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: 宋体;">值得注意的是Q压~档案中的单个文件和整体压羃档案是不同的。通常档案文g是ؓ(f)了便于传输而把几个文gl合成ؓ(f)一?span lang="X-NONE">tar</span>文g。ؓ(f)了羃短传输时?span lang="X-NONE">,</span>档案应当小好Q可以将其压~然后传送压~后的版本。接收者可以对之解压羃Q然后恢?span lang="X-NONE">tar</span>文g。在<span lang="X-NONE">tar</span>文g上?span lang="X-NONE">gzip</span>会(x)产生?span lang="X-NONE">.tar.gz</span>扩展名的文g。扩展名<span lang="X-NONE">.gz</span>被加到被压羃?span lang="X-NONE">gzip</span>文g名之后?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: 宋体;">下面的例子创Z<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: 宋体;">命o(h)虽然有非常多的参敎ͼ但是使用hq不困难Q可以快速而又单地ZQ何需要的子目录生成档案文件?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: 宋体;">首先Q我们来建立一个有三个文g的子目录Q再建立一个有另外三个文g的子目录Q如下所C:(x)<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: 宋体;">现在已经有了一个子目录和其中的文gQ用这个命令的<span lang="X-NONE">c(</span>生成<span lang="X-NONE">)</span>?span lang="X-NONE">f(</span>文g<span lang="X-NONE">)</span>参数来生成一?span lang="X-NONE">tar</span>档案文gQ?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: 宋体;">h意,原来的子目录q没有发生变化。在~省的情况下Q?span lang="X-NONE">tar</span>命o(h)不会(x)删除原来的子目录和文件。如果想看看命o(h)执行的过E,可以使用<span lang="X-NONE">v</span>参数Q如下所C:(x)<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: 宋体;">命o(h)在进行操作的时候,׃(x)把正在添加到档案文g中去的子目录和文件的文g名显C出来。?span lang="X-NONE">w</span>参数Q即交互参数Q这?span lang="X-NONE">tar</span>命o(h)在执行的q程当中?x)询问是否想加入每个文g。当x选择地备份内容不多的子目录的时候,</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>常见使用Ҏ(gu)</span> <span style="font-family: 宋体;">q样非常地方便Q如下所C:(x)<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>命o(h)?span lang="X-NONE">t</span>参数列出档案文g中的内容Q?span lang="X-NONE">f</span>参数定义操作所使用?span lang="X-NONE">tar</span>档案文gQ如下所C:(x)<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: 宋体;">需要注意的是,如果参数的顺序放错了Q?span lang="X-NONE">tar</span>命o(h)?x)显C出错信息ƈ退出?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: 宋体;">下面来看看如何来释放整个的档案文g或者其中的某一个文件。如果想释放其中所有的文gQ可以同时?span lang="X-NONE">-x</span>释放参数?span lang="X-NONE">-f</span>。ؓ(f)了了解命令执行的q程Q还可以加上<span lang="X-NONE">-v</span>参数Q?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: 宋体;">如果只是想从档案文g中释攑և个文件的话,可以再次使用<span lang="X-NONE">w</span>参数Q?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: 宋体;">上例表明查看了档案文Ӟq交互地释放了文件。如果只想从档案文g中释放某一个文Ӟ可以在命令行中指定这个文件。作为示例,我先删除了原始的<span lang="X-NONE">mydir</span>子目录,然后使用一个空的子目录q行如下操作Q?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: 宋体;">注意Q正如所看到的只有一个文件被释放出来。虽?span lang="X-NONE">tar</span>命o(h)不会(x)覆盖整个的子目录Q但是它?x)覆盖掉那些有着相同文g名的文g?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>压羃文g<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: 宋体;">命o(h)是用来压~文件的。它不仅可以用来压羃大的、较?yu)用的文g以节省磁盘空_(d)q可以和<span lang="X-NONE">tar</span>命o(h)一h?span lang="X-NONE">Linux</span>操作pȝ中比较流行的压羃文g格式。据l计Q?span lang="X-NONE">gzip</span>命o(h)Ҏ(gu)本文件有<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: 宋体;">命o(h)的格式是Q?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: 宋体;">很容易用。如果想压羃某个文g或者磁带档案文Ӟ可输入下面的内容Q?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: 宋体;">在缺省的状态下Q?span lang="X-NONE">gzip</span>?x)压~文件、再加上一?span lang="X-NONE">.gz</span>扩展名,然后删除掉原来的文g。如果想解压~文Ӟ可以使用<span lang="X-NONE">gzip</span>的对应程序命?span lang="X-NONE">gunzip</span>或?span lang="X-NONE">gzip</span>命o(h)?span lang="X-NONE">-d</span>解压~参数。但是必M证这个用于解压羃的文件有<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>命o(h)?span lang="X-NONE">gunzip</span>命o(h)都会(x)昄出错信息。如果想使用自己的扩展名Q可以?span lang="X-NONE">-S</span>后缀参数Q如下所C:(x)<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: 宋体;">q可以处理用<span lang="X-NONE">zip</span>命o(h)?span lang="X-NONE">compress</span>命o(h)?span lang="X-NONE">pack</span>命o(h)压羃的文件包。如果想在压~或者解压羃的过E中看到更多的信息,可以使用<span lang="X-NONE">-l</span>列清单参数看到文件在被压~或解压~的时候的文g长度。在前一个例子中Q压~完子目?span lang="X-NONE">mydir</span>之后Q可以?span lang="X-NONE">gzip</span>命o(h)按照下面的方法得到有关的数据Q?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: 宋体;">此外Q?span lang="X-NONE">gzip</span>q有一个很有用的参?span lang="X-NONE">-t</span>Q可以用来测试压~文件的完整性。如果文件正常,<span lang="X-NONE">gzip</span>不会(x)l出M昄。如果想看到<span lang="X-NONE">OK</span>q两个字母,可以在测试某个文件时使用<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>压羃文g<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: 宋体;">命o(h)像它的文g名那h用来压羃文g的。这?span lang="X-NONE">Unix</span>中出现得比较早的一个压~程?span lang="X-NONE">,</span>它通过使用自适应?span lang="X-NONE">Lemple-Ziv</span>~码来羃?yu)所指文件的大小。每一个文件将被一个带?span lang="X-NONE">.Z</span>扩展名的压羃文g所代替Q但文g的属dpR访问时间和修改旉保持不变。如果没有指Ҏ(gu)Ӟ则接受标准输入的文gq行压羃q到标准输出?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: 宋体;">命o(h)格式?/span> <span style="font-family: 宋体;">Q?/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>对应的有一个解压羃命o(h)<span lang="X-NONE">uncompress</span>Q其格式如下Q?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>”的压羃文g恢复?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>命o(h)的选项如下Q?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>写到标准输出Q不改变文g?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>强制压羃Q即使文件ƈ不真正减或<span lang="X-NONE">.Z</span>文g已经存在Q也q行压羃?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>昄每一个被压羃文g的羃?yu)的癑ֈ比?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>命o(h)的用法:(x)<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>Q要解压~输入:(x)<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: 宋体;">注意Q像使用<span lang="X-NONE">gzip</span>命o(h)一P使用<span lang="X-NONE">uncompress</span>命o(h)时必ȝZ个带?span lang="X-NONE">.Z</span>扩展名的文g名,否则<span lang="X-NONE">uncompress</span>命o(h)昄出错信息?span lang="X-NONE"><br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--></span></span> <file> </file> <img src ="http://www.shnenglu.com/guangping/aggbug/7534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/guangping/" target="_blank">王光q?/a> 2006-05-23 15:24 <a href="http://www.shnenglu.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下的安装http://www.shnenglu.com/guangping/archive/2006/05/18/7337.html王光q?/dc:creator>王光q?/author>Thu, 18 May 2006 01:14:00 GMThttp://www.shnenglu.com/guangping/archive/2006/05/18/7337.htmlhttp://www.shnenglu.com/guangping/comments/7337.htmlhttp://www.shnenglu.com/guangping/archive/2006/05/18/7337.html#Feedback0http://www.shnenglu.com/guangping/comments/commentRss/7337.htmlhttp://www.shnenglu.com/guangping/services/trackbacks/7337.html 1? apt-get install kernel-headers-$(uname -r) 当然要事先设好源?
2? ln -s /usr/src/kernel-headers-$(uname -r) /lib/modules/$(uname -r)/build
3? sh NVIDIA-Linux-x86-1.0-8756-pkg1.run q里下蝲的驱动程?
4? dpkg-reconfigure xserver-xfree86 --priority=medium q一步,反正我是没作Q但别h作了Q可能情况不相同,CQ备不时之需?
5、重启机器,OK.

]]>
忍不住了Q发发linux的牢骚!http://www.shnenglu.com/guangping/archive/2006/05/12/7024.html王光q?/dc:creator>王光q?/author>Fri, 12 May 2006 07:36:00 GMThttp://www.shnenglu.com/guangping/archive/2006/05/12/7024.htmlhttp://www.shnenglu.com/guangping/comments/7024.htmlhttp://www.shnenglu.com/guangping/archive/2006/05/12/7024.html#Feedback13http://www.shnenglu.com/guangping/comments/commentRss/7024.htmlhttp://www.shnenglu.com/guangping/services/trackbacks/7024.html

]]>
þ޹ӰԺ| þþþþþƷѿSSS | Ʒþþþþþþ| ҹAVëƬþ| þֻоƷ߹ۿ| ɫۺϾþۺۺ| þþþAVƬ | þùһ| þ¶Ʒ| þþþƷһ| ˾þۺ| þþƷAV㽶| þþƷݲݲ| ҹ޾þþþþþþ| þþƷƷëƬ| þþƷһ| ޹˾ƷŮ˾þþ | ҹƷþþþþþ| ƷŮþþþ| þþþĸ| һձȾþۺ| þݺҹҹ2020츾| ˳˳ۺþþ| þ99Ʒþ99| ޹뾫ƷŮ˾þþò| þþþþþ| þùƷ| þҹ³˿Ƭϼ| ޹Ʒþ66| AëƬþþþƷëƬ| ޹Ʒþþþ| ޹Ʒһþ | ˾þô߽| 99þþƷþþþþ崿| Ʒþþþþþþ| Ʒþþþþþö| AVպAVþ| ҹƷþþĸ| þþþþһ| þۺɫHEZYO | Ʒþøһ|