rpm 命令整理

文前说明

作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。

RPM 是 Red Hat Package Manager 的缩写,本意是 Red Hat 软件包管理,是 Red Hat 贡献出来的软件包管理,在Fedora 、Redhat、Mandriva、SuSE、YellowDog 等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用。

RPM 名称规则说明

  • 例如:tagsoup-1.2.1-8.el7.noarch.rpm
套件名称 版本信息 释出次数 适用系统 适用平台
tagsoup 1.2.1 8 el7 noarch
  • 除了适合的平台、系统、副档名外,主要是以 '-' 隔开各个部分。

  • 释出版本次数:由于有某些 bug 或者是安全上的顾虑,所以必须要重新设定当初打包时候的设定参数, 设定完成之后重新编译并打包成 RPM 档案。

  • i386 软件包可以在任何 x86 平台下使用,无论是 i686 还是 x86_64 的机器。

  • 而 i686 的软件包一般都对 cpu 进行了优化,具有向后的兼容性,不具有向前的兼容性。

RPM 包管理的作用

  • 可以安装、删除、升级和管理软件(支持在线安装和升级)。
  • 通过 RPM 包可以知道包含文件,也能知道某文件所属 RPM 软件包。
  • 可查询软件包是否已经安装及其版本。
  • 开发者可以把程序打包为 RPM 包发布。
  • 软件包签名 GPG 和 MD5 导入、验证和签名发布。
  • 依赖性检查,软件包是否兼容检查等。

RPM 包的使用权限

  • RPM 软件的安装、删除、更新只有 root 权限才能操作。
  • 查询功能任何用户都可以操作。
  • 普通用户拥有安装目录的权限,也可以进行安装。

RPM 常用参数

参数 说明
-a 查询所有套件
-b <完成阶段><软件包>+ 或 -t <完成阶段><软件包>+ 设置软件包的完成阶段,并指定软件包的文件名称
-c 只列出组态配置文件,本参数需配合 "-l" 参数使用
-d 只列出文本文件,本参数需配合 "-l" 参数使用
-e <软件包> 或 --erase <软件包> 删除指定的软件
-f <文件>+ 查询拥有指定文件的软件包
-h 或 --hash 软件包安装时列出标记
-i 显示软件包的相关信息
-i <软件包> 或 --install <软件包> 安装指定的软件包
-l 显示软件包的文件列表
-p <软件包>+ 查询指定的 RPM 软件包
-q 使用询问模式,当遇到任何问题时,rpm 指令会先询问用户
-R 显示软件包的关联性信息
-s 显示文件状态,本参数需配合 "-l" 参数使用
-U <软件包>或 --upgrade <软件包> 升级指定的软件包
-v 显示指令执行过程
-vv 详细显示指令执行过程,便于排错。

RPM 资料库初始化

[root@localhost rpm]# rpm --initdb
[root@localhost rpm]# rpm --rebuilddb
命令 说明
--rebuilddb 重建 RPM 资料库
--initdb 创建一个新的 RPM 资料库
--quiet 尽可能的减少输出
--help 显示帮助文件
--version 显示 RPM 的当前版本
  • 系统初装时需要执行 updatedb,每隔一段时间也需要执行一次,以保持已经安装的软件库信息最新。updatedb 是 slocate 软件包所有,需要安装 slocate 软件包。
[root@localhost rpm]# updatedb
  • 可以通过 locate 查询软件或文件的安装路径。
[root@localhost rpm]# locate <软件名或文件名>

RPM 软件包查询

  • 命令格式:rpm {-q|--query} [select-options] [query-options]
查询已安装的软件
命令 说明 例子
rpm -q <软件名> 查询系统是否安装了指定名称的软件 rpm -q gaim
rpm -qa 查询系统中所有安装的软件 rpm -qa
rpm -qf <文件名> 查询已安装的文件属于哪个软件包(需要指出文件所在绝对路径) rpm -qf /usr/share/pixmaps/javaws.png
rpm -ql <软件名> 查询已安装的软件包的安装位置 rpm -ql gaim
rpm -qi <软件名> 查询已安装的软件包的信息 rpm -qc gaim
rpm -qd <软件名> 查询已安装的软件包的文档的安装位置 rpm -qd gaim
rpm -qR <软件名> 查询已安装的软件包所依赖的软件和文件 rpm -qR rpm-python
查询未安装的软件
命令 说明 例子
rpm -qpi <软件包名> 查看一个软件包的用途、版本等信息 rpm -qpi zip-3.0-11.el7.x86_64.rpm
rpm -qpl <软件包名> 查看一个软件包所包含的文件 rpm -qpl zip-3.0-11.el7.x86_64.rpm
rpm -qpd <软件包名> 查看一个软件包文档所在位置 rpm -qpd zip-3.0-11.el7.x86_64.rpm
rpm -qpc <软件包名> 查看一个软件包的配置文件 rpm -qpc zip-3.0-11.el7.x86_64.rpm
rpm -qpR <软件包名> 查看一个软件包的依赖关系 rpm -qpR zip-3.0-11.el7.x86_64.rpm
查询命令 - 详细选项 说明
-p (or "-'') 查询软件包的文件
-f 查询属于哪个软件包
-a 查询所有安装的软件包
-g 查询属于组的软件包
--whatprovides 查询提供了功能的软件包
--whatrequires 查询所有需要功能的软件包
查询命令 - 信息选项 说明
i 显示软件包的概要信息
-l 显示软件包中的文件列表
-c 显示配置文件列表
-d 显示文档文件列表
-s 显示软件包中文件列表并显示每个文件的状态
--scripts 显示安装、卸载、校验脚本
--queryformat (or --qf) 以用户指定的方式显示查询信息
--dump 显示每个文件的所有已校验信息
--provides 显示软件包提供的功能
--requires (or -R) 显示软件包所需的功能
查询命令 - 通用选项 说明
-v 显示附加信息
-vv 显示调试信息
--root 让 RPM 将指定的路径做为 "根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile 设置 rpmrc 文件为
--dbpath 设置 RPM 资料库存所在的路径为

RPM 软件包安装

  • 命令格式:rpm -i(or --install) [options] file1.rpm ... fileN.rpm
[root@localhost rpm]# rpm -ivh zip-3.0-11.el7.x86_64.rpm
安装命令 - 详细选项 说明
-h (或 --hash) 安装时输出 hash 记号 ( "#'' )
--test 只对安装进行测试,并不实际安装
--percent 以百分比的形式输出安装的进度
--excludedocs 不安装软件包中的文档文件
--includedocs 安装文档
--replacepkgs 强制重新安装已经安装的软件包
--replacefiles 替换属于其它软件包的文件
--force 忽略软件包及文件的冲突
--noscripts 不运行预安装和后安装脚本
--prefix 将软件包安装到指定的路径下
--ignorearch 不校验软件包的结构
--ignoreos 不检查软件包运行的操作系统
--nodeps 不检查依赖性关系
--ftpproxy 用作为 FTP 代理
--ftpport 指定 FTP 的端口号为
安装命令 - 通用选项 说明
-v 显示附加信息
-vv 显示调试信息
--root 让 RPM 将指定的路径做为 "根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile 设置 rpmrc 文件为
--dbpath 设置 RPM 资料库存所在的路径为
RPM 软件包网络安装和查询
[root@localhost rpm]# rpm -qpi http://mirrors.kernel.org/fedora/core/4/i386/os/ Fedora/RPMS/gaim-1.3.0-1.fc4.i386.rpm
[root@localhost rpm]# rpm -ivh http://mirrors.kernel.org/fedora/core/4/i386/os/ Fedora/RPMS/gaim-1.3.0-1.fc4.i386.rpm

软件包升级

  • 命令格式:rpm -U(or --upgrade) [options] file1.rpm ... fileN.rpm
[root@localhost rpm]# rpm -Uvh zip-3.0-11.el7.x86_64.rpm
升级命令 - 详细选项 说明
-h (or --hash) 升级时输出 hash 记号 ( "#'' )
--oldpackage 允许 "升级" 到一个老版本
--test 只进行升级测试
--excludedocs 不安装软件包中的文档文件
--includedocs 安装文档
--replacepkgs 强制重新安装已经安装的软件包
--replacefiles 替换属于其它软件包的文件
--force 忽略软件包及文件的冲突
--percent 以百分比的形式输出升级的进度
--noscripts 不运行预安装和后安装脚本
--prefix 将软件包安装到指定的路径下
--ignorearch 不校验软件包的结构
--ignoreos 不检查软件包运行的操作系统
--nodeps 不检查依赖性关系
--ftpproxy 用作为 FTP 代理
--ftpport 指定 FTP 的端口号为
升级命令 - 通用选项 说明
-v 显示附加信息
-vv 显示调试信息
--root 让 RPM 将指定的路径做为 "根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile 设置 rpmrc 文件为
--dbpath 设置 RPM 资料库存所在的路径为

软件包删除

  • 命令格式:rpm -e(or --erase) [options] pkg1 ... pkgN
[root@localhost rpm]# rpm -e zip
删除命令 - 详细选项 说明
--test 只执行删除的测试
--noscripts 不运行预安装和后安装脚本程序
--nodeps 不检查依赖性
删除命令 - 通用选项 说明
-vv 显示调试信息
--root 让 RPM 将指定的路径做为 "根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile 设置 rpmrc 文件为
--dbpath 设置 RPM 资料库存所在的路径为

RPM 软件包校验

已安装软件包校验
  • 命令格式: rpm -V(or --verify, or -y) [options]
校验命令 - 软件包选项 说明
-p 校验包文件
-f 校验所属的软件包
-a 校验所有的软件包
-g 校验所有属于组的软件包
校验命令 - 详细选项 说明
--noscripts 不运行校验脚本
--nodeps 不校验依赖性
--nofiles 不校验文件属性
校验命令 - 通用选项 说明
-v 显示附加信息
-vv 显示调试信息
--root 让 RPM 将指定的路径做为 "根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile 设置 rpmrc 文件为
--dbpath 设置 RPM 资料库存所在的路径为
未安装软件包文件校验

命令格式: rpm -K(or --checksig) [options] file1.rpm ... fileN.rpm

校验命令 - 详细选项 说明
--nopgp 不校验 PGP 签名
校验命令 - 通用选项 说明
-v 显示附加信息
-vv 显示调试信息
--rcfile 设置 rpmrc 文件为

RPM 软件包导入签名

  • rpm --import <签名文件>
[root@localhost rpm]# rpm --import RPM-GPG-KEY
[root@localhost rpm]# rpm --import RPM-GPG-KEY-fedora

RPM 软件包文件抽取

  • 抽取出来的文件就在当前用户操作目录中的 usr 和 etc 中。

  • 命令格式: rpm2cpio file.rpm |cpio -div

[root@localhost rpm]# rpm2cpio gaim-1.3.0-1.fc4.i386.rpm |cpio -div

RPM 的配置文件

  • rpm 包管理的配置文件是 rpmrc
[root@localhost rpm]# locate rpmrc
/usr/lib/rpm/rpmrc
/usr/lib/rpm/redhat/rpmrc
  • 可以通过 rpm --showrc 查看配置文件内容

SRPM 的安装

格式 说明
RPM(.rpm) 已经经过编译且包装完成的 rpm 档案。
SRPM(.src.rpm) 包含未编译的原始码资讯。
  • 方法一
  1. 执行 rpm -i your-package.src.rpm
  2. cd /usr/src/redhat/SPECS
  3. rpmbuild -bp your-package.specs 一个和软件包同名的 specs 文件
  4. cd /usr/src/redhat/BUILD/your-package/ 一个和软件包同名的目录
  5. ./configure 这一步和编译普通的源码软件一样,可以加上参数
  6. make
  7. make install
  • 方法二
  1. 执行 rpm -i you-package.src.rpm
  2. cd /usr/src/redhat/SPECS (前两步和方法一相同)
  3. rpmbuild -bb your-package.specs 一个和软件包同名的 specs 文件
  4. 在 /usr/src/redhat/RPM/<平台>/(根据具体,可以是 i686、noarch、i386 等等)下,有一个新的 rpm 包这个是编译好的二进制文件,可以直接执行 rpm -i new-package.rpm

执行 rpmbuild -bb your-package.specs 出现错误 Error: Architecture is not included : i386,此错误表示该软件包不支持 i386 平台(默认的 rpmbuild 为 i386 平台),需指定到别的平台。

rpmbuild –bb –target=i686 your-package.specs

你可能感兴趣的:(rpm 命令整理)