??xml version="1.0" encoding="utf-8" standalone="yes"?> 串口操作需要的头文?
?Linux 下串口文件是位于 /dev 下的
串口一 ?/dev/ttyS0
串口??/dev/ttyS1
打开串口是通过使用标准的文件打开函数操作Q?
最基本的设|串口包括L特率讄Q效验位和停止位讄?/p> 串口的设|主要是讄 struct termios l构体的各成员倹{?
讄q个l构体很复杂Q我q里只说说常见的一些设|:(x)
波特率设|?/p> 下面是修Ҏ(gu)L特率的代码:(x) 需要注意的? 如果不是开发终端之cȝQ只是串口传输数据,而不需要串口来处理Q那么用原始模?Raw Mode)方式来通讯Q设|方式如下:(x)
讄好串口之后,d串口很Ҏ(gu)了,把串口当作文件读写就是?
使用文g操作read函数dQ如果设|ؓ(f)原始模式(Raw Mode)传输数据Q那么read函数q回的字W数是实际串口收到的字符数?
可以使用操作文g的函数来实现异步dQ如fcntlQ或者select{来操作?
关闭串口是关闭文g?
Linux 下串口编E入?/h1>
计算Z口的引脚定义
串口操作
序号
信号名称
W号
向
功能
2
发送数?/td>
TXD
DTE→DCE
DTE发送串行数?/td>
3
接收数据
RXD
DTE←DCE
DTE 接收串行数据
4
h发?/td>
RTS
DTE→DCE
DTE h DCE 线路切换到发送方?/td>
5
允许发?/td>
CTS
DTE←DCE
DCE 告诉 DTE U\已接通可以发送数?/td>
6
数据讑֤准备?/td>
DSR
DTE←DCE
DCE 准备?/td>
7
信号?/td>
信号公共?/td>
8
载L?/td>
DCD
DTE←DCE
表示 DCE 接收到远E蝲?/td>
20
数据l端准备?/td>
DTR
DTE→DCE
DTE 准备?/td>
22
振铃指示
RI
DTE←DCE
表示 DCE 与线路接通,出现振铃
#include
#include
#include
#include
#include
#include
#include
#include
fd = open( "/dev/ttyS0", O_RDWR);//| O_NOCTTY | O_NDELAY
if (-1 == fd)
{
/* 不能打开串口一*/
perror(" 提示错误Q?);
}struct termio
{ unsigned short c_iflag; /* 输入模式标志 */
unsigned short c_oflag; /* 输出模式标志 */
unsigned short c_cflag; /* 控制模式标志*/
unsigned short c_lflag; /* local mode flags */
unsigned char c_line; /* line discipline */
unsigned char c_cc[NCC]; /* control characters */
};struct termios Opt;
tcgetattr(fd, &Opt);
cfsetispeed(&Opt,B19200); /*讄?9200Bps*/
cfsetospeed(&Opt,B19200);
tcsetattr(fd,TCANOW,&Opt);
讄波特率的例子函数Q?br />/**
*@brief 讄串口通信速率
*@param fd cd int 打开串口的文件句?br />*@param speed cd int 串口速度
*@return void
*/
int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,
B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400,
19200, 9600, 4800, 2400, 1200, 300, };
void set_speed(int fd, int speed){
int i;
int status;
struct termios Opt;
tcgetattr(fd, &Opt);
for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) {
if (speed == name_arr[i]) {
tcflush(fd, TCIOFLUSH);
cfsetispeed(&Opt, speed_arr[i]);
cfsetospeed(&Opt, speed_arr[i]);
status = tcsetattr(fd1, TCSANOW, &Opt);
if (status != 0) {
perror("tcsetattr fd1");
return;
}
tcflush(fd,TCIOFLUSH);
}
}
}
效验位和停止位的讄Q?br />无效?/td> 8?/td>
Option.c_cflag &= ~PARENB;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= ~CSIZE;
Option.c_cflag |= ~CS8;
奇效?Odd) 7?/td>
Option.c_cflag |= ~PARENB;
Option.c_cflag &= ~PARODD;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= ~CSIZE;
Option.c_cflag |= ~CS7;
偶效?Even) 7?/td>
Option.c_cflag &= ~PARENB;
Option.c_cflag |= ~PARODD;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= ~CSIZE;
Option.c_cflag |= ~CS7;
Space效验 7?/td>
Option.c_cflag &= ~PARENB;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= &~CSIZE;
Option.c_cflag |= CS8;
讄效验的函敎ͼ(x)
/**
*@brief 讄串口数据位,停止位和效验?br />*@param fd cd int 打开的串口文件句?br />*@param databits cd int 数据? 取??7 或?
*@param stopbits cd int 停止? 取gؓ(f) 1 或?
*@param parity cd int 效验cd 取gؓ(f)N,E,O,,S
*/
int set_Parity(int fd,int databits,int stopbits,int parity)
{
struct termios options;
if ( tcgetattr( fd,&options) != 0) {
perror("SetupSerial 1");
return(FALSE);
}
options.c_cflag &= ~CSIZE;
switch (databits) /*讄数据位数*/
{
case 7:
options.c_cflag |= CS7;
break;
case 8:
options.c_cflag |= CS8;
break;
default:
fprintf(stderr,"Unsupported data size\n"); return (FALSE);
}
switch (parity)
{
case 'n':
case 'N':
options.c_cflag &= ~PARENB; /* Clear parity enable */
options.c_iflag &= ~INPCK; /* Enable parity checking */
break;
case 'o':
case 'O':
options.c_cflag |= (PARODD | PARENB); /* 讄为奇效验*/
options.c_iflag |= INPCK; /* Disnable parity checking */
break;
case 'e':
case 'E':
options.c_cflag |= PARENB; /* Enable parity */
options.c_cflag &= ~PARODD; /* 转换为偶效验*/
options.c_iflag |= INPCK; /* Disnable parity checking */
break;
case 'S':
case 's': /*as no parity*/
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;break;
default:
fprintf(stderr,"Unsupported parity\n");
return (FALSE);
}
/* 讄停止?/
switch (stopbits)
{
case 1:
options.c_cflag &= ~CSTOPB;
break;
case 2:
options.c_cflag |= CSTOPB;
break;
default:
fprintf(stderr,"Unsupported stop bits\n");
return (FALSE);
}
/* Set input parity option */
if (parity != 'n')
options.c_iflag |= INPCK;
tcflush(fd,TCIFLUSH);
options.c_cc[VTIME] = 150; /* 讄时15 seconds*/
options.c_cc[VMIN] = 0; /* Update the options and do it NOW */
if (tcsetattr(fd,TCSANOW,&options) != 0)
{
perror("SetupSerial 3");
return (FALSE);
}
return (TRUE);
}options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/
options.c_oflag &= ~OPOST; /*Output*/char buffer[1024];int Length;int nByte;nByte = write(fd, buffer ,Length)
d串口数据
char buff[1024];int Len;int readByte = read(fd,buff,Len);
close(fd);
]]>
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落结?
光标控制命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>
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>
+ ?/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<< ?/span> n 行都向左Ud一个宽?/span>
n>> ?/span> n 行都向右Ud一个宽度,例如 3>> 将接下来的三行每行都向右移动一个移动宽?/span>
完成用户理的工作有许多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
;============================ MS Windows环境下字体设|?===========================
(setq default-frame-alist
(append
'((font . "fontset-chinese")) default-frame-alist))
(create-fontset-from-fontset-spec
"-outline-Courier New-normal-r-normal-normal-13-97-96-96-c-*-fontset-chinese")
(set-fontset-font
"fontset-default" nil
"-outline-新宋?normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)
(set-fontset-font
"fontset-chinese" 'kana
"-outline-新宋?normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)
(set-fontset-font
"fontset-chinese" 'han
"-outline-新宋?normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)
(set-fontset-font
"fontset-chinese" 'cjk-misc
"-outline-新宋?normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)
(set-fontset-font
"fontset-chinese" 'symbol
"-outline-新宋?normal-r-normal-normal-14-*-96-96-c-*-iso10646-1" nil 'prepend)
(set-default-font "fontset-chinese")
;===========================MS Windows环境下字体设|结?=========================
;============================ Linux环境下字体设|?=================================
;; (create-fontset-from-fontset-spec
;; "-*-courier-medium-r-normal-*-14-*-*-*-*-*-fontset-courier")
;; (set-default-font "fontset-courier")
;; (setq default-frame-alist
;; (append
;; '((font . "fontset-courier")) default-frame-alist))
;; (set-fontset-font
;; "fontset-default" nil
;; "-*-simsun-*-*-*-*-14-*-*-*-*-*-gb2312.1980-*" nil 'prepend)
;; (set-fontset-font
;; "fontset-courier" 'kana
;; "-*-simsun-*-*-*-*-14-*-*-*-*-*-gbk-0" nil 'prepend)
;; (set-fontset-font
;; "fontset-courier" 'han
;; "-*-simsun-*-*-*-*-14-*-*-*-*-*-gbk-0" nil 'prepend)
;; (set-fontset-font
;; "fontset-courier" 'cjk-misc
;; "-*-simsun-*-*-*-*-14-*-*-*-*-*-gbk-0" nil 'prepend)
;============================ Linux环境下字体设|结?==============================
;;;;;;;;;;;;;;;;;;;;语言环境字体讄l束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;解决中英文排不能正fill的问?好像没什么用
;; (put-charset-property 'chinese-cns11643-5 'nospace-between-words t)
;; (put-charset-property 'chinese-cns11643-6 'nospace-between-words t)
;; (put-charset-property 'chinese-cns11643-7 'nospace-between-words t)
;;;;;;;;;;;;;;;;;;;;;;;;;;; 讄H口界面 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(set-foreground-color "grey")
(set-background-color "black")
(set-cursor-color "gold1")
(set-mouse-color "gold1")
(set-scroll-bar-mode nil)
;;取消滚动?/p>
;;(customize-set-variable 'scroll-bar-mode 'right))
;;讄滚动栏在H口右侧Q而默认是在左?/p>
(tool-bar-mode nil)
;;取消工具?/p>
(setq default-frame-alist
'((vertical-scroll-bars)
(top . 25)
(left . 45)
(width . 110)
(height . 40)
(background-color . "black")
(foreground-color . "grey")
(cursor-color . "gold1")
(mouse-color . "gold1")
(tool-bar-lines . 0)
(menu-bar-lines . 1)
(right-fringe)
(left-fringe)))
;; 讄另外一些颜Ԍ(x)语法高亮昄的背景和主题Q区域选择的背景和主题Q二ơ选择的背景和选择
(set-face-foreground 'highlight "white")
(set-face-background 'highlight "blue")
(set-face-foreground 'region "cyan")
(set-face-background 'region "blue")
(set-face-foreground 'secondary-selection "skyblue")
(set-face-background 'secondary-selection "darkblue")
;;;;;;;;;;;;;;;;;;;;;;;;;;;; 讄界面l束 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;; 昄旉讄 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(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>
;;;;;;;;;;;;;;;;;;;;;;;;;;; 昄旉讄l束 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;定制操作?fn)?;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;讄打开文g的缺省\?br>(setq default-directory "/")
;;ido的配|?q个可以使你在用C-x C-f打开文g的时候在后面有提C?
;;q里是直接打开了ido的支持,在emacs23中这个是自带?
(ido-mode t)
(setq visible-bell t)
;;关闭烦h的出错时的提C声
(setq inhibit-startup-message t)
;;关闭emacs启动时的画面
(setq gnus-inhibit-startup-message t)
;;关闭gnus启动时的画面
(fset 'yes-or-no-p 'y-or-n-p)
;; 改变 Emacs 固执的要你回{?yes 的行为。按 y 或空格键表示 yesQn 表示 no?/p>
(setq font-lock-maximum-decoration t)
(setq font-lock-global-modes '(not shell-mode text-mode))
(setq font-lock-verbose t)
(setq font-lock-maximum-size '((t . 1048576) (vm-mode . 5250000)))
;; 语法高亮。除 shell-mode ?text-mode 之外的模式中使用语法高亮?/p>
(setq column-number-mode t)
(setq line-number-mode t)
;;昄行列?/p>
(setq mouse-yank-at-point t)
;;不要在鼠标点ȝ那个地方插入剪脓(chung)板内宏V我不喜Ƣ那Pl常把我的文档搞的一团糟。我觉得先用光标定位Q然后鼠标中键点击要好的多。不你的光标在文档的那个位|,或是?minibufferQ鼠标中键一点击QX selection 的内容就被插入到那个位置?/p>
(setq kill-ring-max 200)
;;讄_脓(chung)~冲条目数量.用一个很大的kill ring(最多的记录个数). q样防止我不心删掉重要的东?/p>
(setq-default auto-fill-function 'do-auto-fill)
; Autofill in all modes;;
(setq default-fill-column 120)
;;?fill-column 设ؓ(f) 60. q样的文字更好读
(setq-default indent-tabs-mode nil)
(setq default-tab-width 8)
(setq tab-stop-list ())
;;不用 TAB 字符来indent, q会(x)引v很多奇怪的错误。编?Makefile 的时候也不用担心Q因?makefile-mode ?x)?TAB 键设|成真正?TAB 字符Qƈ且加亮显C的?/p>
(setq sentence-end "\\([。!Q]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*")
(setq sentence-end-double-space nil)
;;讄 sentence-end 可以识别中文标点。不用在 fill 时在句号后插入两个空根{?/p>
(setq enable-recursive-minibuffers t)
;;可以递归的?minibuffer
(setq scroll-margin 3 scroll-conservatively 10000)
;;防止面滚动时蟩动, scroll-margin 3 可以在靠q屏q边?行时开始滚动,可以很好的看C下文?/p>
(setq default-major-mode 'text-mode)
(add-hook 'text-mode-hook 'turn-on-auto-fill)
;;讄~省L式是textQ?q进入auto-fillơ模?而不是基本模式fundamental-mode
(setq show-paren-mode t) ;;打开括号匚w昄模式
(setq show-paren-style 'parenthesis)
;;括号匚w时可以高亮显C另外一边的括号Q但光标不会(x)烦h的蟩到另一个括号处?/p>
(setq mouse-avoidance-mode 'animate)
;;光标靠近鼠标指针Ӟ让鼠标指针自动让开Q别挡住视线?/p>
(setq frame-title-format "emacs@%b")
;;在标题栏昄buffer的名字,而不?emacs@wangyin.com q样没用的提C?/p>
(setq uniquify-buffer-name-style 'forward);;好像没v作用
;; 当有两个文g名相同的~冲Ӟ使用前缀的目录名?buffer 名字Q不用原来的foobar<?> 形式?/p>
(setq auto-image-file-mode t)
;;?Emacs 可以直接打开和显C图片?/p>
;(auto-compression-mode 1)
;打开压羃文g时自动解压羃?
(setq global-font-lock-mode t)
;;q行语法加亮?/p>
(setq-default kill-whole-line t)
;; 在行?C-k Ӟ同时删除该行?/p>
(add-hook 'comint-output-filter-functions
'comint-watch-for-password-prompt)
;;当你在shell、telnet、w3m{模式下Ӟ必然到q要输入密码的情?此时加密昑և你的密码
;; (setq version-control t);;启用版本控制Q即可以备䆾多次
;; (setq kept-old-versions 2);;备䆾最原始的版本两ơ,及第一ơ编辑前的文档,和第二次~辑前的文档
;; (setq kept-new-versions 1);;备䆾最新的版本1ơ,理解同上
;; (setq delete-old-versions t);;删掉不属于以?中版本的版本
;; (setq backup-directory-alist '(("." . "~/backups")));;讄备䆾文g的\?br>;; (setq backup-by-copying t);;备䆾讄Ҏ(gu)Q直接拷?br>;; Emacs 中,改变文gӞ默认都会(x)产生备䆾文g(?~ l尾的文?。可以完全去?br>;; (q不可取)Q也可以制定备䆾的方式。这里采用的是,把所有的文g备䆾都放在一
;; 个固定的地方("~/backups")。对于每个备份文Ӟ保留最原始的两个版本和最新的
;; 1个版本。ƈ且备份的时候,备䆾文g是复本,而不是原件?/p>
(setq make-backup-files nil)
;; 讑֮不生备份文?/p>
(setq auto-save-mode nil)
;;自动保存模式
(setq-default make-backup-files nil)
;; 不生成(f)时文?/p>
(put 'scroll-left 'disabled nil) ;允许屏幕左移
(put 'scroll-right 'disabled nil) ;允许屏幕右移
(put 'set-goal-column 'disabled nil)
(put 'narrow-to-region 'disabled nil)
(put 'upcase-region 'disabled nil)
(put 'downcase-region 'disabled nil)
(put 'LaTeX-hide-environment 'disabled nil)
;;把这些缺省禁用的功能打开?/p>
;;允许emacs和外部其他程序的_脓(chung)
(setq x-select-enable-clipboard t)
(setq mouse-yank-at-point t)
;;使用鼠标中键可以_脓(chung)
(setq user-full-name "王光q?)
(setq user-mail-address "getmails@163.com")
;;讄有用的个Z?q在很多地方有用?/p>
(setq require-final-newline t)
;; 自动的在文g末增加一新行
(setq-default transient-mark-mode t)
;;Non-nil if Transient-Mark mode is enabled.
(setq track-eol t)
;; 当光标在行尾上下Ud的时候,始终保持在行?/p>
(setq Man-notify-method 'pushy)
;; 当浏?man page Ӟ直接跌{?man buffer?/p>
(setq next-line-add-newlines nil)
;;Emacs 21 中已l是~省讄。按 C-n 或向下键时不d新行?br>
(global-set-key [home] 'beginning-of-buffer)
(global-set-key [end] 'end-of-buffer)
;;讄home键指向buffer开_(d)end键指向bufferl尾
(global-set-key (kbd "C-,") 'scroll-left)
;; "C-,"设ؓ(f)屏幕左移命o(h)
(global-set-key (kbd "C-.") 'scroll-right)
;; "C-."设ؓ(f)屏幕右移命o(h)
(global-set-key [f1] 'manual-entry)
(global-set-key [C-f1] 'info )
(global-set-key [f3] 'repeat-complex-command)
(global-set-key [f4] 'other-window)
;; 跌{?Emacs 的另一个bufferH口
(defun du-onekey-compile ()
"Save buffers and start compile"
(interactive)
(save-some-buffers t)
(switch-to-buffer-other-window "*compilation*")
(compile compile-command))
(global-set-key [C-f5] 'compile)
(global-set-key [f5] 'du-onekey-compile)
;; C-f5, 讄~译命o(h); f5, 保存所有文件然后编译当前窗口文?
(global-set-key [f6] 'gdb)
;;F6讄为在Emacs中调用gdb
(global-set-key [C-f7] 'previous-error)
(global-set-key [f7] 'next-error)
(defun open-eshell-other-buffer ()
"Open eshell in other buffer"
(interactive)
(split-window-vertically)
(eshell))
(global-set-key [(f8)] 'open-eshell-other-buffer)
(global-set-key [C-f8] 'eshell)
;;目的是开一个shell的小bufferQ用于更方便地测试程?也就是运行程序了)Q我l常?x)用到?br>;;f8是另开一个buffer然后打开shellQC-f8则是在当前的buffer打开shell
(setq speedbar-show-unknown-files t);;可以昄所有目录以及文?br>(setq dframe-update-speed nil);;不自动刷斎ͼ手动 g h
(setq speedbar-update-flag nil)
(setq speedbar-use-images nil);;不?image 的方?br>(setq speedbar-verbosity-level 0)
(global-set-key [f9] 'speedbar)
;;讄f9调用speedbar命o(h)
;;使用 n ?p 可以上下UdQ?br>;; + 展开目录或文件进行浏览,- 收羃QRET 讉K目录或文Ӟg 更新 speedbar?/p>
(setq dired-recursive-copies 'top)
(setq dired-recursive-deletes 'top)
;;?dired 可以递归的拷贝和删除目录?br>(global-set-key [C-f9] 'dired)
;;讄[C-f9]用dired命o(h)
(global-set-key [f10] 'undo)
;;讄F10为撤销
(global-set-key [f11] 'calendar)
;;讄F11快捷键指定Emacs 的日历系l?/p>
(global-set-key [f12] 'list-bookmarks)
;;讄F12 快速察看日E安?/p>
(setq time-stamp-active t)
(setq time-stamp-warn-inactive t)
(setq time-stamp-format "%:y-%02m-%02d %3a %02H:%02M:%02S chunyu")
;; 讄旉戻I标识出最后一ơ保存文件的旉?/p>
(global-set-key (kbd "M-g") 'goto-line)
;;讄M-g为goto-line
(global-set-key (kbd "C-SPC") 'nil)
;;取消control+space键设为mark
(global-set-key (kbd "M-<SPC>") 'set-mark-command)
;;q样 我就不用?C-@ ?setmark ? C-@ 很不好按?/p>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;定制操作?fn)惯l束;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 讄日历 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;讄日历的一些颜?br>(setq calendar-load-hook
'(lambda ()
(set-face-foreground 'diary-face "skyblue")
(set-face-background 'holiday-face "slate blue")
(set-face-foreground 'holiday-face "white")))
;;讄我所在地方的l纬度,calendar里有个功能是日月食的预测Q和你的l纬度相联系的?br>;; 让emacs能计日出日落的旉Q在 calendar 上用 S 卛_看到
(setq calendar-latitude +39.54)
(setq calendar-longitude +116.28)
(setq calendar-location-name "北京")
;; 讄阴历昄Q在 calendar 上用 pC 昄阴历
(setq chinese-calendar-celestial-stem
["? "? "? "? "? "? "? "? "? "?])
(setq chinese-calendar-terrestrial-branch
["? "? "? "? "? "? "? "? "? "? "? "?])
;; 讄 calendar 的显C?br>(setq calendar-remove-frame-by-deleting t)
(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上不标记节日
(setq view-calendar-holidays-initially nil) ; 打开calendar的时候不昄一堆节?
;; L不关心的节日Q设定自己在意的节日Q在 calendar 上用 h 昄节日
(setq christian-holidays nil)
(setq hebrew-holidays nil)
(setq islamic-holidays nil)
(setq solar-holidays nil)
(setq general-holidays '((holiday-fixed 1 1 "元旦")
(holiday-fixed 2 14 "情h?)
(holiday-fixed 3 14 "白色情h?)
(holiday-fixed 4 1 "愚h?)
(holiday-fixed 5 1 "力_?)
(holiday-float 5 0 2 "母亲?)
(holiday-fixed 6 1 "儿童?)
(holiday-float 6 0 3 "父亲?)
(holiday-fixed 7 1 "建党?)
(holiday-fixed 8 1 "建军?)
(holiday-fixed 9 10 "教师?)
(holiday-fixed 10 1 "国庆?)
(holiday-fixed 12 25 "圣诞?)))
;;Calendar模式支持各种方式来更改当前日?br>;;Q这里的“?#8221;是指q没有到来的那一天,“?#8221;是指已经q去的日子)
;; q 退出calendar模式
;; C-f 让当前日期向前一?br>;; C-b 让当前日期向后一?br>;; C-n 让当前日期向前一?br>;; C-p 让当前日期向后一?br>;; M-} 让当前日期向前一个月
;; M-{ 让当前日期向后一个月
;; 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>
;;Calendar模式支持Ud多种Ud到特珠日期的方式
;; g d UdC个特别的日期
;; o 使某个特D的月分作ؓ(f)中间的月?br>;; . Ud到当天的日期
;; p d 昄某一天在一q中的位|,也显C本q度q有多少天?br>;; C-c C-l hCalendarH口
;; Calendar支持生成LATEX代码?br>;; t m 按月生成日历
;; t M 按月生成一个美化的日历
;; t d 按当天日期生成一个当天日?br>;; t w 1 在一上生成q个周的日历
;; t w 2 在两上生成q个周的日历
;; t w 3 生成一个ISO-SYTLE风格的当前周日历
;; t w 4 生成一个从周一开始的当前周日?br>;; t y 生成当前q的日历
;;EMACS Calendar支持配置节日Q?br>;; h 昄当前的节?br>;; x 定义当天为某个节?br>;; u 取消当天已被定义的节?br>;; e 昄所有这前后׃个月的节日?br>;; M-x holiday 在另外的H口的显C前后三个月的节日?/p>
;; 另外Q还有一些特D的Q有意思的命o(h)Q?br>;; S 昄当天的日出日落时?是大写的S)
;; p C 昄农历可以使用
;; g C 使用农历Ud日期可以使用
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 日历讄l束 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 讄日记 ;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;
(setq diary-file "~/diary");; 默认的日记文?br>(setq diary-mail-addr "getmails@163.com")
(add-hook 'diary-hook 'appt-make-list)
;;当你创徏了一?~/diary'文gQ你可以用calendarL看里面的内容。你可以查看当天的事Ӟ相关命o(h)如下 Q?br>;; d 昄被选中的日期的所有事?br>;; s 昄所有事Ӟ包括q期的,未到期的{等
;; 创徏一个事件的样例Q?br>;; 02/11/1989
;; Bill B. visits Princeton today
;; 2pm Cognitive Studies Committee meeting
;; 2:30-5:30 Liz at Lawrenceville
;; 4:00pm Dentist appt
;; 7:30pm Dinner at George's
;; 8:00-10:00pm concert
;; 创徏事g的命令:(x)
;; i d 为当天日期添加一个事?br>;; i w 为当天周创徏一个周事g
;; i m 为当前月创徏一个月事g
;; i y 为当前年创徏一个年事g
;; i a 为当前日期创Z个周q纪忉|
;; i c 创徏一个@环的事g
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 讄日记l束 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 自定义lisp包设|?nbsp; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;=======================五笔输入法设|?=====================
;; (add-to-list 'load-path "~/lisp/wubi/wubi")
;; (require 'wubi)
;; (register-input-method "chinese-wubi" "Chinese-GB" 'quail-use-package "wubi" "wubi")
;; (wubi-load-local-phrases)
;; (setq default-input-method "chinese-wubi")
;;q几句Lisp代码的作用是讄中文环境、注册五W字型输入法。保?emacs后请重新启动emacsQ?br>;;使得上面的设|生效。现在?zhn)可以用快捷键C-\ Q同时按?Ctrl和反斜线键)唤出五笔字型输入法了?br>;;在emacs的mode line上会(x)出现“五笔字型”的字栗?/p>
;=======================五笔输入法设|结?==================
;======================= cscope 讄 =======================
;;使用 cscope 览源代?q个xcscope是个改进版,为每一ơ查扄l果使用不同 buffer Q?br>;;q样可以保存以前的l果?/p>
(add-to-list 'load-path "~/lisp/xcscope") ;; Y件包所在的路径加到 EMACS ?load-path
(require 'xcscope) ;; 加蝲相应的Y?/p>
;; C-c s a 讑֮初始化的目录Q一般是你代码的根目?br>;; C-s s I 对目录中的相x件徏立列表ƈq行索引
;; C-c s s 序找W号
;; C-c s g L全局的定?br>;; C-c s c 看看指定函数被哪些函数所调用
;; C-c s C 看看指定函数调用了哪些函?br>;; C-c s e L正则表达?br>;; C-c s f L文g
;; C-c s i 看看指定的文件被哪些文ginclude
;===================== cscope 讄l束 ======================
;======================== tabbar讄 ========================
(add-to-list 'load-path "~/lisp/tabbar")
(require 'tabbar)
(tabbar-mode)
;========================tabbar讄l束=======================
;======================= wb-line-number讄 ==================
;;增加一个显CL(fng)buffer
;(add-to-list 'load-path "~/lisp/wb-line-number")
;(require 'wb-line-number)
;(wb-line-number-enable)
;====================== wb-line-number讄l束 ================
;======================= setnu讄 ============================
;;再增加一个显CL(fng)功能
(add-to-list 'load-path "~/lisp/setnu")
(require 'setnu)
(global-set-key [f2] (quote setnu-mode))
;======================= setnu讄l束 Q=Q==================
;====================== rect-mark讄 =========================
;; 按下shift拖拽鼠标卛_选择矩Ş区域
;; Support for marking a rectangle of text with highlighting.
(add-to-list 'load-path "~/lisp/rect-mark")
(require 'rect-mark)
(define-key ctl-x-map "r\C-@" 'rm-set-mark)
(define-key ctl-x-map [?r ?\C-\ ] 'rm-set-mark)
(define-key ctl-x-map "r\C-x" 'rm-exchange-point-and-mark)
(define-key ctl-x-map "r\C-w" 'rm-kill-region)
(define-key ctl-x-map "r\M-w" 'rm-kill-ring-save)
(define-key global-map [S-down-mouse-1] 'rm-mouse-drag-region)
(autoload 'rm-set-mark "rect-mark"
"Set mark for rectangle." t)
(autoload 'rm-exchange-point-and-mark "rect-mark"
"Exchange point and mark for rectangle." t)
(autoload 'rm-kill-region "rect-mark"
"Kill a rectangular region and save it in the kill ring." t)
(autoload 'rm-kill-ring-save "rect-mark"
"Copy a rectangular region to the kill ring." t)
(autoload 'rm-mouse-drag-region "rect-mark"
"Drag out a rectangular region with the mouse." t)
;; Use this section in your "~/.emacs" to modify picture mode so that
;; it automatically uses the rect-mark equivalents of many commands.
;; One vision of a better picture mode.
(add-hook 'picture-mode-hook 'rm-example-picture-mode-bindings)
(autoload 'rm-example-picture-mode-bindings "rect-mark"
"Example rect-mark key and mouse bindings for picture mode.")
;===================== rect-mark讄l束 =========================
;===================== info文g讄 ==============================
;;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>
(add-to-list 'Info-default-directory-list "~/lisp/info/")
;; nQ蟩转到该节点的下一个节点;
;; pQ蟩转到该节点的上一个节点;
;; m: 指定菜单名而选择另外一个节点;
;; fQ进入交叉引用主题;
;; lQ进入该H口中的最后一个节点;
;; TABQ蟩转到该窗口的下一个超文本链接Q?br>;; RETQ进入光标处的超文本链接Q?br>;; uQ{C一U主题;
;; dQ回?info 的初始节点目录;
;; hQ调?info 教程Q?br>;; qQ退?info?/p>
;=================== info文g讄l束 ============================
;===================== AUCTeX讄 =================================
(load "~/lisp/auctex/site-lisp/auctex.el" nil t t)
(load "~/lisp/auctex/site-lisp/preview-latex.el" nil t t)
(setq TeX-auto-save t)
(setq TeX-parse-self t)
(setq-default TeX-master nil)
(add-hook 'LaTeX-mode-hook #'LaTeX-install-toolbar)
(add-hook 'LaTeX-mode-hook 'turn-on-auto-fill)
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
;===================== AUCTeX讄l束 =============================
;===================== 文g头header讄 ===========================
;;当我们保存文件的时?有很多信息可以自动更?如何自动更新信息, 更新那些信息,
;也是可以完全自己配置. 包括文g名称,最后一ơ修Ҏ(gu)?文g保存?gu)ơ?最后一ơ修改的作者等{?
;;可以?M-x make-header 自动生成文g头信?
(add-to-list 'load-path "~/lisp/header")
(require 'header)
(setq make-header-hooks '(header-mode-line
header-blank
header-file-name
header-blank
header-copyright
header-blank
header-author
header-creation-date
header-modification-author
header-modification-date
header-update-count
header-blank
header-history
header-blank
))
(setq header-copyright-notice " 源成工作?作品" )
(make-local-variable 'user-full-name)
(make-local-variable 'user-mail-address)
;===================== 文g头header讄l束 ==========================
;===================== template讄 =================================
(add-to-list 'load-path "~/lisp/template")
(require 'template)
(template-initialize)
;===================== template讄l束===============================
;===================== cedet讄 =====================================
(add-to-list 'load-path "~/lisp/cedet-1.0pre3/speedbar")
(add-to-list 'load-path "~/lisp/cedet-1.0pre3/eieio")
(add-to-list 'load-path "~/lisp/cedet-1.0pre3/semantic")
(add-to-list 'load-path "~/lisp/cedet-1.0pre3/common")
(require 'cedet)
;; (add-to-list 'load-path "~/lisp/ecb-2.32")
;; (require 'ecb)
;; Ecb的操?
;; C-c . g d 目录列表H口
;; C-c . g s 源码H口
;; C-c . g m Ҏ(gu)和变量窗?br>;; C-c . g h 历史H口
;; C-c . g l 最后选择q的~辑H口
;; C-c . g 1 ~辑H口1
;; C-c . g n ~辑H口n
;; C-c . l c 选择版面
;; C-c . l r 重画版面
;; C-c . l t 拴牢版面(锁定版面)
;; C-c . l w 拴牢可见的ecbH口
;; C-c . \ 拴牢~绎H口
;; 其中l为小写字?L),大家别看?!
;======================cedet讄l束==================================
;;;;;;;;;;;;;;;;;;;;;;;;;; 自定义lisp包设|结?nbsp; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;===================== GNUS讄 =================================
(setq gnus-select-method '(nntp "news.yaako.com"))
(setq gnus-default-subscribed-newsgroups
'( "cn.comp.os.linux")) ;;
;; (add-to-list 'gnus-secondary-select-methods '(nntp "news.yourSecondProvider.net"))
;; (add-to-list 'gnus-secondary-select-methods '(nntp "news.yourThirdProvider.net"))
;;惌 Gnus 在多个的服务器上取新?/p>
;;中文相关
(set-language-environment 'Chinese-GB)
(setq gnus-default-charset 'chinese-iso-8bit
gnus-group-name-charset-group-alist '((".*" . chinese-iso-8bit))
gnus-summary-show-article-charset-alist
'((1 . chinese-iso-8bit)
(2 . gbk)
(3 . big5)
(4 . utf-8))
gnus-newsgroup-ignored-charsets
'(unknown-8bit x-unknown iso-8859-1))
(setq mail-sources
'((pop :server "pop3.163.com" ;; 在这里设|pop3服务?br> :user "66656799" ;; 用户?br>;; :port "110"
:password "wcmwlw"))) ;; 密码
(setq gnus-secondary-select-methods '((nnfolder "")))
(setq user-full-name "getmails") ;; 外发的邮仉用这个名?br>(setq user-mail-address "getmails@163.com") ;;外发的邮仉用这个地址
(setq smtpmail-auth-credentials
'(("smtp.163.com" ;; SMTP服务?br> 25
"getmails" ;; 用户?br> "wcmwlw"))) ;; 密码
(setq smtpmail-default-smtp-server "smtp.163.com")
(setq smtpmail-smtp-server "smtp.163.com")
(setq message-send-mail-function 'smtpmail-send-it)
(setq nnmail-expiry-wait 3);;Gnus 默认的保质期?天,如果你觉得时间不合适,可以自己讄
(add-hook 'gnus-article-prepare-hook
(lambda ()
(setq fill-column 60)
(gnus-article-fill-long-lines)))
;;让gnus把这U邮件排版整齐后再显C给我们?/p>
(add-hook 'gnus-article-prepare-hook 'gnus-article-date-local)
;;邮件的发出旉转换为本地时?/p>
(gnus-add-configuration '(article
(vertical 1.0
(summary .4 point)
(article 1.0))))
;; 改变阅读新闻时窗口的布局Q窗口划分ؓ(f)??Q比例)
(eval-after-load "mm-decode"
'(progn
(add-to-list 'mm-discouraged-alternatives "text/html")
(add-to-list 'mm-discouraged-alternatives "text/richtext")))
;另外Q有些用web方式发出的邮仉有htmlQ加入下面的讄Q只看其中的
;plain text部分Q?/p>
(setq gnus-thread-sort-functions
'(
(not gnus-thread-sort-by-date)
(not gnus-thread-sort-by-number)
))
;;排序
(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
;; 有时订阅了很多新ȝQ堆在一起不好管理。这个功能可以创建目录来分层理
(setq gnus-read-newsrc-file nil gnus-save-newsrc-file nil)
;======================== GNUS讄l束 ===============================
;;=========================== 方便~程操作的设|?====================================
(setq compile-command "make")
;;emacs的默认compile命o(h)是调用make -kQ我把它Ҏ(gu)了make。你也可以把它改成其他的Q比如gcc之类?
;;把c语言风格讄为k&r风格
(add-hook 'c-mode-hook
'(lambda ()
(c-set-style "k&r")))
;;把C++语言风格讄为stroustrup风格
(add-hook 'c++-mode-hook
'(lambda()
(c-set-style "stroustrup")))
;========================================================================
(load-library "hideshow")
(add-hook 'c-mode-hook 'hs-minor-mode)
(add-hook 'c++-mode-hook 'hs-minor-mode)
(add-hook 'java-mode-hook 'hs-minor-mode)
(add-hook 'perl-mode-hook 'hs-minor-mode)
(add-hook 'php-mode-hook 'hs-minor-mode)
(add-hook 'emacs-lisp-mode-hook 'hs-minor-mode)
;;能把一个代码块~v来,需要的时候再展开
;; M-x hs-minor-mode
;; C-c @ ESC C-s show all
;; C-c @ ESC C-h hide all
;; C-c @ C-s show block
;; C-c @ C-h hide block
;; C-c @ C-c toggle hide/show
;========================================================================
(defun my-c-mode-auto-pair ()
(interactive)
(make-local-variable 'skeleton-pair-alist)
(setq skeleton-pair-alist '(
(?` ?` _ "''")
(?\( ? _ " )")
(?\[ ? _ " ]")
(?{ \n > _ \n ?} >)))
(setq skeleton-pair t)
(local-set-key (kbd "(") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "{") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "`") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "[") 'skeleton-pair-insert-maybe))
(add-hook 'c-mode-hook 'my-c-mode-auto-pair)
(add-hook 'c++-mode-hook 'my-c-mode-auto-pair)
;;输入左边的括P׃(x)自动补全双的部?包括(), "", [] , {} , {等?/p>
;=========================================================================
(setq semantic-load-turn-everything-on t)
;(add-hook 'semantic-init-hooks 'semantic-idle-completions-mode)
(setq semanticdb-project-roots
(list
(expand-file-name "/")))
;;配置Semantic的检索范?/p>
(setq semanticdb-default-save-directory "~/")
;;讄semantic.cache路径
(global-set-key [(meta ?/)] 'hippie-expand)
;;M-/ l定?hippie-expand
(autoload 'senator-try-expand-semantic "senator")
(setq hippie-expand-try-functions-list
'(senator-try-expand-semantic ;优先调用了senator的分析结?br> try-expand-dabbrev ;当前的buffer补全
try-expand-dabbrev-visible ;别的可见的窗口里L补全
try-expand-dabbrev-all-buffers ;所有打开的buffer
try-expand-dabbrev-from-kill
try-complete-file-name-partially
try-complete-file-name
try-expand-all-abbrevs
try-expand-list
try-expand-line
try-complete-lisp-symbol-partially
try-complete-lisp-symbol))
;讄 hippie-expand 的补全方式。它是一个优先列表, hippie-expand ?x)优先用表最前面的函数来补全?/p>
;=========================================================================
;==========================================================================
;;========================== 方便~程操作讄l束====================================
emacs-lisp-mode | 用于Emacs Lisp代码的编辑(文g?emacs或后~.elQ?/td> |
lisp-mode | 用来~辑另一个Lisppȝ的Lisp代码Q后~.l?lispQ?/td> |
lisp-interaction-mode | 用来~辑和运行Emacs Lisp代码Q交互模式) |
(setq thisvar thisvalue也可用其它方法设|值或变量Q不qsetq是用最q的Ҏ(gu)?br />
thatvar thatvalue
theothervar theothervalue)
1 (defun count-words-buffer ( )defunQ? 指定函数名和参数来定义函数。注意defun本n是一个函数――被调用Ӟ定义一个新函数。(defunq回把所定义的函CZ个symbolq回。) 函数的参数显CZؓ(f)在括号内的一个名字listQ本例,函数没有参数。如果在参数前加关键?amp;optionalpC参数是optionalQ可? 的)。如果参数是optional的,在函数调用时未指定该参数Q则认ؓ(f)其gؓ(f)nil?br />
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))))
(let ((var1 value1) (var2 value2) ... )letQ?.定义Q或声明Q一个变量listQ?.变量讄初始|同setqQ?.创徏一个语句块Q类似函CQ,在此块内q些变量可用Qlet块即q些变量的scopeQ作用域Q。let里定义的变量可用setq改变其|不过要小心用setq?br />
statement-block)
< 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)? ?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 />
(interactive "sReplace string: \nsReplace string %s with: ")
...)(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是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)
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以上版本误?.
以上只是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
命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">
对许多用h_(d)?span lang="X-NONE">DOS?span lang="X-NONE">Windows环境下利用工兯Y?span lang="X-NONE">WinZip?span lang="X-NONE">ARJ{压~或解压文g是比较容易的事。但是,?span lang="X-NONE">Linux中如何对文gq行压羃与解压呢Q?span lang="X-NONE">
?span lang="X-NONE">tar建立存档
tar
是?span lang="X-NONE">tape archive?span lang="X-NONE">(带存档)的简Uͼ它出现在q没有Y盘驱动器、硬盘和光盘驱动器的计算机早期阶Dc那时Y件的发行和备份都需要大L(fng)带Q计机上运行的头几个程序中得有一个是带的阅ȝ序。随着旉的推U, tar命o(h)逐渐变ؓ(f)一个将很多文gq行存档的工P目前许多用于Linux操作pȝ的程序就是打包ؓ(f)tar档案文g的Ş式?span lang="X-NONE">
tar
命o(h)的格式是
Q?/span>
tar [option]
tar
命o(h)有很多参敎ͼ利用f选项、设备或文g的名字可以指C?span lang="X-NONE">tar命o(h)档案置于特定的讑֤或文件中。当?span lang="X-NONE">tar的档案创Z个文件时,q个文g名的扩展通常是如果指定了一个目录名,那么它所有的子目录都?x)被包含在档案之中?span lang="X-NONE">
利用tar命o(h)?span lang="X-NONE">f选项的格式如下所C:(x)
#tar opionsfarchive-name.tar directory-and-filenames
要创Z个档案应使用c选项Q与f选项一Pc选项?x)在讑֤或文件中创徏档案Q应?span lang="X-NONE">f选项的左边输入这一选项。在下例中,目录mydir和它所有的子目录都被存入文?span lang="X-NONE">myarch.tar中?span lang="X-NONE">
#tar cfmyarch.tarmydir
如果惌改动已经存档的目录中的文Ӟ可以使用u选项?span lang="X-NONE">tar更新档案中的文g?span lang="X-NONE">tar比较每一个档案文件与相应用户目录中文件最q一ơ修改的旉,然后上一ơ存档之后又被修改过的文件拷贝到档案文g中去。在用户目录中新创徏的文件也?x)被d到档案文件中。在下面的例子中,用户?span lang="X-NONE">mydir目录中最q被修改或添加的文g来对myarch.tar文gq行更新?span lang="X-NONE">
#tar uf myarch.tar mydir
如果x看在一个档案中存储着哪些文gQ可以?span lang="X-NONE">tar命o(h)?span lang="X-NONE">t选项。下面命令列出所有存储在myarch.tar档案中的文gQ?span lang="X-NONE">
#tar tf myarch.tar
要将文g备䆾C个特定的讑֤Q只L讑֤名作为档案。在下面的例子中Q用户在/dev/fdo讑֤的Y盘中创徏了一个档?span lang="X-NONE">,q将mydir目录中所有的文g都拷贝到档案中?span lang="X-NONE">
#tar cf/dev/fdomydir
要恢复设备磁盘中的文?span lang="X-NONE">,可?span lang="X-NONE">xf选项:
#tar xf/dev/fdo
如果所备䆾的文件大超q设备可用的存储?span lang="X-NONE">,比如软盘,此时可以创Z个用多个标L(fng)tar档案。当使用m选项向一个Yp行存档时,tar命o(h)在一张Y盘已满的时候会(x)提醒再放入一张新的Y盘?span lang="X-NONE">
#tar cmf/dev/fdomydir
要想恢复几张盘中的档?span lang="X-NONE">,只要第一张Y盘放入Y?span lang="X-NONE">,然后输入?span lang="X-NONE">x?span lang="X-NONE">m选项?span lang="X-NONE">tar命o(h)。必要时?x)被提醒攑օ另外一张Y盘?span lang="X-NONE">
#tarxmf/dev/fdo
tar
操作不会(x)Ҏ(gu)案文件实行压~操作。如果想压羃档案文g,可以指示tarȀz?span lang="X-NONE">gzip实用工具,在存档之前对文gq行压羃。利?span lang="X-NONE">z选项,tar在对文g存档之前首先要?span lang="X-NONE">gzip来压~文件。当恢复文g?span lang="X-NONE">,同样?span lang="X-NONE">Z选项激z?span lang="X-NONE">gzipҎ(gu)件解压?span lang="X-NONE">
#tar czfmyarch.tar mydir
值得注意的是Q压~档案中的单个文件和整体压羃档案是不同的。通常档案文g是ؓ(f)了便于传输而把几个文gl合成ؓ(f)一?span lang="X-NONE">tar文g。ؓ(f)了羃短传输时?span lang="X-NONE">,档案应当小好Q可以将其压~然后传送压~后的版本。接收者可以对之解压羃Q然后恢?span lang="X-NONE">tar文g。在tar文g上?span lang="X-NONE">gzip会(x)产生?span lang="X-NONE">.tar.gz扩展名的文g。扩展名.gz被加到被压羃?span lang="X-NONE">gzip文g名之后?span lang="X-NONE">
下面的例子创Zmyarch.tar的一个压~的版本,它具有了.gz的扩展名?span lang="X-NONE">
#gzipmyarch.tar
#ls
#myarch.tar.gz
tar
命o(h)虽然有非常多的参敎ͼ但是使用hq不困难Q可以快速而又单地ZQ何需要的子目录生成档案文件?span lang="X-NONE">
首先Q我们来建立一个有三个文g的子目录Q再建立一个有另外三个文g的子目录Q如下所C:(x)
# mkdir mydir
#cd mydir
# touch file1 file2 file3
# mkdir mydir2
#cd mydir2
# touch file21 file22 file23
#cd../..
#tree mydir
mydir
file1
file2
file3
mydir2
file21
file22
file23
现在已经有了一个子目录和其中的文gQ用这个命令的c(生成)?span lang="X-NONE">f(文g)参数来生成一?span lang="X-NONE">tar档案文gQ?span lang="X-NONE">
# tar cf mydir.tar mydir
# ls -l *.tar
- r w - r - - r - - 1 bball u s e r s 10240 Jan 5 15 : 01 mydir. t a r
h意,原来的子目录q没有发生变化。在~省的情况下Q?span lang="X-NONE">tar命o(h)不会(x)删除原来的子目录和文件。如果想看看命o(h)执行的过E,可以使用v参数Q如下所C:(x)
# tar cvf mydir.tar mydir
mydir/
mydir/file1
mydir/file2
mydir/file3
mydir/mydir2/
mydir/mydir2/file21
mydir/mydir2/file22
mydir/mydir2/file23
tar
命o(h)在进行操作的时候,׃(x)把正在添加到档案文g中去的子目录和文件的文g名显C出来。?span lang="X-NONE">w参数Q即交互参数Q这?span lang="X-NONE">tar命o(h)在执行的q程当中?x)询问是否想加入每个文g。当x选择地备份内容不多的子目录的时候,
11
?span lang="X-NONE">mount 常见使用Ҏ(gu)
q样非常地方便Q如下所C:(x)
# tar cwf mydir.tar mydir
add mydir?y
add mydir/file1?n
add mydir/file2?y
add mydir/file3?n
add mydir/mydir2?y
add mydir/mydir2/file21?y
add mydir/mydir2/file22?n
add mydir/mydir2/file23?y
在上面的例子中,没有把文?span lang="X-NONE">file1?span lang="X-NONE">file3和文?span lang="X-NONE">file22归档。可以?span lang="X-NONE">tar命o(h)?span lang="X-NONE">t参数列出档案文g中的内容Q?span lang="X-NONE">f参数定义操作所使用?span lang="X-NONE">tar档案文gQ如下所C:(x)
# tar tf mydir.tar
mydir/
mydir/file2
mydir/mydir2/
mydir/mydir2/file21
mydir/mydir2/file23
需要注意的是,如果参数的顺序放错了Q?span lang="X-NONE">tar命o(h)?x)显C出错信息ƈ退出?span lang="X-NONE">
下面来看看如何来释放整个的档案文g或者其中的某一个文件。如果想释放其中所有的文gQ可以同时?span lang="X-NONE">-x释放参数?span lang="X-NONE">-f。ؓ(f)了了解命令执行的q程Q还可以加上-v参数Q?span lang="X-NONE">
# tar xvf mydir.tar
mydir/
mydir/file2
mydir/mydir2/
mydir/mydir2/file21
mydir/mydir2/file23
如果只是想从档案文g中释攑և个文件的话,可以再次使用w参数Q?span lang="X-NONE">
# tar xvwf mydir.tar
extract mydir/?y
mydir/
extract mydir/file2?y
mydir/file2
extract mydir/mydir2/?y
mydir/mydir2/
extract mydir/mydir2/file21?y
mydir/mydir2/file21
extract mydir/mydir2/file23?y
mydir/mydir2/file23
上例表明查看了档案文Ӟq交互地释放了文件。如果只想从档案文g中释放某一个文Ӟ可以在命令行中指定这个文件。作为示例,我先删除了原始的mydir子目录,然后使用一个空的子目录q行如下操作Q?span lang="X-NONE">
# tar xf mydir.tar mydir/mydir2/file23
# tree mydir
m y d i r
- - mydir2
- - file23
1 directory, 1 file
注意Q正如所看到的只有一个文件被释放出来。虽?span lang="X-NONE">tar命o(h)不会(x)覆盖整个的子目录Q但是它?x)覆盖掉那些有着相同文g名的文g?span lang="X-NONE">
使用gzip压羃文g
gzip
命o(h)是用来压~文件的。它不仅可以用来压羃大的、较?yu)用的文g以节省磁盘空_(d)q可以和tar命o(h)一h?span lang="X-NONE">Linux操作pȝ中比较流行的压羃文g格式。据l计Q?span lang="X-NONE">gzip命o(h)Ҏ(gu)本文件有60%?span lang="X-NONE">70%的压~率?span lang="X-NONE">
gzip
命o(h)的格式是Q?span lang="X-NONE">
gzip [option] [file]
gzip
很容易用。如果想压羃某个文g或者磁带档案文Ӟ可输入下面的内容Q?span lang="X-NONE">
# gzip mydir.tar
在缺省的状态下Q?span lang="X-NONE">gzip?x)压~文件、再加上一?span lang="X-NONE">.gz扩展名,然后删除掉原来的文g。如果想解压~文Ӟ可以使用gzip的对应程序命?span lang="X-NONE">gunzip或?span lang="X-NONE">gzip命o(h)?span lang="X-NONE">-d解压~参数。但是必M证这个用于解压羃的文件有.gz(或?span lang="X-NONE">.Z?span lang="X-NONE">-gz?span lang="X-NONE">.z?span lang="X-NONE">-z、或?span lang="X-NONE">_z)扩展名,否则gzip命o(h)?span lang="X-NONE">gunzip命o(h)都会(x)昄出错信息。如果想使用自己的扩展名Q可以?span lang="X-NONE">-S后缀参数Q如下所C:(x)
# gzip -S .gzipped mydir.tar
gzip
q可以处理用zip命o(h)?span lang="X-NONE">compress命o(h)?span lang="X-NONE">pack命o(h)压羃的文件包。如果想在压~或者解压羃的过E中看到更多的信息,可以使用-l列清单参数看到文件在被压~或解压~的时候的文g长度。在前一个例子中Q压~完子目?span lang="X-NONE">mydir之后Q可以?span lang="X-NONE">gzip命o(h)按照下面的方法得到有关的数据Q?span lang="X-NONE">
# gzip -l mydir.tar.gz
compressed uncompr.ratio uncompressed_name
312 21330 98.2% mydir.tar
此外Q?span lang="X-NONE">gzipq有一个很有用的参?span lang="X-NONE">-tQ可以用来测试压~文件的完整性。如果文件正常,gzip不会(x)l出M昄。如果想看到OKq两个字母,可以在测试某个文件时使用-tv参数?span lang="X-NONE">
使用compress压羃文g
compress
命o(h)像它的文g名那h用来压羃文g的。这?span lang="X-NONE">Unix中出现得比较早的一个压~程?span lang="X-NONE">,它通过使用自适应?span lang="X-NONE">Lemple-Ziv~码来羃?yu)所指文件的大小。每一个文件将被一个带?span lang="X-NONE">.Z扩展名的压羃文g所代替Q但文g的属dpR访问时间和修改旉保持不变。如果没有指Ҏ(gu)Ӟ则接受标准输入的文gq行压羃q到标准输出?span lang="X-NONE">
compress
命o(h)格式?/span>
Q?/span>
compress [option] [file]
?span lang="X-NONE">compress对应的有一个解压羃命o(h)uncompressQ其格式如下Q?span lang="X-NONE">
uncompress [option] [file]
它?span lang="X-NONE">.Z”的压羃文g恢复?span lang="X-NONE">
compress
?span lang="X-NONE">uncompress命o(h)的选项如下Q?span lang="X-NONE">
?span lang="X-NONE">-c 写到标准输出Q不改变文g?span lang="X-NONE">
?span lang="X-NONE">-f 强制压羃Q即使文件ƈ不真正减或.Z文g已经存在Q也q行压羃?span lang="X-NONE">
?span lang="X-NONE">-v 昄每一个被压羃文g的羃?yu)的癑ֈ比?span lang="X-NONE">
下面举例说明compress命o(h)的用法:(x)
#compress file
上面代码表明生成压~文?span lang="X-NONE">file.Z代替fileQ要解压~输入:(x)
#uncompress file.Z