RPM有个作用是可以校验系统软件包或系统命令是否被修改

校验时若发现文件丢失,RPM将输出"missing文件名"。若有属性方面错误,RPM将用如下格式输出:

SM5DLUGT c 文件名
其中: S : 表示文件大小;
M : 表示权限;
5 : 表示MD5检查和;
D : 表示主从设备号;
L : 表示符号连接;
U : 表示属主;
G : 表示属组;
T : 表示最后修改时间。

如果文件某属性正常,则会显示点(.)字符,否则的话将显示其代表字符。看下例:

# rpm -V bash
S.5....T /etc/bashrc
#

本例校验bash包(校验命令rpm -V下面将详细解释),结果发现/etc/bashrc文件有问题,输出的属性中:出现S字符,这表明文件大小改变了;出现5,这表明文件内容与原内容不同了;最后的T字符,则表明文件的最后修改时间改变了。通过这些属性字符,我们可以清楚地知道一个文件变动了什么,这是RPM的聪明之处。


格式中的c字符仅当校验文件为配置文件时才输出。如lze包中有/etc/inputme.def配置文件,如果我们人为改变其最后修改时间,RPM会发现什么:

# touch /etc/inputme.def
# rpm -V lze
.......T c /etc/inputme.def
#

注: 本例中用touch命令改变文件最后修改时间,然后校验,结果RPM发现了这个情况(以T表示出来),我们还看到了c字符,说明/etc/inputme.def是个配置文件。

命令参数讲解:

一、包选择类
1. -a (或-all) : 校验所有已安装的软件包
本选项指示RPM校验系统中所有已安装的软件包:

# rpm -V -a
S.5....T c /etc/profile
.M....G. /usr/man/man1
missing/etc/rc.d/rc3.d/S85httpd
#

注: 本例校验后,RPM发现:

(1) 文件/etc/profile的大小(S),内容(5)及最后修改时间(T)已改变;

(2) 目录/usr/man/man1的权限(M),属组(G)已改变;

(3) 文件/etc/rc.d/rc3.d/S85httpd丢失(missing)。


2. -f (或——file) : 校验含指定文件的软件包

如果用户仅知道某个文件,但忘了它所在的软件包,又想校验这个包时,可用此选项。

# rpm -V -f /bin/cp /bin/bash
SM5....T /bin/ls
S.5....T /etc/bashrc

注: 本例校验含/bin/cp和/bin/bash文件的软件包,发现有两个文件(/bin/ls与/etc/bashrc)改变了。

3. -g (或——group) : 校验指定类别的软件包

本选项用于校验已安装的指定类别的软件包。关于软件的类别,请参见<<精通RPM之五——查询篇>>。

下例校验Applications/Editors与Applications/Text类别的软件包:

# rpm -V -g Applications/Editors Applications/Text
.......T c /etc/inputme.def
#


4. -p : 校验指定包裹文件

如果用户想校验某个RPM包所含文件在系统中的属性是否正常,则可用-p项指定该包裹文件进行校验, 如下例;

# rpm -V -p fileutils-4.0-3.i386.rpm
SM5....T /bin/ls
#


注: 本例中RPM发现fileutils包裹中的/bin/ls文件与当前系统中的/bin/ls文件有所不同(S大小,M权限,5内容,T时间)。




试验验证一下:

我现在要检查netstat命令是否被修改或者替换:

1、先检查改命令是属于哪个软件包:

[root@test root# rpm -qf /bin/netstat
net-tools-1.60-110.el6_2.x86_64

2、查看该文件是否被修改

rpm -V -f /bin/netstat   如果没有任何输出,表示文件没有被修改;
rpm -Vv -f /bin/netstat       #小写v参数,表示列出详细信息;




下图显示

net-tools-1.60-110.el6_2.x86_64


软件包里的文件没有被修改过

wKiom1Ww4__zYMSXAAYLNpUwwwc450.jpg


测试以上命令:

现在,我修改了/bin/netstat 的时间:

[test@test ~]$ sudo touch -c -m -t 201101110000 /bin/netstat


[test@test ~]$  rpm -V -f /bin/netstat
.......T.    /bin/netstat

该命令已经显示/bin/netstat文件的时间被修改,T表示时间


[test@test ~]$  rpm -Vv -f /bin/netstat



wKioL1Ww6JXiwH77AAGGI_gCkfg712.jpg



参考博文:

http://www.360doc.com/content/06/1227/16/15540_309086.shtml

谢谢博主分享。