1. rpm 命令常用选项说明

1.1 功能模式选项

命令 解释
-i --install 安装软件,例:rpm -ivh tree-1.6.0-10.el7.x86_64.rpm
-U --upgrade 安装或升级软件,安装有旧版软件包,则升级,如果不存在旧版软件包,则执行安装此软件包
-F --freshen 升级软件 ,安装有旧版软件包,则升级,如果不存在旧版软件包,则不执行升级操作
-e --erase 卸载软件
-q --query 查询模式,如:查看是否安装 tree 包 rpm -q tree
-V --verify 验证模式

1.2 通用选项

命令 解释
-v --verbose 显示附加信息
-vv 比 -v 显示更多的信息
-h 以 ### 显示程序包管理执行进度

1.3 适用于安装、升级、卸载的常用子选项

命令 解释
--test 测试,但不真正执行,可以用来查看是否有依赖的软件包关系
--nodeps 忽略依赖关系。有可能导致软件无法正常工作
--replacepkgs 强制重新安装已经安装的软件包
--replacefiles 如果要安装的软件包中有文件已在安装其他包时被安装,并不会继续安装,使用此选项可以覆盖此文件
--oldpackage 如果使用 -I 选项想要安装一个比当前版本更低的版本的软件包,则会提示已经安装并失败。可使用此选项
--nosignature 不检查来源合法性
--nodigest 不检查包完整性
--force 强制安装、升级、卸载
--noscripts 不执行软件包内的所有脚本
--nopre 不执行软件包内的安装前脚本
--nopost 不执行软件包内的安装后脚本
--nopreun 不执行软件包内的卸载前脚本
--nopostun 不执行软件包内的卸载后脚本
--justdb 在 RPM 数据库受损或某些原因产生错误时,此选项用来更新软件在数据库内的相关信息

1.4 适用于查询模式的常用子选项

命令 解释
-a 列出所有通过 rpm 或 yum 安装在本机的软件名称
-i 列出已经安装在本机的指定软件的详细信息
-l 列出指定的软件包安装后生成的所有文件
-c 列出已经安装在本机的指定软件在 /etc 下的配置文件
-d 列出已经安装在本机的指定软件包含的文档
--scripts 列出已经安装在本机的指定软件的安装时的脚本
-p 针对尚未安装的软件包文件做查询操作,可以在 p 后跟上上面的选项,选项后面跟软件包文件名
-f 文件名 列出该文件来自哪个已经安装的软件包

1.5 适用于验证模式的常用子选项

命令 解释
-a 列出系统中所有在安装后被修改过的文件
-f 列出某个文件所属的包文件包含的哪些文件在安装后被修改过
-p 列出指定 rpm 软件包文件包含的哪些文件被修改过

2. 常用示例

2.1 安装 rpm -i 需要安装的包文件名

  1. rpm -i example.rpm # 安装 example.rpm 包;
  2. rpm -iv example.rpm # 安装 example.rpm 包并在安装过程中显示正在安装的文件信息;
  3. rpm -ivh example.rpm # 安装 example.rpm 包并在安装过程中显示正在安装的文件信息及安装进度;

示例

  1. # 查看是否安装 vsftpd 包
  2. [root@centos /]#rpm -q vsftpd
  3. package vsftpd is not installed
  4. [root@centos /]#ls
  5. bin dev home media proc sbin sys var
  6. boot etc lib mnt root software tmp vsftpd-3.0.3-32.el8.x86_64.rpm
  7. data f1.txt lib64 opt run srv usr z.txt
  8. # 安装 vsftpd 包并在安装过程中显示正在安装的文件信息及安装进度;
  9. [root@centos /]#rpm -ivh vsftpd-3.0.3-32.el8.x86_64.rpm
  10. Verifying... ################################# [100%]
  11. Preparing... ################################# [100%]
  12. Updating / installing...
  13. 1:vsftpd-3.0.3-32.el8 ################################# [100%]
  14. [root@centos /]#

2.2 查看软件包的说明信息

  1. [root@centos /]#rpm -qi vsftpd
  2. Name : vsftpd
  3. Version : 3.0.3
  4. Release : 32.el8
  5. Architecture: x86_64
  6. Install Date: Sat Mar 27 11:34:49 2021
  7. Group : System Environment/Daemons
  8. Size : 351530
  9. License : GPLv2 with exceptions
  10. Signature : RSA/SHA256, Wed Apr 29 00:08:42 2020, Key ID 05b555b38483c65d
  11. Source RPM : vsftpd-3.0.3-32.el8.src.rpm
  12. Build Date : Mon Apr 27 10:04:03 2020
  13. Build Host : x86-01.mbox.centos.org
  14. Relocations : (not relocatable)
  15. Packager : CentOS Buildsys <bugs@centos.org>
  16. Vendor : CentOS
  17. URL : https://security.appspot.com/vsftpd.html
  18. Summary : Very Secure Ftp Daemon
  19. Description :
  20. vsftpd is a Very Secure FTP daemon. It was written completely from
  21. scratch.
  22. [root@centos /]#

2.3 查询包中包含的文件列表

  1. [root@centos /]#rpm -ql vsftpd
  2. /etc/logrotate.d/vsftpd
  3. /etc/pam.d/vsftpd
  4. /etc/vsftpd
  5. /etc/vsftpd/ftpusers
  6. /etc/vsftpd/user_list
  7. /etc/vsftpd/vsftpd.conf
  8. ...省略部分...
  9. /var/ftp
  10. /var/ftp/pub
  11. [root@centos /]#

2.4 查看是否安装某个包

  1. [root@centos /]#rpm -q wget
  2. wget-1.19.5-10.el8.x86_64
  3. # 如果不记得软件包的准确名称,可以使用如下命令组合查询
  4. [root@centos /]#rpm -qa | grep get
  5. selinux-policy-targeted-3.14.3-54.el8_3.2.noarch
  6. gettext-libs-0.19.8.1-17.el8.x86_64
  7. gettext-0.19.8.1-17.el8.x86_64
  8. wget-1.19.5-10.el8.x86_64
  9. [root@centos /]#
  10. # 系统中安装了那些rpm软件包
  11. rpm -qa

2.5 查询系统内指定文件来自哪个软件包

某个程序是哪个软件包安装的,或者哪个软件包包含这个程序

  1. [root@centos /]#rpm -qf `which tree`
  2. tree-1.7.0-15.el8.x86_64
  3. [root@centos /]#rpm -qf /etc/passwd
  4. setup-2.12.2-6.el8.noarch
  5. [root@centos /]#rpm -qlf `which tree`
  6. /usr/bin/tree
  7. /usr/lib/.build-id
  8. /usr/lib/.build-id/d8
  9. /usr/lib/.build-id/d8/6d516d7cb07fb9334cb268af808119e33a5ac5
  10. /usr/share/doc/tree
  11. /usr/share/doc/tree/LICENSE
  12. /usr/share/doc/tree/README
  13. /usr/share/man/man1/tree.1.gz
  14. [root@centos /]#
  15. [root@centos /]#

2.6 查询指定的 rpm 软件包文件中自带的脚本

  1. [root@centos /]#rpm -qp --scripts vsftpd-3.0.3-32.el8.x86_64.rpm
  2. postinstall scriptlet (using /bin/sh): # 安装后脚本
  3. if [ $1 -eq 1 ] ; then
  4. # Initial installation
  5. systemctl --no-reload preset vsftpd.service &>/dev/null || :
  6. fi
  7. preuninstall scriptlet (using /bin/sh):
  8. if [ $1 -eq 0 ] ; then
  9. # Package removal, not upgrade
  10. systemctl --no-reload disable --now vsftpd.service &>/dev/null || :
  11. fi
  12. if [ $1 -eq 0 ] ; then
  13. # Package removal, not upgrade
  14. systemctl --no-reload disable --now vsftpd.target &>/dev/null || :
  15. fi
  16. postuninstall scriptlet (using /bin/sh):
  17. if [ $1 -ge 1 ] ; then
  18. # Package upgrade, not uninstall
  19. systemctl try-restart vsftpd.service &>/dev/null || :
  20. fi
  21. [root@centos /]#

2.7 查询指定已经安装的软件的配置文件存放路径

  1. [root@centos /]#rpm -qc vsftpd
  2. /etc/logrotate.d/vsftpd
  3. /etc/pam.d/vsftpd
  4. /etc/vsftpd/ftpusers
  5. /etc/vsftpd/user_list
  6. /etc/vsftpd/vsftpd.conf
  7. [root@centos /]#

2.8 查询一个文件被哪些软件依赖

  1. [root@centos /]#rpm -q --whatrequires /bin/bash
  2. grub2-common-2.02-90.el8_3.1.noarch
  3. iptables-1.8.4-15.el8_3.3.x86_64
  4. iptables-ebtables-1.8.4-15.el8_3.3.x86_64
  5. platform-python-3.6.8-31.el8.x86_64
  6. ... 省略部分内容 ...
  7. [root@centos /]#

2.9 查询一种功能来自哪个软件包提供

  1. [root@centos /]#rpm -q --whatprovides acl
  2. acl-2.2.53-1.el8.x86_64
  3. [root@centos /]#rpm -q --whatprovides wget
  4. wget-1.19.5-10.el8.x86_64
  5. [root@centos /]#rpm -q --whatprovides vsftpd
  6. vsftpd-3.0.3-32.el8.x86_64
  7. [root@centos /]#rpm -q --whatprovides tree
  8. tree-1.7.0-15.el8.x86_64
  9. [root@centos /]#

2.10 提取 rpm 软件包内指定文件

  1. # 使用 rpm2cpio 命令,将 rpm 软件包转换为 cpio 格式的文件
  2. # 先查询 rpm 包所有的文件是否有自己需要的
  3. [root@centos /tmp]#pwd
  4. /tmp
  5. [root@centos /tmp]#rpm -qpl vsftpd-3.0.3-32.el8.x86_64.rpm
  6. /etc/logrotate.d/vsftpd
  7. /etc/pam.d/vsftpd
  8. /etc/vsftpd # 这是需要取出的文件
  9. [root@centos /tmp]#rpm2cpio vsftpd-3.0.3-32.el8.x86_64.rpm | cpio -ivd ./etc/vsftpd
  10. ./etc/vsftpd
  11. 706 blocks
  12. [root@centos /tmp]#
  13. # 此时,文件会在运行 cpio -ivd 命令的目录下,目录结构被完整的提取出来
  14. [root@centos /tmp]#pwd
  15. /tmp
  16. [root@centos /tmp]#ls /tmp/
  17. etc vsftpd-3.0.3-32.el8.x86_64.rpm
  18. [root@centos /tmp]#ls /tmp/etc/
  19. vsftpd
  20. [root@centos /tmp]#

提示:cpio 提供支持文件通配符,比如下面示例

  1. rpm2cpio vsftpd-3.0.3-32.el8.x86_64.rpm | cpio -ivd *.mo

2.11 查看软件包安装后产生的文件是否发生变化

  1. [root@centos /tmp]#vim /etc/vsftpd/vsftpd.conf
  2. [root@centos /tmp]#
  3. [root@centos /tmp]#rpm -V vsftpd
  4. S.5....T. c /etc/vsftpd/vsftpd.conf
  5. [root@centos /tmp]#

上面每个位置的字符表示含义如下

字符 含义
S 表示对应文件的大小(Size)不一致
M 表示对应文件的类型或属性不一致
5 表示对应文件的(MD5)哈希值不一致
D 表示文件的 major 和 minor 号不一致
L 表示文件的符号连接内容不一致
U 表示文件的所有者(owner)不一致
G 表示文件的所属组(group)不一致
T 表示文件的修改时间不一致
. 表示当前位置代表的字符含义一致

c 所在的位置表示文件类型

字符 含义
c 配置文件
d 文件数据文件
g 该文件不属于某个文件(极少情况)
l 许可证文件(license file)
r 自述文件(READ ME)

注意:如果一个二进制文件校验不一致,就要注意是否被篡改,需要仔细的检查是否被入侵

2.12 卸载软件

  1. rpm -e --nodeps 要卸载的软件包
  2. rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.i686

3. rpm 相关数据库

RPM 自身维护了一个数据库(默认存放目录 /var/lib/rpm),用于记录所有通过 RPM 安装的软件包及其文件信息等元数据。RPM 数据库提供多种形式的查询功能,同时也提供软件包和相关文件的验证功能。因此,这个数据库十分重要,下面我们结合一些实际的例子来重点介绍 RPM 数据库备份与恢复

查看 RPM 数据库相关文件

  1. [root@centos /tmp]#ls -lh /var/lib/rpm
  2. total 55M
  3. -rw-r--r--. 1 root root 1.7M Mar 27 11:34 Basenames
  4. -rw-r--r--. 1 root root 8.0K Mar 24 16:16 Conflictname
  5. -rw-r--r--. 1 root root 600K Mar 27 11:34 Dirnames
  6. -rw-r--r--. 1 root root 8.0K Mar 24 12:19 Enhancename
  7. -rw-r--r--. 1 root root 8.0K Mar 24 12:19 Filetriggername
  8. -rw-r--r--. 1 root root 12K Mar 27 11:34 Group
  9. -rw-r--r--. 1 root root 12K Mar 27 11:34 Installtid
  10. -rw-r--r--. 1 root root 28K Mar 27 11:34 Name # 包名查询
  11. -rw-r--r--. 1 root root 16K Mar 24 16:16 Obsoletename
  12. -rw-r--r--. 1 root root 49M Mar 27 11:34 Packages # 包含了每个软件包的信息,rpm -qa/qi 等命令的结果来源
  13. -rw-r--r--. 1 root root 2.7M Mar 27 11:34 Providename
  14. -rw-r--r--. 1 root root 8.0K Mar 24 12:19 Recommendname
  15. -rw-r--r--. 1 root root 144K Mar 27 11:34 Requirename
  16. -rw-r--r--. 1 root root 40K Mar 27 11:34 Sha1header
  17. -rw-r--r--. 1 root root 24K Mar 27 11:34 Sigmd5
  18. -rw-r--r--. 1 root root 8.0K Mar 24 16:00 Suggestname
  19. -rw-r--r--. 1 root root 8.0K Mar 24 12:19 Supplementname
  20. -rw-r--r--. 1 root root 8.0K Mar 24 16:00 Transfiletriggername
  21. -rw-r--r--. 1 root root 8.0K Mar 24 14:15 Triggername
  22. -rw-r--r-- 1 root root 264K Mar 27 14:08 __db.001 # rpm 数据库文件,这些文件可以使用 rpm 、rpmdb 命令进行重建
  23. -rw-r--r-- 1 root root 80K Mar 27 14:08 __db.002
  24. -rw-r--r-- 1 root root 1.3M Mar 27 14:08 __db.003
  25. [root@centos /tmp]#

rpm 命令介绍的更多相关文章

  1. rpm命令介绍

    rpm安装不能指定安装位置. 查看系统安装了哪些软件:rpm -qa  rpm -qa |grep keyword      (q:query  a 是all)   查看软件是否安装: rpm -q  ...

  2. Linux rpm 命令参数使用详解[介绍和应用]

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包 二进制包(Binary)以及源代码包(Source)两 ...

  3. Linux rpm 命令参数使用详解[介绍和应用](转)

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...

  4. Linux rpm 命令参数使用详解[介绍和应用](转)

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...

  5. Linux rpm 命令参数使用详解[介绍和应用]

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...

  6. <ZZ>Linux rpm 命令参数使用详解[介绍和应用]

    http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/08/2203153.html RPM是RedHat Package Manager ...

  7. Linux安装软件总结(二.几种安装命令介绍)

    一.rpm包安装方式步骤: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd soft.version.rpm所在 ...

  8. Linux下面使用rpm命令

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...

  9. 软件包管理 之 RPM 基础 《RPM 的介绍和应用》

    RPM 是 Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:在Fedora .Redhat.Mandriva. ...

随机推荐

  1. write a node cli tools, step by step

    write a node cli tools, step by step how to write a node cli tools node cli tools, step by step, nod ...

  2. html2Canvas to Images

    <script> $(function () { var content = document.getElementById("shareImages"); conte ...

  3. GoEasy使用阿里云OSS出现的问题

    前言:本人使用goeasy来实现微信小程序里面和其他人的im临时对话窗口,想要实现可以同时发送语音和视频.图片.表情包的话,就要通过goeasy关联到阿里云的存储对象. 报错:The OSS Acce ...

  4. 10月份上线的NGK有什么不同之处?

    近日,有小道消息传出公链项目NGK即将在10月上线的消息.各大社区纷纷开始布局,市场中关于NGK项目的消息也变得更多了起来.仅是社区热度这一点,对比之下就已经优于很多项目,那么是否还有其他优势呢?让我 ...

  5. C++算法代码——卡片游戏

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?cid=1397&pid=2 题目描述 桌上有一叠牌,从第一张牌(即位于顶面的牌)开始 ...

  6. SQL EXPLAIN解析

    本文转载自MySQL性能优化最佳实践 - 08 SQL EXPLAIN解析 什么是归并排序? 如果需要排序的数据超过了sort_buffer_size的大小,说明无法在内存中完成排序,就需要写到临时文 ...

  7. MYSQL索引优化法则

    目录 一首诗送给各位: 全值匹配我最爱,最左前缀要遵守: 带头大哥不能死,中间兄弟不能断: 索引列上少计算,范围之后全失效: Like百分写最右,覆盖索引不写星: 不等空值还有or,索引失效要少用: ...

  8. 更换 grub 主题

    默认的 grub 界面比较简陋 然后突然有想法了,想换个主题 具体操作 1.下载 grub 主题包 去这个地址下载主题(应该是这个地址): https://www.gnome-look.org/bro ...

  9. Linux graphics stack

    2D图形架构 早期Linux图形系统的显示全部依赖X Server,X Client调用Xlib提供的借口向 X Server发送渲染命令,X Server根据 X Client的命令请求向硬件设备绘 ...

  10. CSharp使用ANTLR4生成简单计算Parser

    ANTLR简介 ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, pr ...