2009年7月11日星期六

Sed也要万分小心的教训

需要把bbs服务器中所有的域名(bbs.xxxx.xxx.cn)改成ip(111.22.333.444),于是就很自信的在bbs根目录下执行
find . -exec sed -i 's/bbs\.xxxx\.xxx\.cn/111.222.333.444/g' {} \;
且不说把其中的bin和lib文件夹中的一些二进制文件改了,这个好办,重新编译生成这些二进制文件就解决了。要命的是kbs的bbs系统在boards、mail这些存放数据的文件夹里面也全部都是二进制文件,使用上面的命令之后,由于bbs.xxxx.xxx.cn与111.22.333.444相差一个字符,直接导致被修改的部分之后完全乱套。
解决办法是:
1. 对于被搞乱的版面,进入boards下相关文件夹,备份.DIR和.ORIGIN,然后
sed -i 's/111\.22\.333\.444/111.22.333.444 /g' .DIR .ORIGIN
其实就是在末尾多了个空格来达到字符数平衡,多数都能解决。
2. 对于被搞乱的邮箱,同样进入mail下相关文件夹,备份之后进行替换
sed -i 's/111\.22\.333\.444/111.22.333.444 /g' .DIR .SENT .DELETED

另外:如果在bbs文件夹里面建立一个NOLOGIN的空文件,就只有telnet 127.0.0.1可以登录,可以用来测试。

没有评论: