2008-08-29

vi全局替换命令(转)

语法为 :[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$

2008-08-27

几条不重启服务器重新加载配置文件的命令(转)

1、IPFILTER
命令:/sbin/ipf -Fa -f /etc/ipf.conf          //ipf.conf为ipf的配置文件,视你的具体情况而定

2、IPNAT
命令:/sbin/ipnat -CF -f /etc/ipnat.conf      //ipnat.conf为ipnat的配置文件,视你的具体情况而定

3、Squid
命令:/usr/local/squid/sbin/squid -k reconfigure

4、重新加载rc.conf
命令:
第一种:
# cd /etc 
# sh rc
第二种:
# /etc/netstart

5、重新加载inetd(超级服务器)

# /etc/rc.d/inetd reload

2008-08-25

SVN + apache + mysql认证

为了让svn能够利用apache2模块启动,所以需要在apache中加入
mod_dav

另外,为了实现数据库认证,还需要增加两个模块给apache2:

LoadModule authn_dbd_module  libexec/apache22/mod_authn_dbd.so
LoadModule dbd_module  libexec/apache22/mod_dbd.so

OK
搞定了apache之后,开始编译svn的port。只需要mod_dav和apache_apr两个模块就行了。

之后的在 ..../etc/apache22/Include目录下添加svn.conf

# mod_dbd configuration DBDriver mysql DBDParams "host=localhost user=xxx pass=xxx dbname=xxx" DBDMin  4 DBDKeep 8 DBDMax  20 DBDExptime 300 <Location /internal>   DAV svn   SVNPath /var/svn/internal   AuthType Basic   AuthName "Internal SVN"   AuthBasicProvider dbd   # core authorization configuration   Require valid-user   AuthDBDUserPWQuery \     "SELECT password FROM user WHERE  email = %s" #  AuthUserFile /var/svn/etc/svn-auth-file   AuthzSVNAccessFile /var/svn/etc/internal-access-file   Require valid-user </Location>
接下来,就是数据库了,无论你怎么搞数据库关键在于那句select,没错,apache需要自己独特的password加密方案,这就是php语句的:
'{SHA}' . base64_encode(sha1($password, TRUE))

等你搞定了数据库之后,一切都可以工作了。

2008-08-14

决战紫禁之巅

XMM join the family
话说当年为了大猫猫有个活动腿脚的地方,在家里最高的柜子边上给阿猫加了一根货真价实的树干。那根树干有碗口粗细,是在一场灾难性的雷暴雨给摧毁下来的,废了好大力气才弄进屋子里去。自从有了这根杆子,猫就能爬到柜子顶去了。大猫猫凭借着个头的优势毫无疑问地占领了这个平台~

最近小猫猫随着暴饮暴食体型已经向霸王龙靠拢,这小子不时的打着注意占领这个平台。

终于在一个早上小猫向在平台上伸着懒腰的大猫猫发起了攻击,在1分钟肉搏之后小猫占领了这个平台。大猫猫落荒而逃。

在随后的日子里,大猫猫不时地试图夺回这个平台,两只猫一旦发现另一个在上面就会发生一场胜负难料的战斗。随着日子的推移,赢家只剩下一个。

更难以预料的事情发生了。在一个宁静的早晨,小猫猫一如既往的得手将另大白猫从平台上赶走,但是就在阿猫准备跳上树干逃走的时候,小猫突然从后面扑击并狠咬阿猫的尾巴,阿猫本能的躬身防御,360转体的同时,身体跑到了柜子外面,脚下一空……扑通一声重响,下面的键盘啊杯子啊什么的都飞了起来,大猫猫疯了一样的逃走了,空气中只留下一撮雪白的猫毛,缓缓从柜子上面飘落……


……意外,只能这么解释。

不过大白猫的记性似乎不好,几天之后,一切都淡忘了。
这一天小猫再次攻击大白猫的王位,大猫顶不住准备逃窜。突然间小猫靠墙,闪开了一条去路。大白猫眼看有机会就窜了过去。就在大白猫经过身边的一刹那,小花狸猫突然发力,前爪勾后爪重重的一蹬,可怜的大猫猫突然被踢出了柜子在空中转体180度下落,又是扑通一声巨响……

大白猫从此就很少去王位了。

想当年小花狸小的时候,一但家里没有人就被阿猫追的满地跑。人回来的时候总是在床底下或某个角落里找到可怜的小猫。

在自然界里弱肉强食是经古不变的道理,看来猫王要换人了。
Once upon a time in dark