10/10
13
一篇不错的文章:使用VIM的十大理由
k 上
h l 左 右
j 下
^ 移动到该行第一个非空格的字符处
w 向前移动一个单词,将符号或标点当作单词处理
W 向前移动一个单词,不把符号或标点当作单词处理
b 向后移动一个单词,把符号或标点当作单词处理
B 向后移动一个单词,不把符号或标点当作单词处理
0 到行首
$ 到行尾
gg 到页首
G 到页末
行号+G 跳转到指定行
Ctrl+g 查询当前行信息和当前文件信息
fx 向右跳到本行字符x处(x可以是任何字符)
Fx 向左跳到本行字符x处(x可以是任何字符)
tx 和fx相同,区别是跳到字符x前
Tx 和Fx相同,区别是跳到字符x后
C-b 向上滚动一屏
C-f 向下滚动一屏
C-u 向上滚动半屏
C-d 向下滚动半屏
C-y 向上滚动一行
C-e 向下滚动一行
退出Vi
ZZ:退出vi并保存
:q! :退出vi,不保存
:wq :退出vi并保存
重复操作
.:重复上一次操作
自动补齐
C-n 匹配下一个关键字
C-p 匹配上一个关键字
插入
o:在光标下方新开一行并将光标置于新行行首,进入插入模式。
O:同上,在光标上方。
a:在光标之后进入插入模式。
A:同上,在光标之前。
R:进入替换模式,直到按下Esc
set xxx:设置XXX选项。
在Vi中删除
x: 删除当前光标下的字符
dw:删除光标之后的单词剩余部分。
d$:删除光标之后的该行剩余部分。
dd:删除当前行。
c: 功能和d相同,区别在于完成删除操作后进入INSERT MODE
cc:也是删除当前行,然后进入INSERT MODE
更改字符
rx:将当前光标下的字符更改为x(x为任意字符) ~: 更改当前光标下的字符的大小写
键盘宏操作
qcharacter:开始录制宏,character为a到z的任意字符
q:终止录制宏
@character:调用先前录制的宏
恢复误操作
u: 撤销最后执行的命令
U: 修正之前对该行的操作
Ctrl+R:Redo
在Vi中操作Frame
c-w c-n 增加frame
c-w c-c 减少frame
c-w c-w 切换frame
c-w c-r 交换两个frame
在Vi中查找
/ + 字符串:即可在当前文件查找相应的字符串。
继续查找同一个字符串,按n或/(ENTER),若要反向继续查找,按Shift+N。
若要逆向查找,用?代替 /
.*[]^%~$ 在Vi中具有特殊含义,若需要查找则应该加上转义字符"\"
% :查找配对的括号。
s/old/new/g:替换old为new,若没有g则表示只替换一个。
若要每个替换都向用户询问则应该用gc选项
查找的一些选项
设置高亮
:set hlsearch 设置高亮
:set nohlsearch 关闭高亮
:nohlsearch 关闭当前已经设置的高亮
增量查找
:set incsearch 设置增量查找
:set noincsearch 关闭增量查找
VIM中的块操作
Vim支持多达26个剪贴板
选块 先用v,C-v,V选择一块,然后用y复制,再用p粘贴。
yy 复制当前整行
nyy 复制当前行开始的n行内容
ayy 将光标当前行复制进寄存器a
ap 将寄存器a中的内容粘贴到光标位置之后。如果a是用yy复制的完整行,则粘贴在光标所在行下面。
aP 将寄存器a中的内容粘贴到光标位置之前。如果a是用yy复制的完整行,则粘贴在光标所在行上面。
ay[motion]
ay$ 复制光标位置到行末并保存在寄存器a中
ayft 复制光标位置到当前行第一个字母t并保存在寄存器a中
以上指令皆可去掉a工作,则y,p对未命名寄存器工作(所有d,c,x,y的对象都被保存在这里)。
剪切/复制/粘贴
所有删除的内容自动被保存,可以用p键粘贴
tips
对代码自动格式化 gg=G
k 上
h l 左 右
j 下
^ 移动到该行第一个非空格的字符处
w 向前移动一个单词,将符号或标点当作单词处理
W 向前移动一个单词,不把符号或标点当作单词处理
b 向后移动一个单词,把符号或标点当作单词处理
B 向后移动一个单词,不把符号或标点当作单词处理
0 到行首
$ 到行尾
gg 到页首
G 到页末
行号+G 跳转到指定行
Ctrl+g 查询当前行信息和当前文件信息
fx 向右跳到本行字符x处(x可以是任何字符)
Fx 向左跳到本行字符x处(x可以是任何字符)
tx 和fx相同,区别是跳到字符x前
Tx 和Fx相同,区别是跳到字符x后
C-b 向上滚动一屏
C-f 向下滚动一屏
C-u 向上滚动半屏
C-d 向下滚动半屏
C-y 向上滚动一行
C-e 向下滚动一行
退出Vi
ZZ:退出vi并保存
:q! :退出vi,不保存
:wq :退出vi并保存
重复操作
.:重复上一次操作
自动补齐
C-n 匹配下一个关键字
C-p 匹配上一个关键字
插入
o:在光标下方新开一行并将光标置于新行行首,进入插入模式。
O:同上,在光标上方。
a:在光标之后进入插入模式。
A:同上,在光标之前。
R:进入替换模式,直到按下Esc
set xxx:设置XXX选项。
在Vi中删除
x: 删除当前光标下的字符
dw:删除光标之后的单词剩余部分。
d$:删除光标之后的该行剩余部分。
dd:删除当前行。
c: 功能和d相同,区别在于完成删除操作后进入INSERT MODE
cc:也是删除当前行,然后进入INSERT MODE
更改字符
rx:将当前光标下的字符更改为x(x为任意字符) ~: 更改当前光标下的字符的大小写
键盘宏操作
qcharacter:开始录制宏,character为a到z的任意字符
q:终止录制宏
@character:调用先前录制的宏
恢复误操作
u: 撤销最后执行的命令
U: 修正之前对该行的操作
Ctrl+R:Redo
在Vi中操作Frame
c-w c-n 增加frame
c-w c-c 减少frame
c-w c-w 切换frame
c-w c-r 交换两个frame
在Vi中查找
/ + 字符串:即可在当前文件查找相应的字符串。
继续查找同一个字符串,按n或/(ENTER),若要反向继续查找,按Shift+N。
若要逆向查找,用?代替 /
.*[]^%~$ 在Vi中具有特殊含义,若需要查找则应该加上转义字符"\"
% :查找配对的括号。
s/old/new/g:替换old为new,若没有g则表示只替换一个。
若要每个替换都向用户询问则应该用gc选项
查找的一些选项
设置高亮
:set hlsearch 设置高亮
:set nohlsearch 关闭高亮
:nohlsearch 关闭当前已经设置的高亮
增量查找
:set incsearch 设置增量查找
:set noincsearch 关闭增量查找
VIM中的块操作
Vim支持多达26个剪贴板
选块 先用v,C-v,V选择一块,然后用y复制,再用p粘贴。
yy 复制当前整行
nyy 复制当前行开始的n行内容
ayy 将光标当前行复制进寄存器a
ap 将寄存器a中的内容粘贴到光标位置之后。如果a是用yy复制的完整行,则粘贴在光标所在行下面。
aP 将寄存器a中的内容粘贴到光标位置之前。如果a是用yy复制的完整行,则粘贴在光标所在行上面。
ay[motion]
ay$ 复制光标位置到行末并保存在寄存器a中
ayft 复制光标位置到当前行第一个字母t并保存在寄存器a中
以上指令皆可去掉a工作,则y,p对未命名寄存器工作(所有d,c,x,y的对象都被保存在这里)。
剪切/复制/粘贴
所有删除的内容自动被保存,可以用p键粘贴
tips
对代码自动格式化 gg=G
10/10
8
语法为 :[addr]s/源字符串/目的字符串/[option]
全局替换命令为::%s/源字符串/目的字符串/g
[addr] 表示检索范围,省略时表示当前行。
如:“1,20” :表示从第1行到20行;
“%” :表示整个文件,同“1,$”;
“. ,$” :从当前行到文件尾;
s : 表示替换操作
[option] : 表示操作类型
如:g 表示全局替换;
c 表示进行确认
p 表示替代结果逐行显示(Ctrl + L恢复屏幕);
省略option时仅对每行第一个匹配串进行替换;
如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义
下面是一些例子:
#将That or this 换成 This or that
:%s/\(That\) or \(this\)/\u\2 or \l\1/
—-
#将句尾的child换成children
:%s/child\([ ,.;!:?]\)/children\1/g
—-
#将mgi/r/abox换成mgi/r/asquare
:g/mg\([ira]\)box/s//mg//my\1square/g <=> :g/mg[ira]box/s/box/square/g
—-
#将多个空格换成一个空格
:%s/ */ /g
—-
#使用空格替换句号或者冒号后面的一个或者多个空格
:%s/\([:.]\) */\1 /g
—-
#删除所有空行
:g/^$/d
—-
#删除所有的空白行和空行
:g/^[ ][ ]*$/d
—-
#在每行的开始插入两个空白
:%s/^/> /
—-
#在接下来的6行末尾加入.
:.,5/$/./
—-
#颠倒文件的行序
:g/.*/m0O <=> :g/^/m0O
—-
#寻找不是数字的开始行,并将其移到文件尾部
:g!/^[0-9]/m$ <=> g/^[^0-9]/m$
—-
#将文件的第12到17行内容复制10词放到当前文件的尾部
:1,10g/^/12,17t$
~~~~重复次数的作用
—-
#将chapter开始行下面的第二行的内容写道begin文件中
:g/^chapter/.+2w>>begin
—-
:/^part2/,/^part3/g/^chapter/.+2w>>begin
—-
:/^part2/,/^part3/g/^chapter/.+2w>>begin|+t$
:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
n 为数字,若 n 为 .,表示从当前行开始到最后一行
:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/
: s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
删除文本中的^M
问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。
使用命令:cat filename1 | tr -d “^V^M” > newfile;
使用命令:sed -e “s/^V^M//” filename > outputfilename.需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M.你必须要手工进行输入,而不是粘贴。
在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/^V^M//.
:%s/^M$//g
如果上述方法无用,则正确的解决办法是:
tr -d "\r" dest
tr -d "\015" dest
strings A>B
利用 :s 命令可以实现字符串的替换。具体的用法包括:
:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1
:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1
:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1
:g/str1/s//str2/g 功能同上
从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索
字符串的首次出现进行替换:g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
全局替换命令为::%s/源字符串/目的字符串/g
[addr] 表示检索范围,省略时表示当前行。
如:“1,20” :表示从第1行到20行;
“%” :表示整个文件,同“1,$”;
“. ,$” :从当前行到文件尾;
s : 表示替换操作
[option] : 表示操作类型
如:g 表示全局替换;
c 表示进行确认
p 表示替代结果逐行显示(Ctrl + L恢复屏幕);
省略option时仅对每行第一个匹配串进行替换;
如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义
下面是一些例子:
#将That or this 换成 This or that
:%s/\(That\) or \(this\)/\u\2 or \l\1/
—-
#将句尾的child换成children
:%s/child\([ ,.;!:?]\)/children\1/g
—-
#将mgi/r/abox换成mgi/r/asquare
:g/mg\([ira]\)box/s//mg//my\1square/g <=> :g/mg[ira]box/s/box/square/g
—-
#将多个空格换成一个空格
:%s/ */ /g
—-
#使用空格替换句号或者冒号后面的一个或者多个空格
:%s/\([:.]\) */\1 /g
—-
#删除所有空行
:g/^$/d
—-
#删除所有的空白行和空行
:g/^[ ][ ]*$/d
—-
#在每行的开始插入两个空白
:%s/^/> /
—-
#在接下来的6行末尾加入.
:.,5/$/./
—-
#颠倒文件的行序
:g/.*/m0O <=> :g/^/m0O
—-
#寻找不是数字的开始行,并将其移到文件尾部
:g!/^[0-9]/m$ <=> g/^[^0-9]/m$
—-
#将文件的第12到17行内容复制10词放到当前文件的尾部
:1,10g/^/12,17t$
~~~~重复次数的作用
—-
#将chapter开始行下面的第二行的内容写道begin文件中
:g/^chapter/.+2w>>begin
—-
:/^part2/,/^part3/g/^chapter/.+2w>>begin
—-
:/^part2/,/^part3/g/^chapter/.+2w>>begin|+t$
:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
n 为数字,若 n 为 .,表示从当前行开始到最后一行
:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/
: s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
删除文本中的^M
问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。
使用命令:cat filename1 | tr -d “^V^M” > newfile;
使用命令:sed -e “s/^V^M//” filename > outputfilename.需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M.你必须要手工进行输入,而不是粘贴。
在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/^V^M//.
:%s/^M$//g
如果上述方法无用,则正确的解决办法是:
tr -d "\r" dest
tr -d "\015" dest
strings A>B
利用 :s 命令可以实现字符串的替换。具体的用法包括:
:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1
:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1
:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1
:g/str1/s//str2/g 功能同上
从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索
字符串的首次出现进行替换:g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
10/09
30
这是一篇隐藏日志。您需要以合适的身份登入后才能查看。
10/09
29
编号 中文名称 英文名称 面积(平方度) 位置 观看季节 1-2-3-4等星的数目
1 仙女座 Andromeda 722 北面 秋季 0-3-1-11
2 唧筒座 Antlia 239 南面 春季 0-0-0-1
3 天燕座 Apus 206 南面 0-0-0-3
4 宝瓶座 Aquarius 980 天赤附近 秋季 0-0-2-13
5 天鹰座 Aquila 652 天赤附近 夏季 1-0-4-6
6 天坛座 Ara 237 南面 夏季 0-0-3-5
7 白羊座 Aries 441 天赤附近 秋季 0-1-1-2
8 御夫座 Auriga 657 北面 冬季 1-1-4-4
9 牧夫座 Bootes 907 天赤附近 春季 1-0-3-10
10 雕具座 Caelum 125 南面 冬季 0-0-0-0
11 鹿豹座 Camelopardalis 757 北面 冬季 0-0-0-4
12 巨蟹座 Cancer 506 天赤附近 冬季 0-0-0-6
13 猎犬座 Canes Venatici 465 北面 春季 0-0-1-1
14 大犬座 Canis Major 380 天赤附近 冬季 1-4-2-11
15 小犬座 Canis Minor 183 天赤附近 冬季 1-0-1-0
16 摩羯座 Capricornus 414 天赤附近 秋季 0-0-2-7
17 船底座 Carina 494 南面 冬季 1-3-3-18
18 仙后座 Cassiopeia 598 北面 秋季 0-3-2-5
19 半人马座 Centaurus 1060 南面 春季 2-2-8-21
20 仙王座 Cepheus 588 北面 秋季 0-0-3-10
21 鲸鱼座 Cetus 1231 天赤附近 秋季 0-2-1-11
22 蝘蜓座 Chamaeleon 132 南面 0-0-0-4
23 圆规座 Circinus 93 南面 春季 0-0-1-1
24 天鸽座 Columba 270 南面 冬季 0-0-2-4
25 后发座 Coma Berenices 386 天赤附近 春季 0-0-0-2
26 南冕座 Corona Australis 128 南面 夏季 0-0-0-4
27 北冕座 Corona Borealis 179 天赤附近 夏季 0-1-0-4
28 乌鸦座 Corvus 184 天赤附近 春季 0-0-4-2
29 巨爵座 Crater 282 天赤附近 春季 0-0-0-3
30 南十字座 Crux 68 南面 春季 1-2-1-5
31 天鹅座 Cygnus 804 北面 夏季 1-1-4-18
32 海豚座 Delphinus 189 天赤附近 夏季 0-0-0-4
33 剑鱼座 Dorado 179 南面 冬季 0-0-1-2
34 天龙座 Draco 1083 北面 夏季 0-1-5-9
35 小马座 Equuleus 72 天赤附近 秋季 0-0-0-1
36 波江座 Eridanus 1138 天赤附近 冬季 1-0-3-24
37 天炉座 Fornax 398 天赤附近 秋季 0-0-0-1
38 双子座 Gemini 514 天赤附近 冬季 1-2-4-12
39 天鹤座 Grus 366 南面 秋季 0-2-1-6
40 武仙座 Hercules 1225 天赤附近 夏季 0-0-6-19
41 时钟座 Horologium 249 南面 冬季 0-0-0-2
42 长蛇座 Hydra 1303 天赤附近 春季 0-1-5-13
43 水蛇座 Hydrus 243 南面 秋季 0-0-3-2
44 印第安座 Indus 294 南面 秋季 0-0-1-2
45 蝎虎座 Lacerta 201 北面 秋季 0-0-0-2
46 狮子座 Leo 947 天赤附近 春季 1-2-3-12
47 小狮座 Leo Minor 232 天赤附近 春季 0-0-0-3
48 天兔座 Lepus 290 天赤附近 冬季 0-0-4-6
49 天秤座 Libra 538 天赤附近 夏季 0-0-3-4
50 豺狼座 Lupus 334 南面 夏季 0-0-4-16
51 天猫座 Lynx 545 北面 冬季 0-0-1-5
52 天琴座 Lyra 286 北面 夏季 1-0-2-6
53 山案座 Mensa 153 南面 0-0-0-0
54 显微镜座 Microscopium 210 南面 秋季 0-0-0-0
55 麒麟座 Monoceros 482 天赤附近 冬季 0-0-3-6
56 苍蝇座 Musca 138 南面 0-0-2-4
57 矩尺座 Norma 165 南面 夏季 0-0-0-1
58 南极座 Octans 291 南面 0-0-0-3
59 蛇夫座 Ophiuchus 948 天赤附近 夏季 0-1-7-15
60 猎户座 Orion 594 天赤附近 冬季 2-5-3-15
61 孔雀座 Pavo 378 南面 夏季 0-1-0-10
62 飞马座 Pegasus 1121 天赤附近 秋季 0-1-4-9
63 英仙座 Perseus 615 北面 冬季 0-2-5-15
64 凤凰座 Phoenix 469 南面 秋季 0-1-2-5
65 绘架座 Pictor 247 南面 冬季 0-0-1-2
66 双鱼座 Pisces 889 天赤附近 秋季 0-0-0-7
67 南鱼座 Piscis Austrinus 245 天赤附近 秋季 1-0-0-5
68 船尾座 Puppis 673 天赤附近 冬季 0-1-7-13
69 罗盘座 Pyxis 221 天赤附近 春季 0-0-0-3
70 网罟座 Reticulum 114 南面 冬季 0-0-1-4
71 天箭座 Sagitta 80 天赤附近 夏季 0-0-0-4
72 人马座 Sagittarius 867 天赤附近 夏季 0-2-8-10
73 天蝎座 Scorpius 497 天赤附近 夏季 1-3-10-10
74 玉夫座 Sculptor 475 天赤附近 秋季 0-0-0-2
75 盾牌座 Scutum 109 天赤附近 夏季 0-0-0-2
76a 巨蛇座 (头) Serpens 637 天赤附近 夏季 0-0-0-12
76b 巨蛇座 (尾) Sextans 314 天赤附近 春季 0-0-0-0
77 六分仪座 Taurus 797 天赤附近 冬季 1-1-2-23
78 金牛座 Telescopium 252 南面 夏季 0-0-0-2
79 望远镜座 Triangulum 132 天赤附近 秋季 0-0-1-2
80 三角座 Triangulum Austale 110 南面 夏季 0-1-1-2
81 南三角 Tucana 295 南面 秋季 0-0-1-3
82 杜鹃座 Ursa Major 1280 北面 春季 0-5-7-8
83 大熊座 Ursa Minor 256 北面 夏季 0-2-1-4
84 小熊座 Vela 500 南面 春季 0-3-2-14
85 船帆座 Virgo 1294 天赤附近 春季 1-0-3-11
86 室女座 Volans 141 南面 0-0-0-6
87 飞鱼座 Vulpecula 268 天赤附近 夏季 0-0-0-0
1 仙女座 Andromeda 722 北面 秋季 0-3-1-11
2 唧筒座 Antlia 239 南面 春季 0-0-0-1
3 天燕座 Apus 206 南面 0-0-0-3
4 宝瓶座 Aquarius 980 天赤附近 秋季 0-0-2-13
5 天鹰座 Aquila 652 天赤附近 夏季 1-0-4-6
6 天坛座 Ara 237 南面 夏季 0-0-3-5
7 白羊座 Aries 441 天赤附近 秋季 0-1-1-2
8 御夫座 Auriga 657 北面 冬季 1-1-4-4
9 牧夫座 Bootes 907 天赤附近 春季 1-0-3-10
10 雕具座 Caelum 125 南面 冬季 0-0-0-0
11 鹿豹座 Camelopardalis 757 北面 冬季 0-0-0-4
12 巨蟹座 Cancer 506 天赤附近 冬季 0-0-0-6
13 猎犬座 Canes Venatici 465 北面 春季 0-0-1-1
14 大犬座 Canis Major 380 天赤附近 冬季 1-4-2-11
15 小犬座 Canis Minor 183 天赤附近 冬季 1-0-1-0
16 摩羯座 Capricornus 414 天赤附近 秋季 0-0-2-7
17 船底座 Carina 494 南面 冬季 1-3-3-18
18 仙后座 Cassiopeia 598 北面 秋季 0-3-2-5
19 半人马座 Centaurus 1060 南面 春季 2-2-8-21
20 仙王座 Cepheus 588 北面 秋季 0-0-3-10
21 鲸鱼座 Cetus 1231 天赤附近 秋季 0-2-1-11
22 蝘蜓座 Chamaeleon 132 南面 0-0-0-4
23 圆规座 Circinus 93 南面 春季 0-0-1-1
24 天鸽座 Columba 270 南面 冬季 0-0-2-4
25 后发座 Coma Berenices 386 天赤附近 春季 0-0-0-2
26 南冕座 Corona Australis 128 南面 夏季 0-0-0-4
27 北冕座 Corona Borealis 179 天赤附近 夏季 0-1-0-4
28 乌鸦座 Corvus 184 天赤附近 春季 0-0-4-2
29 巨爵座 Crater 282 天赤附近 春季 0-0-0-3
30 南十字座 Crux 68 南面 春季 1-2-1-5
31 天鹅座 Cygnus 804 北面 夏季 1-1-4-18
32 海豚座 Delphinus 189 天赤附近 夏季 0-0-0-4
33 剑鱼座 Dorado 179 南面 冬季 0-0-1-2
34 天龙座 Draco 1083 北面 夏季 0-1-5-9
35 小马座 Equuleus 72 天赤附近 秋季 0-0-0-1
36 波江座 Eridanus 1138 天赤附近 冬季 1-0-3-24
37 天炉座 Fornax 398 天赤附近 秋季 0-0-0-1
38 双子座 Gemini 514 天赤附近 冬季 1-2-4-12
39 天鹤座 Grus 366 南面 秋季 0-2-1-6
40 武仙座 Hercules 1225 天赤附近 夏季 0-0-6-19
41 时钟座 Horologium 249 南面 冬季 0-0-0-2
42 长蛇座 Hydra 1303 天赤附近 春季 0-1-5-13
43 水蛇座 Hydrus 243 南面 秋季 0-0-3-2
44 印第安座 Indus 294 南面 秋季 0-0-1-2
45 蝎虎座 Lacerta 201 北面 秋季 0-0-0-2
46 狮子座 Leo 947 天赤附近 春季 1-2-3-12
47 小狮座 Leo Minor 232 天赤附近 春季 0-0-0-3
48 天兔座 Lepus 290 天赤附近 冬季 0-0-4-6
49 天秤座 Libra 538 天赤附近 夏季 0-0-3-4
50 豺狼座 Lupus 334 南面 夏季 0-0-4-16
51 天猫座 Lynx 545 北面 冬季 0-0-1-5
52 天琴座 Lyra 286 北面 夏季 1-0-2-6
53 山案座 Mensa 153 南面 0-0-0-0
54 显微镜座 Microscopium 210 南面 秋季 0-0-0-0
55 麒麟座 Monoceros 482 天赤附近 冬季 0-0-3-6
56 苍蝇座 Musca 138 南面 0-0-2-4
57 矩尺座 Norma 165 南面 夏季 0-0-0-1
58 南极座 Octans 291 南面 0-0-0-3
59 蛇夫座 Ophiuchus 948 天赤附近 夏季 0-1-7-15
60 猎户座 Orion 594 天赤附近 冬季 2-5-3-15
61 孔雀座 Pavo 378 南面 夏季 0-1-0-10
62 飞马座 Pegasus 1121 天赤附近 秋季 0-1-4-9
63 英仙座 Perseus 615 北面 冬季 0-2-5-15
64 凤凰座 Phoenix 469 南面 秋季 0-1-2-5
65 绘架座 Pictor 247 南面 冬季 0-0-1-2
66 双鱼座 Pisces 889 天赤附近 秋季 0-0-0-7
67 南鱼座 Piscis Austrinus 245 天赤附近 秋季 1-0-0-5
68 船尾座 Puppis 673 天赤附近 冬季 0-1-7-13
69 罗盘座 Pyxis 221 天赤附近 春季 0-0-0-3
70 网罟座 Reticulum 114 南面 冬季 0-0-1-4
71 天箭座 Sagitta 80 天赤附近 夏季 0-0-0-4
72 人马座 Sagittarius 867 天赤附近 夏季 0-2-8-10
73 天蝎座 Scorpius 497 天赤附近 夏季 1-3-10-10
74 玉夫座 Sculptor 475 天赤附近 秋季 0-0-0-2
75 盾牌座 Scutum 109 天赤附近 夏季 0-0-0-2
76a 巨蛇座 (头) Serpens 637 天赤附近 夏季 0-0-0-12
76b 巨蛇座 (尾) Sextans 314 天赤附近 春季 0-0-0-0
77 六分仪座 Taurus 797 天赤附近 冬季 1-1-2-23
78 金牛座 Telescopium 252 南面 夏季 0-0-0-2
79 望远镜座 Triangulum 132 天赤附近 秋季 0-0-1-2
80 三角座 Triangulum Austale 110 南面 夏季 0-1-1-2
81 南三角 Tucana 295 南面 秋季 0-0-1-3
82 杜鹃座 Ursa Major 1280 北面 春季 0-5-7-8
83 大熊座 Ursa Minor 256 北面 夏季 0-2-1-4
84 小熊座 Vela 500 南面 春季 0-3-2-14
85 船帆座 Virgo 1294 天赤附近 春季 1-0-3-11
86 室女座 Volans 141 南面 0-0-0-6
87 飞鱼座 Vulpecula 268 天赤附近 夏季 0-0-0-0
10/08
28
http://forum.ubuntu.org.cn/viewtopic.php?t=20852
首先当然是要安装samba了,呵呵:
代码:
sudo apt-get install samba
sudo apt-get install smbfs
下面我们来共享群组可读写文件夹,假设你要共享的文件夹为: /home/ray/share
首先创建这个文件夹
代码:
mkdir /home/ray/share
chmod 777 /home/ray/share
备份并编辑smb.conf允许网络用户访问
代码:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
sudo gedit /etc/samba/smb.conf
搜寻这一行文字
代码:
; security = user
用下面这几行取代
代码:
security = user
username map = /etc/samba/smbusers
将下列几行新增到文件的最后面,假设允许访问的用户为:newsfan。而文件夹的共享名为 Share
代码:
[Share]
comment = Shared Folder with username and password
path = /home/ray/share
public = yes
writable = yes
valid users = newsfan
create mask = 0700
directory mask = 0700
force user = nobody
force group = nogroup
available = yes
browseable = yes
然后顺便把这里改一下,找到[global]把 workgroup = MSHOME 改成
代码:
workgroup = WORKGROUP
display charset = UTF-8
unix charset = UTF-8
dos charset = cp936
后面的三行是为了防止出现中文目录乱码的情况。其中根据你的local,UTF-8 有可能需要改成 cp936。自己看着办吧。
现在要添加newsfan这个网络访问帐户。如果系统中当前没有这个帐户,那么
代码:
sudo useradd newsfan
要注意,上面只是增加了newsfan这个用户,却没有给用户赋予本机登录密码。所以这个用户将只能从远程访问,不能从本机登录。而且samba的登录密码可以和本机登录密码不一样。
现在要新增网络使用者的帐号:
代码:
sudo smbpasswd -a newsfan
sudo gedit /etc/samba/smbusers
在新建立的文件内加入下面这一行并保存
代码:
newsfan = "network username"
如果将来需要更改newsfan的网络访问密码,也用这个命令更改
代码:
sudo smbpasswd -a newsfan
删除网络使用者的帐号的命令把上面的 -a 改成 -x
代码:
sudo testparm
sudo /etc/init.d/samba restart
最后退出重新登录或者重新启动一下机器。
首先当然是要安装samba了,呵呵:
代码:
sudo apt-get install samba
sudo apt-get install smbfs
下面我们来共享群组可读写文件夹,假设你要共享的文件夹为: /home/ray/share
首先创建这个文件夹
代码:
mkdir /home/ray/share
chmod 777 /home/ray/share
备份并编辑smb.conf允许网络用户访问
代码:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
sudo gedit /etc/samba/smb.conf
搜寻这一行文字
代码:
; security = user
用下面这几行取代
代码:
security = user
username map = /etc/samba/smbusers
将下列几行新增到文件的最后面,假设允许访问的用户为:newsfan。而文件夹的共享名为 Share
代码:
[Share]
comment = Shared Folder with username and password
path = /home/ray/share
public = yes
writable = yes
valid users = newsfan
create mask = 0700
directory mask = 0700
force user = nobody
force group = nogroup
available = yes
browseable = yes
然后顺便把这里改一下,找到[global]把 workgroup = MSHOME 改成
代码:
workgroup = WORKGROUP
display charset = UTF-8
unix charset = UTF-8
dos charset = cp936
后面的三行是为了防止出现中文目录乱码的情况。其中根据你的local,UTF-8 有可能需要改成 cp936。自己看着办吧。
现在要添加newsfan这个网络访问帐户。如果系统中当前没有这个帐户,那么
代码:
sudo useradd newsfan
要注意,上面只是增加了newsfan这个用户,却没有给用户赋予本机登录密码。所以这个用户将只能从远程访问,不能从本机登录。而且samba的登录密码可以和本机登录密码不一样。
现在要新增网络使用者的帐号:
代码:
sudo smbpasswd -a newsfan
sudo gedit /etc/samba/smbusers
在新建立的文件内加入下面这一行并保存
代码:
newsfan = "network username"
如果将来需要更改newsfan的网络访问密码,也用这个命令更改
代码:
sudo smbpasswd -a newsfan
删除网络使用者的帐号的命令把上面的 -a 改成 -x
代码:
sudo testparm
sudo /etc/init.d/samba restart
最后退出重新登录或者重新启动一下机器。
10/08
26
开发人员常用命令
(1) 导入项目
$ cd ~/project
$ mkdir -p svntest/{trunk,branches,tags}
$ svn import svntest https://localhost/test/svntest --username jasonyu --message "Start project"
...
$ rm -rf svntest
我们新建一个项目svntest,在该项目下新建三个子目录:trunk,开发主干;branches,开发分支;tags,开发阶段性标签。然后导入到版本库test下,然后把svntest拿掉。
(2) 导出项目
$ svn checkout https://localhost/test/svntest/trunk
或
$ svn co https://localhost/test/svntest/trunk svntest
修订版本号的指定方式是每个开发人员必须了解的,以下是几个参考例子,说明可参考svn推荐书。
$ svn diff --revision PREV:COMMITTED foo.c
# shows the last change committed to foo.c
$ svn log --revision HEAD
# shows log message for the latest repository commit
$ svn diff --revision HEAD
# compares your working file (with local changes) to the latest version
# in the repository
$ svn diff --revision BASE:HEAD foo.c
# compares your “pristine” foo.c (no local changes) with the
# latest version in the repository
$ svn log --revision BASE:HEAD
# shows all commit logs since you last updated
$ svn update --revision PREV foo.c
# rewinds the last change on foo.c
# (foo.c's working revision is decreased)
$ svn checkout --revision 3
# specified with revision number
$ svn checkout --revision {2002-02-17}
$ svn checkout --revision {15:30}
$ svn checkout --revision {15:30:00.200000}
$ svn checkout --revision {"2002-02-17 15:30"}
$ svn checkout --revision {"2002-02-17 15:30 +0230"}
$ svn checkout --revision {2002-02-17T15:30}
$ svn checkout --revision {2002-02-17T15:30Z}
$ svn checkout --revision {2002-02-17T15:30-04:00}
$ svn checkout --revision {20020217T1530}
$ svn checkout --revision {20020217T1530Z}
$ svn checkout --revision {20020217T1530-0500}
(3) 日常指令
$ svn update
$ svn add foo.file
$ svn add foo1.dir
$ svn add foo2.dir --non-recursive
$ svn delete README
$ svn copy foo bar
$ svn move foo1 bar1
$ svn status
$ svn status --verbose
$ svn status --verbose --show-updates
$ svn status stuff/fox.c
$ svn diff
$ svn diff > patchfile
$ svn revert README
$ svn revert
修改冲突发生时,会生成三个文件:.mine, .rOLDREV, .rNEWREV。比如:
$ ls -l
sandwich.txt
sandwich.txt.mine
sandwich.txt.r1
sandwich.txt.r2
解决修改冲突方式之一:修改冲突的文件sandwich.txt,然后运行命令:
$ svn resolved sandwich.txt
方式之二:用库里的新版本覆盖你的修改:
$ cp sandwich.txt.r2 sandwich.txt
$ svn resolved sandwich.txt
方式之三:撤销你的修改,这种方式不需要运行resolved子命令:
$ svn revert sandwich.txt
Reverted 'sandwich.txt'
$ ls sandwich.*
sandwich.txt
确保没问题后,就可以提交了。
$ svn commit --message "Correct some fatal problems"
$ svn commit --file logmsg
$ svn commit
(4) 检验版本历史
$ svn log
$ svn log --revision 5:19
$ svn log foo.c
$ svn log -r 8 -v
$ svn diff
$ svn diff --revision 3 rules.txt
$ svn diff --revision 2:3 rules.txt
$ svn diff --revision 4:5 http://svn.red-bean.com/repos/example/trunk/text/rules.txt
$ svn cat --revision 2 rules.txt
$ svn cat --revision 2 rules.txt > rules.txt.v2
$ svn list http://svn.collab.net/repos/svn
$ svn list --verbose http://svn.collab.net/repos/svn
$ svn checkout --revision 1729 # Checks out a new working copy at r1729
…
$ svn update --revision 1729 # Updates an existing working copy to r1729
…
(5) 其他有用的命令
svn cleanup
为失败的事务清场。
(6) 分支和合并
建立分支方法一:先checkout然后做拷贝,最后提交拷贝。
$ svn checkout http://svn.example.com/repos/calc bigwc
A bigwc/trunk/
A bigwc/trunk/Makefile
A bigwc/trunk/integer.c
A bigwc/trunk/button.c
A bigwc/branches/
Checked out revision 340.
$ cd bigwc
$ svn copy trunk branches/my-calc-branch
$ svn status
A + branches/my-calc-branch
$ svn commit -m "Creating a private branch of /calc/trunk."
Adding branches/my-calc-branch
Committed revision 341.
建立分支方法二:直接远程拷贝。
$ svn copy http://svn.example.com/repos/calc/trunk \
http://svn.example.com/repos/calc/branches/my-calc-branch \
-m "Creating a private branch of /calc/trunk."
Committed revision 341.
建立分支后,你可以把分支checkout并继续你的开发。
$ svn checkout http://svn.example.com/repos/calc/branches/my-calc-branch
假设你已经checkout了主干,现在想切换到某个分支开发,可做如下的操作:
$ cd calc
$ svn info | grep URL
URL: http://svn.example.com/repos/calc/trunk
$ svn switch http://svn.example.com/repos/calc/branches/my-calc-branch
U integer.c
U button.c
U Makefile
Updated to revision 341.
$ svn info | grep URL
URL: http://svn.example.com/repos/calc/branches/my-calc-branch
合并文件的命令参考:
$ svn diff -r 343:344 http://svn.example.com/repos/calc/trunk
$ svn merge -r 343:344 http://svn.example.com/repos/calc/trunk
$ svn commit -m "integer.c: ported r344 (spelling fixes) from trunk."
$ svn merge -r 343:344 http://svn.example.com/repos/calc/trunk my-calc-branch
$ svn merge http://svn.example.com/repos/branch1@150 \
http://svn.example.com/repos/branch2@212 \
my-working-copy
$ svn merge -r 100:200 http://svn.example.com/repos/trunk my-working-copy
$ svn merge -r 100:200 http://svn.example.com/repos/trunk
$ svn merge --dry-run -r 343:344 http://svn.example.com/repos/calc/trunk
最后一条命令仅仅做合并测试,并不执行合并操作。
建立标签和建立分支没什么区别,不过是拷贝到不同的目录而已。
$ svn copy http://svn.example.com/repos/calc/trunk \
http://svn.example.com/repos/calc/tags/release-1.0 \
-m "Tagging the 1.0 release of the 'calc' project."
$ ls
my-working-copy/
$ svn copy my-working-copy http://svn.example.com/repos/calc/tags/mytag
Committed revision 352.
后一种方式直接把本地的工作拷贝复制为标签。
此外,你还可以删除某个分支。
$ svn delete http://svn.example.com/repos/calc/branches/my-calc-branch \
-m "Removing obsolete branch of calc project."
管理人员常用命令
(7) 版本库管理
$ svnadmin help
...
$ svnadmin help create
...
$ svnadmin create --fs-type bdb /usr/local/repository/svn/test
$ chown -R svn.svn /usr/local/repository/svn/test
建立版本库,库类型为bdb(使用Berkeley DB做仓库),库名称为test。
svn版本库有两种存储方式:基于Berkeley DB(bdb)或者基于文件系统(fsfs),通过 --fs-type可指定存储方式。
(8) 查询版本库信息
$ svnlook help
...
$ svnlook help tree
...
$ svnlook tree /usr/local/repository/svn/test --show-ids
...
更详细的命令,请参考SVN官方推荐的书(http://svnbook.red-bean.com/)。这本书有中译版,而且是免费的。
(1) 导入项目
$ cd ~/project
$ mkdir -p svntest/{trunk,branches,tags}
$ svn import svntest https://localhost/test/svntest --username jasonyu --message "Start project"
...
$ rm -rf svntest
我们新建一个项目svntest,在该项目下新建三个子目录:trunk,开发主干;branches,开发分支;tags,开发阶段性标签。然后导入到版本库test下,然后把svntest拿掉。
(2) 导出项目
$ svn checkout https://localhost/test/svntest/trunk
或
$ svn co https://localhost/test/svntest/trunk svntest
修订版本号的指定方式是每个开发人员必须了解的,以下是几个参考例子,说明可参考svn推荐书。
$ svn diff --revision PREV:COMMITTED foo.c
# shows the last change committed to foo.c
$ svn log --revision HEAD
# shows log message for the latest repository commit
$ svn diff --revision HEAD
# compares your working file (with local changes) to the latest version
# in the repository
$ svn diff --revision BASE:HEAD foo.c
# compares your “pristine” foo.c (no local changes) with the
# latest version in the repository
$ svn log --revision BASE:HEAD
# shows all commit logs since you last updated
$ svn update --revision PREV foo.c
# rewinds the last change on foo.c
# (foo.c's working revision is decreased)
$ svn checkout --revision 3
# specified with revision number
$ svn checkout --revision {2002-02-17}
$ svn checkout --revision {15:30}
$ svn checkout --revision {15:30:00.200000}
$ svn checkout --revision {"2002-02-17 15:30"}
$ svn checkout --revision {"2002-02-17 15:30 +0230"}
$ svn checkout --revision {2002-02-17T15:30}
$ svn checkout --revision {2002-02-17T15:30Z}
$ svn checkout --revision {2002-02-17T15:30-04:00}
$ svn checkout --revision {20020217T1530}
$ svn checkout --revision {20020217T1530Z}
$ svn checkout --revision {20020217T1530-0500}
(3) 日常指令
$ svn update
$ svn add foo.file
$ svn add foo1.dir
$ svn add foo2.dir --non-recursive
$ svn delete README
$ svn copy foo bar
$ svn move foo1 bar1
$ svn status
$ svn status --verbose
$ svn status --verbose --show-updates
$ svn status stuff/fox.c
$ svn diff
$ svn diff > patchfile
$ svn revert README
$ svn revert
修改冲突发生时,会生成三个文件:.mine, .rOLDREV, .rNEWREV。比如:
$ ls -l
sandwich.txt
sandwich.txt.mine
sandwich.txt.r1
sandwich.txt.r2
解决修改冲突方式之一:修改冲突的文件sandwich.txt,然后运行命令:
$ svn resolved sandwich.txt
方式之二:用库里的新版本覆盖你的修改:
$ cp sandwich.txt.r2 sandwich.txt
$ svn resolved sandwich.txt
方式之三:撤销你的修改,这种方式不需要运行resolved子命令:
$ svn revert sandwich.txt
Reverted 'sandwich.txt'
$ ls sandwich.*
sandwich.txt
确保没问题后,就可以提交了。
$ svn commit --message "Correct some fatal problems"
$ svn commit --file logmsg
$ svn commit
(4) 检验版本历史
$ svn log
$ svn log --revision 5:19
$ svn log foo.c
$ svn log -r 8 -v
$ svn diff
$ svn diff --revision 3 rules.txt
$ svn diff --revision 2:3 rules.txt
$ svn diff --revision 4:5 http://svn.red-bean.com/repos/example/trunk/text/rules.txt
$ svn cat --revision 2 rules.txt
$ svn cat --revision 2 rules.txt > rules.txt.v2
$ svn list http://svn.collab.net/repos/svn
$ svn list --verbose http://svn.collab.net/repos/svn
$ svn checkout --revision 1729 # Checks out a new working copy at r1729
…
$ svn update --revision 1729 # Updates an existing working copy to r1729
…
(5) 其他有用的命令
svn cleanup
为失败的事务清场。
(6) 分支和合并
建立分支方法一:先checkout然后做拷贝,最后提交拷贝。
$ svn checkout http://svn.example.com/repos/calc bigwc
A bigwc/trunk/
A bigwc/trunk/Makefile
A bigwc/trunk/integer.c
A bigwc/trunk/button.c
A bigwc/branches/
Checked out revision 340.
$ cd bigwc
$ svn copy trunk branches/my-calc-branch
$ svn status
A + branches/my-calc-branch
$ svn commit -m "Creating a private branch of /calc/trunk."
Adding branches/my-calc-branch
Committed revision 341.
建立分支方法二:直接远程拷贝。
$ svn copy http://svn.example.com/repos/calc/trunk \
http://svn.example.com/repos/calc/branches/my-calc-branch \
-m "Creating a private branch of /calc/trunk."
Committed revision 341.
建立分支后,你可以把分支checkout并继续你的开发。
$ svn checkout http://svn.example.com/repos/calc/branches/my-calc-branch
假设你已经checkout了主干,现在想切换到某个分支开发,可做如下的操作:
$ cd calc
$ svn info | grep URL
URL: http://svn.example.com/repos/calc/trunk
$ svn switch http://svn.example.com/repos/calc/branches/my-calc-branch
U integer.c
U button.c
U Makefile
Updated to revision 341.
$ svn info | grep URL
URL: http://svn.example.com/repos/calc/branches/my-calc-branch
合并文件的命令参考:
$ svn diff -r 343:344 http://svn.example.com/repos/calc/trunk
$ svn merge -r 343:344 http://svn.example.com/repos/calc/trunk
$ svn commit -m "integer.c: ported r344 (spelling fixes) from trunk."
$ svn merge -r 343:344 http://svn.example.com/repos/calc/trunk my-calc-branch
$ svn merge http://svn.example.com/repos/branch1@150 \
http://svn.example.com/repos/branch2@212 \
my-working-copy
$ svn merge -r 100:200 http://svn.example.com/repos/trunk my-working-copy
$ svn merge -r 100:200 http://svn.example.com/repos/trunk
$ svn merge --dry-run -r 343:344 http://svn.example.com/repos/calc/trunk
最后一条命令仅仅做合并测试,并不执行合并操作。
建立标签和建立分支没什么区别,不过是拷贝到不同的目录而已。
$ svn copy http://svn.example.com/repos/calc/trunk \
http://svn.example.com/repos/calc/tags/release-1.0 \
-m "Tagging the 1.0 release of the 'calc' project."
$ ls
my-working-copy/
$ svn copy my-working-copy http://svn.example.com/repos/calc/tags/mytag
Committed revision 352.
后一种方式直接把本地的工作拷贝复制为标签。
此外,你还可以删除某个分支。
$ svn delete http://svn.example.com/repos/calc/branches/my-calc-branch \
-m "Removing obsolete branch of calc project."
管理人员常用命令
(7) 版本库管理
$ svnadmin help
...
$ svnadmin help create
...
$ svnadmin create --fs-type bdb /usr/local/repository/svn/test
$ chown -R svn.svn /usr/local/repository/svn/test
建立版本库,库类型为bdb(使用Berkeley DB做仓库),库名称为test。
svn版本库有两种存储方式:基于Berkeley DB(bdb)或者基于文件系统(fsfs),通过 --fs-type可指定存储方式。
(8) 查询版本库信息
$ svnlook help
...
$ svnlook help tree
...
$ svnlook tree /usr/local/repository/svn/test --show-ids
...
更详细的命令,请参考SVN官方推荐的书(http://svnbook.red-bean.com/)。这本书有中译版,而且是免费的。
10/08
25
10/08
24
SIGHUP 终止进程 终端线路挂断
SIGINT 终止进程 中断进程
SIGQUIT 建立CORE文件终止进程,并且生成core文件
SIGILL 建立CORE文件 非法指令
SIGTRAP 建立CORE文件 跟踪自陷
SIGBUS 建立CORE文件 总线错误
SIGSEGV 建立CORE文件 段非法错误
SIGFPE 建立CORE文件 浮点异常
SIGIOT 建立CORE文件 执行I/O自陷
SIGKILL 终止进程 杀死进程
SIGPIPE 终止进程 向一个没有读进程的管道写数据
SIGALARM 终止进程 计时器到时
SIGTERM 终止进程 软件终止信号
SIGSTOP 停止进程 非终端来的停止信号
SIGTSTP 停止进程 终端来的停止信号
SIGCONT 忽略信号 继续执行一个停止的进程
SIGURG 忽略信号 I/O紧急信号
SIGIO 忽略信号 描述符上可以进行I/O
SIGCHLD 忽略信号 当子进程停止或退出时通知父进程
SIGTTOU 停止进程 后台进程写终端
SIGTTIN 停止进程 后台进程读终端
SIGXGPU 终止进程 CPU时限超时
SIGXFSZ 终止进程 文件长度过长
SIGWINCH 忽略信号 窗口大小发生变化
SIGPROF 终止进程 统计分布图用计时器到时
SIGUSR1 终止进程 用户定义信号1
SIGUSR2 终止进程 用户定义信号2
SIGVTALRM 终止进程 虚拟计时器到时
1) SIGHUP 本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控
制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端
不再关联.
2) SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出
3) SIGQUIT 和SIGINT类似, 但由QUIT字符(通常是Ctrl-)来控制. 进程在因收到
SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信
号.
4) SIGILL 执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行
数据段. 堆栈溢出时也有可能产生这个信号.
5) SIGTRAP 由断点指令或其它trap指令产生. 由debugger使用.
6) SIGABRT 程序自己发现错误并调用abort时产生.
6) SIGIOT 在PDP-11上由iot指令产生, 在其它机器上和SIGABRT一样.
7) SIGBUS 非法地址, 包括内存地址对齐(alignment)出错. eg: 访问一个四个字长
的整数, 但其地址不是4的倍数.
8) SIGFPE 在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢
出及除数为0等其它所有的算术的错误.
9) SIGKILL 用来立即结束程序的运行. 本信号不能被阻塞, 处理和忽略.
10) SIGUSR1 留给用户使用
11) SIGSEGV 试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据.
12) SIGUSR2 留给用户使用
13) SIGPIPE Broken pipe
14) SIGALRM 时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使用该
信号.
15) SIGTERM 程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和
处理. 通常用来要求程序自己正常退出. shell命令kill缺省产生这
个信号.
17) SIGCHLD 子进程结束时, 父进程会收到这个信号.
18) SIGCONT 让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用
一个handler来让程序在由stopped状态变为继续执行时完成特定的
工作. 例如, 重新显示提示符
19) SIGSTOP 停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:
该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.
20) SIGTSTP 停止进程的运行, 但该信号可以被处理和忽略. 用户键入SUSP字符时
(通常是Ctrl-Z)发出这个信号
21) SIGTTIN 当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN
信号. 缺省时这些进程会停止执行.
22) SIGTTOU 类似于SIGTTIN, 但在写终端(或修改终端模式)时收到.
23) SIGURG 有"紧急"数据或out-of-band数据到达socket时产生.
24) SIGXCPU 超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/
改变
25) SIGXFSZ 超过文件大小资源限制.
26) SIGVTALRM 虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间.
27) SIGPROF 类似于SIGALRM/SIGVTALRM, 但包括该进程用的CPU时间以及系统调用的
时间.
28) SIGWINCH 窗口大小改变时发出.
29) SIGIO 文件描述符准备就绪, 可以开始进行输入/输出操作.
30) SIGPWR Power failure
有两个信号可以停止进程:SIGTERM和SIGKILL。 SIGTERM比较友好,进程能捕捉这个信号,根据您的需要来关闭程序。在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务。在某些情况下,假如进程正在进行作业而且不能中断,那么进程可以忽略这个SIGTERM信号。
对于SIGKILL信号,进程是不能忽略的。这是一个 “我不管您在做什么,立刻停止”的信号。假如您发送SIGKILL信号给进程,Linux就将进程停止在那里。
SIGINT 终止进程 中断进程
SIGQUIT 建立CORE文件终止进程,并且生成core文件
SIGILL 建立CORE文件 非法指令
SIGTRAP 建立CORE文件 跟踪自陷
SIGBUS 建立CORE文件 总线错误
SIGSEGV 建立CORE文件 段非法错误
SIGFPE 建立CORE文件 浮点异常
SIGIOT 建立CORE文件 执行I/O自陷
SIGKILL 终止进程 杀死进程
SIGPIPE 终止进程 向一个没有读进程的管道写数据
SIGALARM 终止进程 计时器到时
SIGTERM 终止进程 软件终止信号
SIGSTOP 停止进程 非终端来的停止信号
SIGTSTP 停止进程 终端来的停止信号
SIGCONT 忽略信号 继续执行一个停止的进程
SIGURG 忽略信号 I/O紧急信号
SIGIO 忽略信号 描述符上可以进行I/O
SIGCHLD 忽略信号 当子进程停止或退出时通知父进程
SIGTTOU 停止进程 后台进程写终端
SIGTTIN 停止进程 后台进程读终端
SIGXGPU 终止进程 CPU时限超时
SIGXFSZ 终止进程 文件长度过长
SIGWINCH 忽略信号 窗口大小发生变化
SIGPROF 终止进程 统计分布图用计时器到时
SIGUSR1 终止进程 用户定义信号1
SIGUSR2 终止进程 用户定义信号2
SIGVTALRM 终止进程 虚拟计时器到时
1) SIGHUP 本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控
制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端
不再关联.
2) SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出
3) SIGQUIT 和SIGINT类似, 但由QUIT字符(通常是Ctrl-)来控制. 进程在因收到
SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信
号.
4) SIGILL 执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行
数据段. 堆栈溢出时也有可能产生这个信号.
5) SIGTRAP 由断点指令或其它trap指令产生. 由debugger使用.
6) SIGABRT 程序自己发现错误并调用abort时产生.
6) SIGIOT 在PDP-11上由iot指令产生, 在其它机器上和SIGABRT一样.
7) SIGBUS 非法地址, 包括内存地址对齐(alignment)出错. eg: 访问一个四个字长
的整数, 但其地址不是4的倍数.
8) SIGFPE 在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢
出及除数为0等其它所有的算术的错误.
9) SIGKILL 用来立即结束程序的运行. 本信号不能被阻塞, 处理和忽略.
10) SIGUSR1 留给用户使用
11) SIGSEGV 试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据.
12) SIGUSR2 留给用户使用
13) SIGPIPE Broken pipe
14) SIGALRM 时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使用该
信号.
15) SIGTERM 程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和
处理. 通常用来要求程序自己正常退出. shell命令kill缺省产生这
个信号.
17) SIGCHLD 子进程结束时, 父进程会收到这个信号.
18) SIGCONT 让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用
一个handler来让程序在由stopped状态变为继续执行时完成特定的
工作. 例如, 重新显示提示符
19) SIGSTOP 停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:
该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.
20) SIGTSTP 停止进程的运行, 但该信号可以被处理和忽略. 用户键入SUSP字符时
(通常是Ctrl-Z)发出这个信号
21) SIGTTIN 当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN
信号. 缺省时这些进程会停止执行.
22) SIGTTOU 类似于SIGTTIN, 但在写终端(或修改终端模式)时收到.
23) SIGURG 有"紧急"数据或out-of-band数据到达socket时产生.
24) SIGXCPU 超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/
改变
25) SIGXFSZ 超过文件大小资源限制.
26) SIGVTALRM 虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间.
27) SIGPROF 类似于SIGALRM/SIGVTALRM, 但包括该进程用的CPU时间以及系统调用的
时间.
28) SIGWINCH 窗口大小改变时发出.
29) SIGIO 文件描述符准备就绪, 可以开始进行输入/输出操作.
30) SIGPWR Power failure
有两个信号可以停止进程:SIGTERM和SIGKILL。 SIGTERM比较友好,进程能捕捉这个信号,根据您的需要来关闭程序。在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务。在某些情况下,假如进程正在进行作业而且不能中断,那么进程可以忽略这个SIGTERM信号。
对于SIGKILL信号,进程是不能忽略的。这是一个 “我不管您在做什么,立刻停止”的信号。假如您发送SIGKILL信号给进程,Linux就将进程停止在那里。





