Linux RPM 软件包管理

点击访问 Linux 命令大全 >>

前面章节介绍了 deb 软件包的管理,以及 deb 管理工具 dpkg 命令。本章将介绍 rpm 包,以及 rpm 包的管理工具 rpm 命令。

rpm 包介绍

RPM 是 Red-Hat Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了 RedHat 的标志。但是其原始设计理念是开放式的,包括 OpenLinux、S.u.S.E. 以及 Turbo Linux 等 Linux 的分发版本都有采用,可以算是公认的行业标准了。

rpm 命令详解

RPM Package Manager (RPM) 是一个强大的命令行驱动的软件包管理工具,用来安装、卸载、校验、查询和更新 Linux 系统上的软件包。语法如下:

rpm [-acdhilqRsv]
	[-b<完成阶段><套间档>+]
	[-e<套件挡>]
	[-f<文件>+]
	[-i<套件档>]
	[-p<套件档>+]
	[-U<套件档>]
	[-vv]
	[--addsign<套件档>+]
	[--allfiles]
	[--allmatches]
	[--badreloc]
	[--buildroot<根目录>]
	[--changelog]
	[--checksig<套件档>+]
	[--clean]
	[--dbpath<数据库目录>]
	[--dump]
	[--excludedocs]
	[--excludepath<排除目录>]
	[--force]
	[--ftpproxy<主机名称或IP地址>]
	[--ftpport<通信端口>]
	[--help]
	[--httpproxy<主机名称或IP地址>]
	[--httpport<通信端口>]
	[--ignorearch]
	[--ignoreos]
	[--ignoresize]
	[--includedocs]
	[--initdb]
	[justdb]
	[--nobulid]
	[--nodeps]
	[--nofiles]
	[--nogpg]
	[--nomd5]
	[--nopgp]
	[--noorder]
	[--noscripts]
	[--notriggers]
	[--oldpackage]
	[--percent]
	[--pipe<执行指令>]
	[--prefix<目的目录>]
	[--provides]
	[--queryformat<档头格式>]
	[--querytags][--rcfile<配置档>]
	[--rebulid<套件档>]
	[--rebuliddb]
	[--recompile<套件档>]
	[--relocate<原目录>=<新目录>]
	[--replacefiles]
	[--replacepkgs]
	[--requires]
	[--resign<套件档>+]
	[--rmsource]
	[--rmsource<文件>]
	[--root<根目录>]
	[--scripts]
	[--setperms]
	[--setugids]
	[--short-circuit]
	[--sign]
	[--target=<安装平台>+]
	[--test]
	[--timecheck<检查秒数>]
	[--triggeredby<套件档>]
	[--triggers][--verify]
	[--version]
	[--whatprovides<功能特性>]
	[--whatrequires<功能特性>]

参数说明:

  • -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  详细显示指令执行过程,便于排错。

  • -addsign<套件档>+  在指定的套件里加上新的签名认证。

  • --allfiles  安装所有文件。

  • --allmatches  删除符合指定的套件所包含的文件。

  • --badreloc  发生错误时,重新配置文件。

  • --buildroot<根目录>  设置产生套件时,欲当作根目录的目录。

  • --changelog  显示套件的更改记录。

  • --checksig<套件档>+  检验该套件的签名认证。

  • --clean  完成套件的包装后,删除包装过程中所建立的目录。

  • --dbpath<数据库目录>  设置欲存放RPM数据库的目录。

  • --dump  显示每个文件的验证信息。本参数需配合"-l"参数使用。

  • --excludedocs  安装套件时,不要安装文件。

  • --excludepath<排除目录>  忽略在指定目录里的所有文件。

  • --force  强行置换套件或文件。

  • --ftpproxy<主机名称或IP地址>  指定FTP代理服务器。

  • --ftpport<通信端口>  设置FTP服务器或代理服务器使用的通信端口。

  • --help  在线帮助。

  • --httpproxy<主机名称或IP地址>  指定HTTP代理服务器。

  • --httpport<通信端口>  设置HTTP服务器或代理服务器使用的通信端口。

  • --ignorearch  不验证套件档的结构正确性。

  • --ignoreos  不验证套件档的结构正确性。

  • --ignoresize  安装前不检查磁盘空间是否足够。

  • --includedocs  安装套件时,一并安装文件。

  • --initdb  确认有正确的数据库可以使用。

  • --justdb  更新数据库,当不变动任何文件。

  • --nobulid  不执行任何完成阶段。

  • --nodeps  不验证套件档的相互关联性。

  • --nofiles  不验证文件的属性。

  • --nogpg  略过所有GPG的签名认证。

  • --nomd5  不使用MD5编码演算确认文件的大小与正确性。

  • --nopgp  略过所有PGP的签名认证。

  • --noorder  不重新编排套件的安装顺序,以便满足其彼此间的关联性。

  • --noscripts  不执行任何安装Script文件。

  • --notriggers  不执行该套件包装内的任何Script文件。

  • --oldpackage  升级成旧版本的套件。

  • --percent  安装套件时显示完成度百分比。

  • --pipe<执行指令>  建立管道,把输出结果转为该执行指令的输入数据。

  • --prefix<目的目录>  若重新配置文件,就把文件放到指定的目录下。

  • --provides  查询该套件所提供的兼容度。

  • --queryformat<档头格式>  设置档头的表示方式。

  • --querytags  列出可用于档头格式的标签。

  • --rcfile<配置文件>  使用指定的配置文件。

  • --rebulid<套件档>  安装原始代码套件,重新产生二进制文件的套件。

  • --rebuliddb  以现有的数据库为主,重建一份数据库。

  • --recompile<套件档>  此参数的效果和指定"--rebulid"参数类似,当不产生套件档。

  • --relocate<原目录>=<新目录>  把本来会放到原目录下的文件改放到新目录。

  • --replacefiles  强行置换文件。

  • --replacepkgs  强行置换套件。

  • --requires  查询该套件所需要的兼容度。

  • --resing<套件档>+  删除现有认证,重新产生签名认证。

  • --rmsource  完成套件的包装后,删除原始代码。

  • --rmsource<文件>  删除原始代码和指定的文件。

  • --root<根目录>  设置欲当作根目录的目录。

  • --scripts  列出安装套件的Script的变量。

  • --setperms  设置文件的权限。

  • --setugids  设置文件的拥有者和所属群组。

  • --short-circuit  直接略过指定完成阶段的步骤。

  • --sign  产生PGP或GPG的签名认证。

  • --target=<安装平台>+  设置产生的套件的安装平台。

  • --test  仅作测试,并不真的安装套件。

  • --timecheck<检查秒数>  设置检查时间的计时秒数。

  • --triggeredby<套件档>  查询该套件的包装者。

  • --triggers  展示套件档内的包装Script。

  • --verify  此参数的效果和指定"-q"参数相同。

  • --version  显示版本信息。

  • --whatprovides<功能特性>  查询该套件对指定的功能特性所提供的兼容度。

  • --whatrequires<功能特性>  查询该套件对指定的功能特性所需要的兼容度。

rpm 命令实例

下面 rpm 实例将以 tree 软件包作为操作实例,其中:

软件包全称:vim-8.2.1253-1.1.x86_64.rpm

软件包下载地址:https://rpmfind.net/linux/centos/7.8.2003/os/x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm

安装软件

语法:rpm -ivh *.rpm(注意,我们可以使用 --force 强制安装,例如:rpm --force -ivh xxx.rpm)

## 安装 tree 软件
[root@localhost ~]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm
准备中...                          ################################# [100%]
        软件包 tree-1.6.0-10.el7.x86_64 已经安装

## 使用 tree 查看当前目录的树形结构
[root@localhost ~]# tree
.
├── anaconda-ks.cfg
├── data1
├── data2
│   └── data.txt
├── hello_bak.txt
├── tmp
│   ├── data
│   │   ├── hello_bak.txt
│   │   ├── hello.txt
│   │   └── hello.txt~
│   └── data1
│       └── data.txt
├── tree-1.6.0-10.el7.x86_64.rpm
└── vim-8.2.1253-1.1.x86_64.rpm

5 directories, 9 files

升级软件包

语法:rpm -Uvh package_name

[root@localhost ~]# rpm -Uvh tree-1.6.0-10.el7.x86_64.rpm
准备中...                          ################################# [100%]
正在升级/安装...
   1:tree-1.6.0-10.el7                ################################# [ 50%]
正在清理/删除...
   2:tree-1.5.3-3.el6                 ################################# [100%]

列出所有安装过的 rpm 包

语法:rpm -qa

[root@localhost ~]# rpm -qa
yum-plugin-fastestmirror-1.1.31-50.el7.noarch
grub2-common-2.02-0.76.el7.centos.noarch
linux-firmware-20180911-69.git85c5d90.el7.noarch
kbd-legacy-1.15.5-15.el7.noarch
firewalld-filesystem-0.5.3-5.el7.noarch
tzdata-2018e-3.el7.noarch
kbd-1.15.5-15.el7.x86_64
bash-4.2.46-31.el7.x86_64
tuned-2.10.0-6.el7.noarch
ncurses-5.9-14.20130511.el7_4.x86_64
......

查询指定的已安装的软件包

语法:rpm -ql package_name

[root@localhost ~]# rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.6.0
/usr/share/doc/tree-1.6.0/LICENSE
/usr/share/doc/tree-1.6.0/README
/usr/share/man/man1/tree.1.gz

卸载软件包

语法:rpm -e package_name

## 卸载 tree 软件包
[root@localhost ~]# rpm -e tree

## 验证卸载是否成功
[root@localhost ~]# rpm -ql tree
未安装软件包 tree

如何获得某个软件包的文件全名?

语法:rpm -q package_name

[root@localhost ~]# rpm -q tree
tree-1.6.0-10.el7.x86_64

哪个软件包包含这个程序?

  • rpm -qf `which 程序名`    #返回软件包的全名

  • rpm -qif `which 程序名`   #返回软件包的有关信息

  • rpm -qlf `which 程序名`   #返回软件包的文件列表

[root@localhost ~]# rpm -qif `which tree`
Name        : tree
Version     : 1.6.0
Release     : 10.el7
Architecture: x86_64
Install Date: 2020年08月01日 星期六 16时47分58秒
Group       : Applications/File
Size        : 89505
License     : GPLv2+
Signature   : RSA/SHA256, 2014年07月04日 星期五 13时36分46秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : tree-1.6.0-10.el7.src.rpm
Build Date  : 2014年06月10日 星期二 03时28分53秒
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <https://bugs.centos.org>
Vendor      : CentOS
URL         : https://mama.indstate.edu/users/ice/tree/
Summary     : File system tree viewer
Description :
The tree utility recursively displays the contents of directories in a
tree-like format.  Tree is basically a UNIX port of the DOS tree
utility.

[root@localhost ~]# rpm -qf `which sshd`
openssh-server-7.4p1-16.el7.x86_64
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号