2005 年 4 月 @ blogchina

2005 年 4 月

装了个realvncvncviewer切换全屏模式要替换了,学了一点 sed郁闷的依赖规则makedepend

装了个realvnc

日有所得 2005-04-05 13:55:18

安装:

tar xzvf vnc-4_1_1-x86_linux.tar.gz
cd vnc-4_1_1-x86_linux
./vncinstall ~/bin ~/man

配置:

把 ~/bin 加到 PATH 中
~/bin/vncpasswd 设置密码
vi ~/bin/vncserver 改分辨率
~/bin/vncserver 启动

登陆:

free 版本是不加密的,于是配合 SSH 端口转发来用,windows 上用 vncviewer 连接 localhost:5901 登陆嗯, 不错,这下某某人的 Q 就可以 7x24 小时挂着了。老庞新换的 ADSL 还比较快。只是缺省带的 twm 窗口管理器实在太难用了,于是再装一个 fluxbox,安装及其简单:

./configure --prefix=$HOME && make && make install
这种就相当于 windows 下装软件的一路点鼠标了。装好之后改 vncserver 把 twm 换成 fluxbox(得先删除 ~/.vnc/xstartup)。

vncviewer切换全屏模式

日有所得 2005-04-08 10:01:53

换到全屏模式换不回来了,还好 ctrl_alt_del 能弹出任务栏。
google 了一通,才知道热键是 F8


远程调试 iptables 又犯错了

日有所得 2005-04-08 16:16:02

唉,太鲁莽了,第一次出错搞得自己连不上了,还好那边控制台有人,清空规则之后长了个心眼,先写个清空规则的脚本:

#!/bin/sh
# cleanfw
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -F

改完规则运行之前先把清空的脚本准备着,两分钟之后运行:

sleep 120 && sh cleanfw &

试了一下效果不错。可惜实际用的时候写成了

sleep 120 & sh cleanfw &
少写了一个 &符号,当时提示进程退出的信息也没留意,以为是上次试验时候的后台进程退出。不凑巧,这次规则还有问题,结果自己再次断线......,我真是猪脑袋:-(

想来 sleep 120 && sh cleanfw & 这样也不安全,万一 sleep
120 失败(例如收到某种信号?)cleanfw 就不会执行了,最安全的还是:

(sleep 120; sh cleanfw) &
吃了亏下次就要记牢了。


要替换了,学了一点 sed

日有所得 2005-04-11 15:39:00

要对 openssl 代码施行大规模的字符串替换了,其中有个任务,要把

#include <openssl/xxx.h>
这样替换成
#include "xxx.h"
grep 了一下,情况还比较复杂,有各种各样的 include:
#include <stdio.h>
#include "cryptlib.h"
#include<openssl/conf.h>
#include <openssl/x509v3.h>
#include <openssl/x509.h>
#include <openssl/x509.h> /* comment */
#include "openssl/x509.h"
#include "openssl/x509.h"
#include "openssl/x509.h"
文件太多,非 sed 不可了,学了一会总算能完成任务了。

sed 简单教程(From IBM DeveloperWorks):

part 1part 2part 3
完成上面替换的 sed 语句是:
sed -e 's|[<"]openssl/\(.*\)[>"]|"\1"|g' foo.c
s      是替换命令
| 为自定义分隔符
[<"] 匹配 < 和 " 两个字符
[>"] 匹配 > 和 " 两个字符
\(.*\) 定义了一个区域,随后的 \1 引用这个区域
这个命令将 <openssl/xxx.h> 替换为 "xxx.h"
同时也能将 "openssl/xxx.h" 替换为 "xxx.h"

多个替换任务:用

$ cat > my.sed
{
s/unsigned char/uint8/g
s/unsigned int/uint32/g
s/unsigned short/uint16/g
}
^D
$ sed -f my.sed foo > bar

郁闷的依赖规则

日有所得 2005-04-14 15:40:58

lib: $(LIB_OBJS) 
$(AR) $(LIB) $(LIB_OBJS)
$(RANLIB) $(LIB) || echo Never mind.
发现每次 make lib 都会 ar 一遍,依赖规则没有用了。折腾了好久才想过来原
因是始终不会有一个叫 lib 的文件产生(它是伪目标),改成让 lib 目标依赖
于具体的文件 $(LIB) ,依赖规则就能生效了:
lib: $(LIB)

$(LIB): $(LIB_OBJS)
$(AR) $(LIB) $(LIB_OBJS)
$(RANLIB) $(LIB) || echo Never mind.
容易忽略的细节。

makedepend

日有所得 2005-04-18 21:39:59

depend:
makedepend -Y -- $(CFLAGS) -- $(SOURCES)

用 -Y 避免搜索 /usr/include,这样不会产生类似 foo.c: /usr/include/stdio.h这样浪费编译时间的规则,但同时也会报成堆的找不到头文件的错误。如果重定向
stderr,又担心漏掉有用的信息,唉,难办啊,大概只有改它的源码了。其实在 openssl 里面也有这问题,它是自己编写的工具,不处理 /usr/include,但那个 domd 不太完善,试了一下有些情况会把 Makefile 弄成 0 字节文件 :(

0 Comments so far

  1. There are currently no comments.
Leave a Comment?


« 2005 年 3 月 @ blogchina  —  sed & ex »

Tags

Blogroll

Fairy World | STUPiD | 阅微草堂 | ShelleX | 流浪五天