百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

你不知道的rpm别样用法 rpm/min

qiyuwang 2024-10-19 08:56 22 浏览 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数据库急切备份、恢复修复的操作。

相关推荐

基于Docker方式安装与部署Camunda流程引擎

1Camunda简介官网:https://docs.camunda.org/manual/7.19/installation/docker/Camunda是一个轻量级、开源且高度灵活的工作流和决策自...

宝塔Linux面板如何部署Java项目?(宝塔面板 linux)

通过宝塔面板部署Java还是很方便的,至少不需要自己输入tomcat之类的安装命令了。在部署java项目前,我还是先说下目前的系统环境,如果和我的系统环境不一样,导致部署不成功,那你可能需要去找其他资...

浪潮服务器如何用IPMI安装Linux系统

【注意事项】此处以浪潮服务器为例进行演示所需使用的软件:Chrome浏览器个人PC中需要预先安装java,推荐使用jdk-8u181-windows-x64.exe【操作步骤】1、在服务器的BIOS中...

Centos7环境Hadoop3集群搭建(hadoop集群环境搭建实验报告)

由于项目需要存储历史业务数据,经过评估数据量会达到100亿以上,在原有mongodb集群和ES集群基础上,需要搭建Hbase集群进行调研,所以首先总结一下Hadoop集群的搭建过程。一、三个节点的集群...

Hadoop高可用集群搭建及API调用(hadoop高可用原理)

NameNodeHA背景在Hadoop1中NameNode存在一个单点故障问题,如果NameNode所在的机器发生故障,整个集群就将不可用(Hadoop1中虽然有个SecorndaryNameNo...

使用Wordpress搭建一个属于自己的网站

现在开源的博客很多,但是考虑到wordpress对网站的seo做的很好,插件也多。并且全世界流量排名前1000万的网站有33.4%是用Wordpress搭建的!所以尝试用Wordpress搭建一个网站...

Centos 安装 Jenkins(centos 安装ssh)

1、Java安装查看系统是否已安装Javayumlistinstalled|grepjava...

Java教程:gitlab-使用入门(java中的git)

1导读本教程主要讲解了GitLab在项目的环境搭建和基本的使用,可以帮助大家在企业中能够自主搭建GitLab服务,并且可以GitLab中的组、权限、项目自主操作...

Dockerfile部署Java项目(docker部署java应用)

1、概述本文主要会简单介绍什么是Docker,什么是Dockerfile,如何安装Docker,Dockerfile如何编写,如何通过Dockerfile安装jar包并外置yaml文件以及如何通过do...

如何在Eclipse中搭建Zabbix源码的调试和开发环境

Zabbix是一款非常优秀的企业级软件,被设计用于对数万台服务器、虚拟机和网络设备的数百万个监控项进行实时监控。Zabbix是开放源码和免费的,这就意味着当出现bug时,我们可以很方便地通过调试源码来...

Java路径-02-Java环境配置(java环境搭建及配置教程)

1Window环境配置1.1下载...

35.Centos中安装python和web.py框架

文章目录前言1.Centos7python:2.Centos8python:3.进行下载web.py框架然后应用:4.安装好之后进行验证:5.总结:前言...

《我的世界》服务器搭建(我的世界服务器如何搭建)

1.CentOS7环境1.1更改YUM源#下载YUM源文件curl-o/etc/yum.repos.d/CentOS-Base.repohttps://mirrors.aliyun.com...

CentOS 7 升级 GCC 版本(centos7.4升级7.5)

1.GCC工具介绍GCC编译器:...

Linux安装Nginx详细教程(linux安装配置nginx)

环境准备1.因为Nginx依赖于gcc的编译环境,所以,需要安装编译环境来使Nginx能够编译起来。命令:yuminstallgcc-c++显示完毕,表示安装完成:2.Nginx的http模块需要...

取消回复欢迎 发表评论: