2007-02
05

如何统计代码的修改规模?如果肯花钱,则能买到统计代码修改规模的专业工具。这里介绍一种利用subversion和grep组合的方法简单统计代码修改规模。下面假设程序代码中的注释有两种格式,一种以 // 开头,另一种是Javadoc格式,即

/**
 * This is a function.
 * @param {String} v str
 */

为清晰起见,下面的统计命令分成了几行来写。

svn diff -r4:320                    # 获取rev4和rev320之间的差异
    | sed -e 's/\r//g'              # 删除行尾的换行符^M。Windows下必须
    | grep "^+[^+]"                 # 取得修改部分
    | grep -Ev "^+[[:space:]]*(\/\*)|(\*)|(\/\/)"     # 删除注释
    | grep -v "^+[[:space:]]*$"     # 删除空行
    | wc -l                         # 统计行数


2006-12
12

Linux的screen命令不错,习惯了你会觉得它比windows的任务栏好用多了。下面是我的.screenrc,仅供参考。

#
# ~/.screenrc
#

# 启动时不显示欢迎屏幕
startup_message off

#  定义screen的功能键为Ctrl-Z。向终端输入Ctrl-Z时应按 Ctrl-Z z。
escape ^Zz

# 屏幕缓冲区 1024 行。
defscrollback 1024

# 在最下一行显示窗口列表和时钟
hardstatus on
hardstatus alwayslastline
hardstatus string "%{.bW}%-w%{.rY}%n %t%{-}%+w %=%{..G} %H(%l) %{..Y} %Y/%m/%d %c:%s "

# 关闭错误提示
vbell off

# 按 Ctrl-Z w 或 Ctrl-Z Ctrl-W 显示窗口列表
bind w windowlist -b
bind ^w windowlist -b
阅读全文 »

2006-12
08

大家都知道Linux下的date命令可以查看或修改系统时间,其实它还能用于日期计算等,十分方便。

首先是最基本的查看、修改时间。

[root@local ~]# date
Thu Dec  7 21:47:52 JST 2006
[root@local ~]# date --set='2006-12-08 14:01:00'
Fri Dec  8 14:01:00 JST 2006

指定日期显示格式,具体的格式指定方法参见 date --help。

[root@local ~]# date +%Y%m%d
20061208
[root@local ~]# date +%F
2006-12-08
[root@local ~]# date +%s
1165554109
[root@local ~]# date -R
Fri, 08 Dec 2006 14:02:09 +0900

时间计算。

[root@local ~]# date -d "2 days ago" +%F
2006-12-06
[root@local ~]# date -d '15 years' +%F
2021-12-08
[root@local ~]# date -d '30 minutes ago'
Fri Dec  8 13:57:17 JST 2006


2006-12
08

用curl下载网页估计大家都会,但是模拟 multipart/form-data 形式的 form 上传文件则稍稍复杂些。命令行如下。

curl -F "action=upload" -F "filename=@file.tar.gz" http://localhost/action.php

如果使用了-F参数,curl就会以 multipart/form-data 的方式发送POST请求。-F参数以name=value的方式来指定参数内容,如果值是一个文件,则需要以name=@file的方式来指定。

如果通过代理,上面的命令有可能会被代理拒绝,这时需要指定上传文件的MIME类型。

curl -x myproxy.com:1080 -F "action=upload" -F "filename=@file.tar.gz;type=application/octet-stream" http://localhost/action.php

另外,如果不上传文件,则可以使用 -d 参数,这时curl会以 application/x-www-url-encoded 方式发送 POST 请求。

curl -d "action=del" -d "id=12" http://localhost/action.php


2006-11
22

主机名一般是在安装时设定好的,若想修改,则需要进行以下步骤。

  1. 执行命令 hostname,修改当前系统的主机名
    # hostname newhost
  2. 修改 /etc/sysconfig/network,使得下次启动时使用新的主机名
    hostname=newhost
  3. 修改 /etc/hosts。不修改的话,apache等需要解析主机名的服务将不能启动
    127.0.0.1    newhost localhost
  4. 最后就是命令行提示符中的主机名还没有改变,如果很在意的话,重新登录一下就行了


2006-11
03

这里有一篇关于如何安装 Ubuntu 6.06 的文章,虽然有些老了,但是本文是在这篇文章的基础上写成的,看看也许能有些参考。

修改 /etc/source.list,将其中的所有 dapper 替换成 edgy。

如果你使用了 http://packages.freecontrib.org/ubuntu/plf/ 的源,则要将这个源的 dapper 替换为 edgy-plf,并执行以下命令以添加公钥。

# wget http://packages.freecontrib.org/ubuntu/plf/12B83718.gpg -O- | sudo apt-key add -

然后执行

# apt-get dist-upgrade

注意观察要更新的软件包,你会发现安装程序需要删除一部分软件,包括显卡驱动!所以升级之后图形界面会有问题,这个问题我们升级以后再修复。

然后就是漫长的下载和安装过程。

如果你以前修改过登录界面(gdm)的主题,那么在安装新版时,安装程序会提示你是否要覆盖/etc/gdm/gdm.conf-custom文件。

Configuration file `/etc/gdm/gdm.conf-custom'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : background this process to examine the situation
 The default action is to keep your current version.
*** gdm.conf-custom (Y/I/N/O/D/Z) [default=N] ?

这时你可以选择 d,然后复制下自己修改过的部分,然后选择 Y 安装新版 gdm.conf-custom,安装结束后将自己的修改内容恢复即可。

安装成功之后重新启动计算机……啊?gdm启动失败……这正是由于上面升级时删掉了显卡驱动的问题。此时先按Ctrl+F2切换到控制台,然后登录系统并切换到 root 用户,执行下列命令:

# apt-get install libgl1-mesa-glx

然后再执行

# apt-get install xorg

如果你以前安装过 ATI 或者 GeForce 的官方显卡驱动,那么系统中的 /etc/X11/xorg.conf 为使用官方驱动的版本,而升级时官方显卡驱动被卸载了,因此需要将 xorg.conf 恢复成安装显卡驱动之前的状态。假设当初安装的是 ATI 驱动并且使用 aticonfig 命令自动配置了显卡,那么原始的 xorg.conf 会备份成 /etc/X11/xorg.conf-original-0,用这个文件恢复即可。

# cp /etc/X11/xorg.conf-original-0 /etc/X11/xorg.conf

然后再次重新启动,这样就可以进入图形界面了。

备注:据旺旺同学的经验,如果按照以上的方法还是不能恢复的话,可以试试以下两个命令:

# apt-get remove xserver-xorg-driver-ati
# apt-get install xserver-xorg-video-ati


2006-10
21

前面介绍cygwin下安装sshd时简单地提到了ssh的公钥认证。 下面将这种认证方式详细地解释一下。

阅读全文 »

2006-10
20

查看myprog(二进制文件)依赖的库文件

ldd myprog

查看myprog的符号表

nm myprog

删除myprog中的符号,减小文件大小

strip myprog

myprog的详细信息

readelf -a myprog

另外这篇文章可以在调试时作为参考。



2006-10
14

最近在用 perl 写一个Linux下的多进程守护进程,因此研究了一下Linux下的进程相关的知识。 现将心得总结一下。主要是关于进程创建和回收。

阅读全文 »

2006-10
12

前面这篇文章简单地阐述了用Perl创建守护进程(daemon)的方法。 实际上,创建一个多进程的守护进程需要注意很多事情。

阅读全文 »