当前位置:   article > 正文

rpm 卸载_你不知道的rpm别样用法

debian安装rpm后如何卸载
9fd7c20f9efccd41201d27ce2dc33c16.png

熟悉Linux的人都可能知道rpm,而且绝大多数人可能都用过rpm命令。RPM全称Red Hat Package Manager,是红帽Linux的包管理器,也是使用最大的三个个包管理器之一,另外两个的debian系的dbpkg和Unix、BSD用的pkg。

RPM主要用来对RedHat系Linux二进制软件包管理,包括对软件包的安装、卸载、升级、更新、查询以及校验。实际上为了软件包管理,RPM在本地维护了一个rpm包数据库(RPM Database),记录了本机所有软件包的版本信息、包变化信息等。大家都用的最多的就是查询、安装和卸载,而其他功能则鲜为人知,本文虫虫就给大家介绍这些功能。

RPM包查询

RPM查询是最常用的功能之一,大家都会会用rpm -q ,rpm -q|grep查询特定的包信息,下面是一些很有用,但是可能没有用过的功能。

-i -l -f,查询包文件信息

这几个选项用来查找某安装包和文件够成的信息。-i表示某安装包的概述信息,比如我们搜索nginx的信息用rpm -qi nginx

9b7ed607872667541c4ca6c633e235e5.png

如上图,信息包括了软件名、Relocations,版本、发行商、发布时间、编译时间、安装时间,编译主机名,包大小、授权信息、组、源RPM、数字签名、URL、概述、描述等信息。如果我们要列出某包安装后文件列表使用-l选项:

068d74706a6e5efb9f8acabe370ce2e4.png

如果我们知道某个命令,想要查找它是通过哪个安装包安装,用-f加文件绝对路径来查找,比如要找lsof的安装包:

4e1197c6329aa9023fff31754e5e96d0.png

其他查询比较常见,我们不在赘述。下面我们说几个很少用,但是很有用的popt指令

--last,查询最近安装包

该语句可以按照时间顺序列出最近安装的包,结合重定向到head可以查找到最近安装包,比如最近安装的10个包。

rpm -qa --last|head -n 10

5032ad056b120d2aa44cb4ca074c0131.png

该语句非常有用,如果你的系统发生异常,被黑或者别人修改过,可以用他来找出来别人安装什么软件,可以做为证据或者进一步排查的依据。

--scripts,查询安装包附带的脚本

该语句,可以列出程序包中附带的的脚本,比如安装脚本、卸载脚本,启动项脚本等。比如我们查找nginx包中附带的安装脚本,如下:

7d69a0e09d8854909db8eef62bf2c947.png

上图中可见,安装中先增加了nginx组和nginx用户,然后用chkconfig注册了nginx服务。

f6d9a08f81d6102fe1984e678f7b1633.png

接着创建了nginx日志目录和文件。然后是卸载脚本,卸载脚本中停止nginx服务,注销nginx启动项目。该命令非常有用,善用之可以学习很多shell脚本。

--changelog,安装包的变更历史

该语句可以列出软件包的整个变更历史,尤其在更新打包后,可以让我们了解其补丁包的安装情况,比如某些安全补丁包有没有安装过没有,比如openssl曾经暴露的心脏出血漏洞Heartbleed,CVE编号:CVE-2014-0160。我们就可以利用—changelog搜索当前版本是否已经打过该漏洞的补丁包。

rpm -q --changelog openssl|grep CVE-2014-0160

b90add64ef00e4fddf65178032c126c1.png

可以见我们已经安装过这个补丁了。查看其详细列表,可见是在1.0.1e-23解决的。

77cad59f36707b397abd0a9ed6226e81.png

--requires,包依赖查询

该语句可以列出软件包安装所依赖的各种包及其最小版本。比如nginx的依赖

rpm -q --requires nginx,结果如下(列出部分):

99d1deeeeb0fe422aaf1defa12e40b61.png

--provides,被其他包依赖的情况

该语句可以列出,本软件包被其他软件依赖的情况,比如当你计划要升级或者删除某个包时候,可以用该语句查查其他包对它的依赖项,然后再决定下一步的操作,免得影响其他软件。比如nginx包:

4fe54e8e23c0170eec38588bf0eba19b.png

RPM包验证

RPM数据库还提供包验证的功能,可以用来发现原始安装包变化情况。包验证的

-V包文件变化校验

基本命令是rpm -V。比如查询验证nginx包可以用rpm -V nginx:

314f5826ee3bac9ad213d1a620315f65.png

上面列出了nginx包安装后对default.conf文件的大小,md5哈希值,文件修改时间都有过变化。这些由列表前面的位属性表示,.表示属性正常,其他标志表示属性有变化。如果文件被删除,则会提示"missing xxxx",属性参数表示见下表:

9e9c0c6e4d540bba33184b741a822169.png

上图中注意到中间位还有个字母c标志,该标志用来表示文件具体属性,c表示文件为配置文件。

c %config 配置文件

d %doc 说明文档

g %ghost 不应包含的文档,如果有可能有问题

l %license 授权文件

r %readme readme说明

包文件删除过的显示如下:

e757d10f10c485100381e0c56bfa0bbe.png

-aV系统变化过的包文件

-V选项增加-a就可以列出当前系统中安装后,所有变化过的包文件,可以以此来检查文件包的完整性,安全性等。比如我们检查下bin目录中变化过的文件:

9f5b9c8ff301c3dc6734b594321807c0.png

-K安装包校验

对于RPM安装包,下载的同时为了保证包的完整性质,防止由于下载或者被篡改等原因导致包变化,可以使用包校验来校验其完整性,校验需要下载安装包同时也一并下载校验的哈希包(md5,sha1,sha256等)校验文件。包安装数字校验使用-K 命令或者--checksig:

2a93a74330fb8458fc3d147e65950d5d.png

OK表示校验通过。增加-v可以显示更多的信息:

e4509934a919c33f897a92518d9fcbd9.png

显示了sha1 和md5的哈希校验值。

RPM数据库维护

前面我介绍了很多功能,这些功能都是建立在RPM数据的基础上,所以维护RPM数据的准确可信非常重要。最后我们就来介绍下RPM数据库的构成及其维护。

RPM数据库构成

RPM数据库是有文件组成的数据结构,数据库位于"/var/lib/rpm"目录,数据文件格式为Berkeley DB,使用file命令就可以列出其格式:

3a198dd013235816ab0a518f006e5509.png

由上图所示,除了四个__db.00数字的可执行文件外,其他数据都是Berkeley DB 哈希表。这些数据文件对应于不同的rpm查询命令,比如Name文件就是rpm -q 包名的查询,文件保存所有包名称,其他文件也类似。如果这些文件被删除,则rpm的对应功能项就不能执行,甚至安装卸载等功能都会有问题。

数据库备份

RPM数据库备份相当简单,只需对该目录进行备份即可:

tar cvfz RPMDB-20190429.tar.gz /var/lib/rpm

可以用cron计划任务定期备份,使用rsync同步到异地存储,就可以万无一失了。

数据库恢复--rebulddb

如果数据被破话出现问题,可使用数据重建--rebulddb命令恢复。注意重建之前一定注意备份数据,备份数据,备份数据库!重要的事情说三遍!

备份RPM数据库后,可以使用下面方法重建恢复数据库:

移除 /var/lib/rpm/__db* 文件:

mkdir /tmp/rpmdb

mv /var/lib/rpm/__db* /tmp/rpmdb

然后执行rpm --rebuilddb

添加-vv可以显示具体详细过程:

4b44558c1e62cb0f4094de47e1ed70ed.png

如果重建出现问题,没有成功,则需要移除整个/var/lib/rpm 文件夹再试。如果还不行,则可能数据库出现大问题了,则需要重新生成RPM数据了:

新建一个目录重建数据库:

rpm --initdb --dbpath /rpm/rpmdb

95d27778838658a6689785125c12ac32.png

在目录下,再执行重构数据库命令:

rpm --rebuilddb

结束语

RPM大家最熟悉,但是又很陌生的一个命令。熟悉的是常用的安装卸载操作,陌生的一些鲜为人知,但却十分有用的功能,尤其在安全检测和审计方面。本文我们介绍了这些鲜为人知但非常有用的命令,并且实例介绍他们的使用,最后我们介绍了RPM数据库急切备份、恢复修复的操作。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号