2010年12月23日星期四

rpm查询安装包的详细信息

很多Linux发行版都采用rpm包来管理软件,rpm数据库会记录软件安装过程中的很多信息,这些信息都可以通过 rpm -q PKG --queryformat %{tags} 进行查询。而rpm支持的所有 tags 则可以通过rpm --querytags 进行查询。

比如查询软件的版本号:
rpm -q glibc --queryformat %{version}
2.11.2

查询软件的安装时间:
rpm -q glibc --queryformat %{installtime}
1288242067
这个输出不太友好,但通过添加rpm支持的modify即可达到需要的效果,简单的将 %{tags} 替换为 %{tags:modify}即可。rpm所支持的modify可以通过man rpm,然后搜索typetag进行查询。

将命令修改为如下,可得到比较理想的结果:
rpm -q glibc --queryformat %{installtime:date}
2010年10月28日 星期四 13时01分07秒

查询的结果有可能是一个列表。如当tags为filenames时,表示查询 PKG 包含的所有文件,这时的查询结果即为一个文件列表。为使列表以友好的方式展现,则需要为queryformat加上中括号,且中括号内包含一个\n。比如:
rpm -q glibc --qf '[%{filenames}\n]'

在定义一个tag的输出宽度时,可采用printf所支持的格式化方式。比如需要输出tags的宽度为20,且采用右对齐方式,则将 %{tags} 修改为 %20{tags} 即可,比如:
rpm -q glibc --qf '[%{name}: %40{filenames} %8{filesizes} bytes\n]'

2010年12月20日星期一

非root用户通过cpan安装perl模块

任何用户都可以通过cpan安装模块。root用户在配置cpan时,基本采用默认配置就可以。根据默认配置,perl模块将被安装在系统目录(比如:/usr/lib/perl5/site_perl/5.8.8)。但非root用户在配置cpan的时候,如果也采用上述办法,则配置cpan完毕后,极有可能会由于对/usr/lib/perl5/site_perl/5.8.8没有写入权限而导致无法安装模块。对于这个问题,可以通过在配置cpan时修改模块安装的PREFIX来解决。具体方法如下,当在配置cpan出现下面的提示时:

Every Makefile.PL is run by perl in a separate process. Likewise we
run 'make' and 'make install' in processes. If you have any
parameters (e.g. PREFIX, LIB, UNINST or the like) you want to pass
to the calls, please specify them here.

If you don't understand this question, just press ENTER.

Parameters for the 'perl Makefile.PL' command?
Typical frequently used settings:

PREFIX=~/perl non-root users (please see manual for more hints)

Your choice: []

此时如果用户是root,且打算将模块安装在系统目录下供所有用户使用,则直接输入回车。如果是非root用户,此时只要根据提示内容,简单输入:PREFIX=~/perl 即可。这样该用户perl模块的安装目录将更改为~/perl。在写程序时,只要将该目录加入到@INC列表,即可正常使用。

安装任何软件的时候都一定要注意看提示啊!

2010年12月11日星期六

bash中快速移动光标

在vi中可以通过f命令快速定位到指定字符,在bash中其实也可以做到。bash默认绑定的快捷键是Ctrl+] 和 Ctrl+META+]。前者(没有META)表示向右搜索,对应vi中的f命令,后者(带有META)表示向左搜索,对应vi中的F命令。

比如输完如下字符串后:
scp 10.20.36.226::/usr/src/redhat/SPECS/netxtreme2.spec /usr/src/redhat/SPECS/
发现多输入了一个冒号,为了删除它,这时最简单的按键组合是:
1 Ctrl+META+]
2 shift+;
3 Ctrl+d

如果按META键感觉麻烦,可以将第1步替换为如下两步:
1 Ctrl+a
2 Ctrl+]

2010年12月9日星期四

bash中PS4的设置

调试shell脚本时可以加上-x参数来显示执行过程。默认的提示符是“+“,脚本如果比较长,看起来会很累。”+“实际是shell的PS4提示符。因此只要重新设置PS4变量即可避免“+”的出现。比如可以做如下修改:

export PS4='\[${FUNCNAME:-$0}\]--\[$LINENO\]-- '

在上面设置中用到了两个bash的环境变量:
FUNCNAME:当前执行的function名,如果没有,则设定为脚本名。
LINENO:当前执行命令的行号。

这样在调试的时候,可以方便的查看脚本在执行哪个function,第几行的时候出了问题。