你不知道的rpm别样用法 rpm/min
qiyuwang 2024-10-19 08:56 19 浏览 0 评论
熟悉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
如上图,信息包括了软件名、Relocations,版本、发行商、发布时间、编译时间、安装时间,编译主机名,包大小、授权信息、组、源RPM、数字签名、URL、概述、描述等信息。如果我们要列出某包安装后文件列表使用-l选项:
如果我们知道某个命令,想要查找它是通过哪个安装包安装,用-f加文件绝对路径来查找,比如要找lsof的安装包:
其他查询比较常见,我们不在赘述。下面我们说几个很少用,但是很有用的popt指令
--last,查询最近安装包
该语句可以按照时间顺序列出最近安装的包,结合重定向到head可以查找到最近安装包,比如最近安装的10个包。
rpm -qa --last|head -n 10
该语句非常有用,如果你的系统发生异常,被黑或者别人修改过,可以用他来找出来别人安装什么软件,可以做为证据或者进一步排查的依据。
--scripts,查询安装包附带的脚本
该语句,可以列出程序包中附带的的脚本,比如安装脚本、卸载脚本,启动项脚本等。比如我们查找nginx包中附带的安装脚本,如下:
上图中可见,安装中先增加了nginx组和nginx用户,然后用chkconfig注册了nginx服务。
接着创建了nginx日志目录和文件。然后是卸载脚本,卸载脚本中停止nginx服务,注销nginx启动项目。该命令非常有用,善用之可以学习很多shell脚本。
--changelog,安装包的变更历史
该语句可以列出软件包的整个变更历史,尤其在更新打包后,可以让我们了解其补丁包的安装情况,比如某些安全补丁包有没有安装过没有,比如openssl曾经暴露的心脏出血漏洞Heartbleed,CVE编号:CVE-2014-0160。我们就可以利用—changelog搜索当前版本是否已经打过该漏洞的补丁包。
rpm -q --changelog openssl|grep CVE-2014-0160
可以见我们已经安装过这个补丁了。查看其详细列表,可见是在1.0.1e-23解决的。
--requires,包依赖查询
该语句可以列出软件包安装所依赖的各种包及其最小版本。比如nginx的依赖
rpm -q --requires nginx,结果如下(列出部分):
--provides,被其他包依赖的情况
该语句可以列出,本软件包被其他软件依赖的情况,比如当你计划要升级或者删除某个包时候,可以用该语句查查其他包对它的依赖项,然后再决定下一步的操作,免得影响其他软件。比如nginx包:
RPM包验证
RPM数据库还提供包验证的功能,可以用来发现原始安装包变化情况。包验证的
-V包文件变化校验
基本命令是rpm -V。比如查询验证nginx包可以用rpm -V nginx:
上面列出了nginx包安装后对default.conf文件的大小,md5哈希值,文件修改时间都有过变化。这些由列表前面的位属性表示,.表示属性正常,其他标志表示属性有变化。如果文件被删除,则会提示"missing xxxx",属性参数表示见下表:
上图中注意到中间位还有个字母c标志,该标志用来表示文件具体属性,c表示文件为配置文件。
c %config 配置文件
d %doc 说明文档
g %ghost 不应包含的文档,如果有可能有问题
l %license 授权文件
r %readme readme说明
包文件删除过的显示如下:
-aV系统变化过的包文件
-V选项增加-a就可以列出当前系统中安装后,所有变化过的包文件,可以以此来检查文件包的完整性,安全性等。比如我们检查下bin目录中变化过的文件:
-K安装包校验
对于RPM安装包,下载的同时为了保证包的完整性质,防止由于下载或者被篡改等原因导致包变化,可以使用包校验来校验其完整性,校验需要下载安装包同时也一并下载校验的哈希包(md5,sha1,sha256等)校验文件。包安装数字校验使用-K 命令或者--checksig:
OK表示校验通过。增加-v可以显示更多的信息:
显示了sha1 和md5的哈希校验值。
RPM数据库维护
前面我介绍了很多功能,这些功能都是建立在RPM数据的基础上,所以维护RPM数据的准确可信非常重要。最后我们就来介绍下RPM数据库的构成及其维护。
RPM数据库构成
RPM数据库是有文件组成的数据结构,数据库位于"/var/lib/rpm"目录,数据文件格式为Berkeley DB,使用file命令就可以列出其格式:
由上图所示,除了四个__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可以显示具体详细过程:
如果重建出现问题,没有成功,则需要移除整个/var/lib/rpm 文件夹再试。如果还不行,则可能数据库出现大问题了,则需要重新生成RPM数据了:
新建一个目录重建数据库:
rpm --initdb --dbpath /rpm/rpmdb
在目录下,再执行重构数据库命令:
rpm --rebuilddb
结束语
RPM大家最熟悉,但是又很陌生的一个命令。熟悉的是常用的安装卸载操作,陌生的一些鲜为人知,但却十分有用的功能,尤其在安全检测和审计方面。本文我们介绍了这些鲜为人知但非常有用的命令,并且实例介绍他们的使用,最后我们介绍了RPM数据库急切备份、恢复修复的操作。
相关推荐
- # 安装打开 ubuntu-22.04.3-LTS 报错 解决方案
-
#安装打开ubuntu-22.04.3-LTS报错解决方案WslRegisterDistributionfailedwitherror:0x800701bcError:0x80070...
- 利用阿里云镜像在ubuntu上安装Docker
-
简介:...
- 如何将Ubuntu Kylin(优麒麟)19.10系统升级到20.04版本
-
UbuntuKylin系统使用一段时间后,有新的版本发布,如何将现有的UbuntuKylin系统升级到最新版本?可以通过下面的方法进行升级。1.先查看相关的UbuntuKylin系统版本情况。使...
- Ubuntu 16.10内部代号确认为Yakkety Yak
-
在正式宣布Ubuntu16.04LTS(XenialXerus)的当天,Canonical创始人MarkShuttleworth还非常开心的在个人微博上宣布Ubuntu下个版本16.10的内...
- 如何在win11的wsl上装ubuntu(怎么在windows上安装ubuntu)
-
在Windows11的WSL(WindowsSubsystemforLinux)上安装Ubuntu非常简单。以下是详细的步骤:---...
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
-
IT之家2月18日消息,科技媒体pureinfotech昨日(2月17日)发布博文,介绍了3中简便的方法,让你轻松在Windows11系统中,使用WindowsSubs...
- 如何查看Linux的IP地址(如何查看Linux的ip地址)
-
本头条号每天坚持更新原创干货技术文章,欢迎关注本头条号"Linux学习教程",公众号名称“Linux入门学习教程"。...
- 怎么看电脑系统?(怎么看电脑系统配置)
-
要查看电脑的操作系统信息,可以按照以下步骤操作,根据不同的操作系统选择对应的方法:一、Windows系统通过系统属性查看右键点击桌面上的“此电脑”(或“我的电脑”)图标,选择“属性”。在打开的...
- 如何查询 Linux 内核版本?这些命令一定要会!
-
Linux内核是操作系统的核心,负责管理硬件资源、调度进程、处理系统调用等关键任务。不同的内核版本可能支持不同的硬件特性、提供新的功能,或者修复了已知的安全漏洞。以下是查询内核版本的几个常见场景:...
- 深度剖析:Linux下查看系统版本与CPU架构
-
在Linux系统管理、维护以及软件部署的过程中,精准掌握系统版本和CPU架构是极为关键的基础操作。这些信息不仅有助于我们深入了解系统特性、判断软件兼容性,还能为后续的软件安装、性能优化提供重要依据。接...
- 504 错误代码解析与应对策略(504错误咋解决)
-
在互联网的使用过程中,用户偶尔会遭遇各种错误提示,其中504错误代码是较为常见的一种。504错误并非意味着网站被屏蔽,它实际上是指服务器在规定时间内未能从上游服务器获取响应,专业术语称为“Ga...
- 猎聘APP和官网崩了?回应:正对部分职位整改,临时域名可登录
-
10月12日,有网友反映猎聘网无法打开,猎聘APP无法登录。截至10月14日,仍有网友不断向猎聘官方微博下反映该情况,而猎聘官方微博未发布相关情况说明,只是在微博内对反映该情况的用户进行回复,“抱歉,...
- 域名解析的原理是什么?域名解析的流程是怎样的?
-
域名解析是网站正常运行的关键因素,因此网站管理者了解域名解析的原理和流程对于做好域名管理、解决常见解析问题,保障网站的正常运转十分必要。那么域名解析的原理是什么?域名解析的流程是怎样的?接下来,中科三...
- Linux无法解析域名的解决办法(linux 不能解析域名)
-
如果由于误操作,删除了系统原有的dhcp相关设置就无法正常解析域名。 此时,需要手动修改配置文件: /etc/resolv.conf 将域名解析服务器手动添加到配置文件中 该文件是DNS域名解...
- 域名劫持是什么?(域名劫持是什么)
-
域名劫持是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的地址从而实现用户无法访问目标网站的目的。说的直白些,域名劫持,就是把互...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- # 安装打开 ubuntu-22.04.3-LTS 报错 解决方案
- 利用阿里云镜像在ubuntu上安装Docker
- 如何将Ubuntu Kylin(优麒麟)19.10系统升级到20.04版本
- Ubuntu 16.10内部代号确认为Yakkety Yak
- 如何在win11的wsl上装ubuntu(怎么在windows上安装ubuntu)
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- 如何查看Linux的IP地址(如何查看Linux的ip地址)
- 怎么看电脑系统?(怎么看电脑系统配置)
- 如何查询 Linux 内核版本?这些命令一定要会!
- 深度剖析:Linux下查看系统版本与CPU架构
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)