当用RPM安装,升级或卸载软件包时,RPM将所有的信息记录到数据库中。RPM的校验,就在于检查这些数据的完整性。一旦发现某个软件包被破坏(有文件丢失等情况),RPM就会报告错误。RPM通过这样一种机制,保证系统的正常运行。 RPM除了校验软件包的依赖关系,还校验每个文件,检查其属性是否正确。文件属性包括属主,属组,权限,MD5检查和,大小,主设备号,从设备号,符号连接及最后修改时间9项内容,其中每一项改变RPM都会发现。这9项属性RPM并非都校验,因为文件类型不同,其中某些属性会没有意义,RPM因而也不会去检查。这里有一个表格: 注: -表示不校验,校表示校验。 校验时若发现文件丢失,RPM将输出"missing文件名"。若有属性方面错误,RPM将用如下格式输出:
如果文件某属性正常,则会显示点(.)字符,否则的话将显示其代表字符。看下例:
本例校验bash包(校验命令rpm -V下面将详细解释),结果发现/etc/bashrc文件有问题,输出的属性中:出现S字符,这表明文件大小改变了;出现5,这表明文件内容与原内容不同了;最后的T字符,则表明文件的最后修改时间改变了。通过这些属性字符,我们可以清楚地知道一个文件变动了什么,这是RPM的聪明之处。 格式中的c字符仅当校验文件为配置文件时才输出。如lze包中有/etc/inputme.def配置文件,如果我们人为改变其最后修改时间,RPM会发现什么:
注: 本例中用touch命令改变文件最后修改时间,然后校验,结果RPM发现了这个情况(以T表示出来),我们还看到了c字符,说明/etc/inputme.def是个配置文件。 命令格式 校验RPM格式的软件包,可使用如下命令格式:
注: -V可用——verify或-y代替,效果相同。 选项列表 选项说明 通用选项的解释,请参见<<精通RPM之二——安装篇>>,本文不再赘述。下面对指定用选项做些解释: 选项分为以下几类: 一、包选择类 1. -a (或-all) : 校验所有已安装的软件包 本选项指示RPM校验系统中所有已安装的软件包:
注: 本例校验后,RPM发现: (1) 文件/etc/profile的大小(S),内容(5)及最后修改时间(T)已改变; (2) 目录/usr/man/man1的权限(M),属组(G)已改变; (3) 文件/etc/rc.d/rc3.d/S85httpd丢失(missing)。 2. -f (或——file) : 校验含指定文件的软件包 如果用户仅知道某个文件,但忘了它所在的软件包,又想校验这个包时,可用此选项。
注: 本例校验含/bin/cp和/bin/bash文件的软件包,发现有两个文件(/bin/ls与/etc/bashrc)改变了。 3. -g (或——group) : 校验指定类别的软件包 本选项用于校验已安装的指定类别的软件包。关于软件的类别,请参见<<精通RPM之五——查询篇>>。 下例校验Applications/Editors与Applications/Text类别的软件包:
4. -p : 校验指定包裹文件 如果用户想校验某个RPM包所含文件在系统中的属性是否正常,则可用-p项指定该包裹文件进行校验, 如下例;
注: 本例中RPM发现fileutils包裹中的/bin/ls文件与当前系统中的/bin/ls文件有所不同(S大小,M权限,5内容,T时间)。 二、特殊要求类 1. ——noscripts : 不执行校验脚本程序 有些RPM软件包中内置有校验脚本程序(verifyscript),它执行一些特殊的检查。当用户不想执行这类脚本程序时,需用——noscripts选项。
注: 本例中第一个校验所输出的内容为XFree86-libs包内的校验脚本程序的输出,第二个命令中用了——noscripts选项,这使得校验脚本程序没有执行,因而也没有什么输出了。 2. ——nodeps : 不检查依赖 RPM校验软件包时,默认情况是检查依赖,因为依赖是否正常关系到一个软件能否可靠运行。校验时选用——nodeps选项,用于指示RPM不检查依赖。注意,本选项主要针对软件包制作者,除非必要,不要使用此选项。我们可以通过校验时用-vv选项输出调试信息,从而可以看到是否检查依赖的区别:
注: 例子中,有requires的行为检查依赖,以D:开头的行为调试输出信息。 3. ——nofiles : 忽略丢失文件的错误 默认情况下,RPM在校验时若发现文件丢失,会报出"missing 文件名"的错误。如果用户想忽略这方面的错误,请用——nofiles选项。请比较下例输出:
注: 使用此选项后RPM没有再报出文件丢失的错误。 4. ——nomd5 : 忽略MD5检查和的错误 本选项用于指示RPM忽略文件内容的改变,即忽略MD5检查和错误。此选项常用于校验日志类型的文件(此类文件内容并不重要)。 请看下面的例子:
例子中校验bash包,不用——nomd5选项时,输出有5(MD5检查和),表示/etc/bashrc内容变化了,而采用——nomd5选项时,相应输出则为点(.),表示文件内容正常了。 |
|