Linux 系统 rpm 命令的使用手册

280 阅读13分钟

1. 简介

rpm是一个功能强大的包管理器,可以用来构建、安装、查询、验证、更新和删除单个软件包。一个软件包包含文件存档和用于安装和删除存档文件的元数据。元数据包括帮助脚本、文件属性和关于包的描述性信息。

包有两种类型:二进制包(用于封装要安装的软件)和源包(包含生成二进制包所需的源代码和配方)。

必须选择以下基本模式之一:查询(Query)、验证(Verify)、安装/升级/刷新/重装(Install/Upgrade/Freshen/Reinstall)、卸载(Uninstall)、设置所有者/组(Set Owners/Groups)、显示查询标签(Show Querytags)、显示配置(Show Configuration)。

2. 语法

2.1. 语法格式

查询和验证软件包:

rpm {-q|--query} [select-options] [query-options]

rpm {-V|--verify} [select-options] [verify-options]

安装、升级和移除软件包:

rpm {-i|--install} [install-options] PACKAGE_FILE ...

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts]
           [--notriggers] [--test] PACKAGE_NAME ...

其它:

rpm {--querytags|--showrc}

rpm {--setperms|--setugids} PACKAGE_NAME ...

2.2. 选项列表

select-options

[PACKAGE_NAME] [-a,--all] [-f,--file FILE]
[-g,--group GROUP] {-p,--package PACKAGE_FILE]
[--hdrid SHA1] [--pkgid MD5] [--tid TID]
[--querybynumber HDRNUM] [--triggeredby PACKAGE_NAME]
[--whatprovides CAPABILITY] [--whatrequires CAPABILITY]

query-options

[--changelog] [-c,--configfiles] [--conflicts]
[-d,--docfiles] [--dump] [--filesbypkg] [-i,--info]
[--last] [-l,--list] [--obsoletes] [--provides]
[--qf,--queryformat QUERYFMT] [-R,--requires]
[--scripts] [-s,--state] [--triggers,--triggerscripts]

verify-options

[--nodeps] [--nofiles] [--noscripts]
[--nodigest] [--nosignature]
[--nolinkto] [--nofiledigest] [--nosize] [--nouser]
[--nogroup] [--nomtime] [--nomode] [--nordev]
[--nocaps] [--noconfig] [--noghost]

install-options

[--allfiles] [--badreloc] [--excludepath OLDPATH]
[--excludedocs] [--force] [-h,--hash]
[--ignoresize] [--ignorearch] [--ignoreos]
[--includedocs] [--justdb] [--nocollections]
[--nodeps] [--nodigest] [--nosignature] [--noplugins]
[--noorder] [--noscripts] [--notriggers]
[--oldpackage] [--percent] [--prefix NEWPATH]
[--relocate OLDPATH=NEWPATH]
[--replacefiles] [--replacepkgs]
[--test]

3. 选项

3.1. 通用选项

通用的选项,这些选项可以用于所有不同的模式。

简写全称描述
-?--help打印比一般更长的使用信息。
--version打印一行包含所使用的 rpm 的版本号。
--quiet尽量少打印——通常只显示错误信息。
-v打印详细信息—通常会显示例行的进度消息。
-vv打印大量丑陋的调试信息。
--rcfile FILELISTrpm 按顺序读取以冒号分隔的 FILELIST 中的每个文件以获取配置信息。列表中只有第一个文件必须存在,波浪号将扩展为 $HOME 的值。默认的 FILELIST 为 /usr/lib/rpm/rpmrc:/usr/lib/rpm/red‐hat/rpmrc:/etc/rpmrc:~/.rpmrc.
--pipe CMD通过管道将 rpm 的输出传输到命令 CMD。
--dbpath DIRECTORY请使用 DIRECTORY 下的数据库,而不是默认的 /var/lib/rpm 路径。
--root DIRECTORY所有操作都使用以 DIRECTORY 为根的文件系统树。注意,这意味着 DIRECTORY 中的数据库将用于依赖项检查,并且任何 scriptlet(例如 %post 如果安装,或 %prep 如果构建,一个包)将在 chroot(2) 到 DIRECTORY 之后运行。
-D--define='MACRO EXPR'用 EXPR 值定义 MACRO。
--undefine='MACRO'未定义 MACRO。
-E--eval='EXPR'打印 EXPR 的宏扩展。

3.2. 安装和升级选项

在这些选项中,PACKAGE_FILE 可以是 rpm 二进制文件或 ASCII 包清单(请参阅包选择选项),并且可以指定为 ftp 或 http URL,在这种情况下,包将在安装之前下载。有关 rpm 的内部 FTP 和 HTTP 客户端支持的信息,请参阅 FTP/HTTP 选项。

安装命令:

rpm 安装命令的一般格式是:

rpm {-i|--install} [install-options] PACKAGE_FILE ...

这将安装一个新包。

升级命令:

rpm 升级命令的通用格式为:

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

这会将当前安装的包升级或安装到较新的版本。这与安装是相同的,在安装新包后,除了当前版本的包会删除所有其他版本的包。

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

这将升级软件包,但只升级已安装较早版本的软件包。

重装命令

rpm 重新安装命令的一般格式是:

rpm {--reinstall} [install-options] PACKAGE_FILE ...

这将重新安装以前安装的包。

简写全称描述
--allfiles安装或升级包中所有日志找不到的文件,无论它们是否存在。
--badreloc--relocate一起使用,允许对所有文件路径进行重定位,而不仅仅是二进制包重定位提示中包含的那些 OLDPATH。
--excludepath OLDPATH不要安装以 OLDPATH 开头的文件。
--excludedocs不要安装任何标记为文档的文件(包括手册页和文本信息文档)。
--force和使用--replacepkgs--replacefiles--oldpackage相同。
-h--hash在解压包存档文件时打印50个散列标记。与`-v--verbose`一起使用,以获得更好的显示。
--ignoresize在安装此包之前,不要检查挂载文件系统是否有足够的磁盘空间。
--ignorearch即使二进制包和主机的架构不匹配,也允许安装或升级。
--ignoreos允许安装或升级,即使二进制包的操作系统和主机不匹配。
--includedocs安装文档文件。这是默认行为。
--justdb只更新数据库,而不是文件系统。
--nodigest阅读时不要验证包或标题摘要。
--nomanifest不要将非包文件作为清单处理。
--nosignature阅读时不要验证包或标题签名。
--nodeps在安装或升级软件包之前,不要进行依赖项检查。
--noorder不要为安装重新排序软件包。包列表通常会重新排序以满足依赖性。
--noplugins不要加载和执行插件。
--noscripts
--nopre
--nopost
--nopreun
--nopostun
不要执行同名的脚本。--noscripts选项等价于--nopre --nopost --nopreun --nopostun并关闭相应的 %pre,%post,%preun 和 %postun 脚本程序的执行。
--notriggers
--notriggerin
--notriggerun
--notriggerprein
--notriggerpostun
不要执行任何命名类型的触发器脚本。--notriggers选项等价于--notriggerprein --notriggerin --notriggerun --notriggerpostun并关闭相应的%triggerprein%triggerin%triggerun%triggerpostun脚本程序的执行。
--oldpackage允许升级以旧包替换新包。
--percent当从包归档文件中解压缩文件时,打印百分比。这是为了方便从其他工具运行 rpm。
--prefix NEWPATH对于可重定位的二进制包,将包重定位提示中以安装前缀开头的所有文件路径转换为 NEWPATH。
--relocate OLDPATH=NEWPATH对于可重定位的二进制包,将包重定位提示中所有以 OLDPATH 开头的文件路径转换为 NEW‐PATH。如果要重新定位包中的多个 OLDPATH,则可以重复使用此选项。
--replacefiles安装这些包,即使它们替换了其他已经安装的包中的文件。
--replacepkgs安装这些包,即使其中一些已经安装在这个系统上。
--test不要安装该包,只需检查并报告潜在的冲突。

3.3. 删除选项

rpm 擦除命令的一般格式是:

rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
简写全称描述
--allmatches删除与 PACKAGE_NAME 匹配的包的所有版本。通常,如果 PACKAGE_NAME 匹配多个包,就会发出错误。
--justdb只更新数据库,而不是文件系统。
--nodeps卸载软件包前不要检查依赖项。
--noscripts
--nopreun
--nopostun
不要执行同名的脚本。包擦除期间的--noscripts选项相当于--nopreun --nopostun并关闭相应的%preun%poststun脚本的执行。
--notriggers
--notriggerun
--notriggerpostun
不要执行任何命名类型的触发器脚本。--notriggers选项等价于--notriggerun --notriggerpostun并关闭相应的%triggerun% triggerpostun脚本的执行。
--test不要真的卸载任何东西,只是走走过场。与-vv选项一起用于调试。

3.4. 查询选项

rpm 查询命令的一般格式是:

rpm {-q|--query} [select-options] [query-options]

您可以指定打印包信息的格式。要做到这一点,您可以使用--qf|--queryformat QUERYFMT选项,后面是 QUERYFMT 格式字符串。查询格式是标准printf(3)格式的修改版本。格式由静态字符串(可能包括用于换行符、制表符和其他特殊字符的标准C字符转义)和printf(3)类型格式化程序组成。由于 rpm 已经知道要打印的类型,因此类型说明符必须被省略,并由要打印的头标记的名称替换,该名称由{}字符包围。标记名不区分大小写,标记名的开头RPMTAG_部分也可以省略。

可以通过在标签后面加上:typetag来请求其他输出格式。目前支持的类型如下:

类型标签描述
:armor用 ASCII 封装公钥。
:arraysize在数组标签中显示元素的数量。
:base64使用 base64 编码二进制数据。
:date使用 strftime(3) 格式为 "%c"。
:day使用 strftime(3) 格式为 "%a %b %d %Y"。
:depflags格式依赖比较操作符。
:deptype格式类型的依赖。
:expand执行宏扩展。
:fflags格式文件的标志。
:fstate格式文件的状态。
:fstatus格式文件验证状态。
:hex十六进制格式。
:octal八进制格式。
:perms格式文件权限。
:pgpsig显示签名指纹和时间。
:shescape转义脚本中使用的单引号。
:triggertype显示触发后缀。
:vflags文件验证标志。
:xml用简单的xml标记封装数据。

例如,要只打印查询的包的名称,您可以使用%{NAME}作为格式字符串。要在两列中打印包的名称和分发信息,您可以使用%-30{NAME}%{DISTRIBUTION}。当使用--querytags参数调用rpm时,rpm将打印它所知道的所有标记的列表。

有两个用于查询的选项子集:包选择和包查询。

3.4.1. 包选择选项

简写全称描述
PACKAGE_NAME查询名为 PACKAGE_NAME 的安装包。
-a--all查询所有已安装的软件包。
-f--file FILE查询包所属文件 FILE。
-g--group GROUP使用 GROUP 的组查询包。
--hdrid SHA1包含给定报头标识符的查询包,即不可变报头区域的 SHA1 摘要。
-p--package PACKAGE_FILE查询已卸载的 PACKAGE_FILE 包。PACKAGE_FILE 可以指定为 ftp 或 http 样式的 URL,在这种情况下,包头将被下载和查询。有关 rpm 的内部 FTP 和 HTTP 客户端支持的信息,请参阅 FTP/HTTP 选项。PACKAGE_FILE 参数,如果不是二进制包,将被解释为 ASCII 包清单,除非使用--nomanifest选项。在清单中,允许注释,以'#'开头,包清单文件的每一行可能包括空格分隔的通配符表达式,包括 URL,这些表达式将被扩展为路径,作为附加的 PACKAGE_FILE 参数替换包清单。
--pkgid MD5包含给定包标识符的查询包,即合并报头和有效负载内容的 MD5 摘要。
--querybynumber HDRNUM直接查询 HDRNUMth 数据库条目;这只对调试有用。
--specfile SPECFILE解析和查询 SPECFILE,就好像它是一个包。虽然不是所有的信息(例如文件列表)都可用,但这种查询类型允许使用 rpm 从规范文件中提取信息,而不必编写规范文件解析器。
--tid TID具有给定 TID 事务标识符的查询包。unix 时间戳目前被用作交易标识符。在单个事务中安装或擦除的所有包都有一个公共标识符。
--triggeredby PACKAGE_NAME查询由 PACKAGE_NAME 包触发的包。
--whatprovides CAPABILITY查询所有提供 CAPABILITY 功能的包。
--whatrequires CAPABILITY查询所有需要 CAPABILITY 才能正常工作的包。

3.4.2. 包查询选项

简写全称描述
--changelog显示包的更改信息。
-c--configfiles只列出配置文件(implies -l)。
--conflicts列出此包与之冲突的功能。
-d--docfiles只列出文档文件(implies -l)。
--dumpDump 文件信息如下(implies -l):path size mtime digest mode owner group isconfig isdoc rdev symlink
--filesbypkg列出每个选定包中的所有文件。
-i--info显示包信息,包括名称、版本和描述。如果要指定一个,则使用--queryformat
--last按安装时间顺序排列软件包清单,使最新的软件包位于顶部。
-L--licensefiles只列出许可的文件(implies -l)。
-l--list列出包中的文件。
--obsoletes列出过时的包。
--provides列出此包提供的功能。
-R--requires列出此包所依赖的功能。
--scripts列出安装和卸载过程中使用的特定于包的脚本程序。
-s--state显示包中文件的状态(implies -l)。每个文件的状态为正常(normal)、未安装(not installed)或被替换(replaced)。
--triggers
--triggerscripts
显示包中包含的触发脚本(如果有的话)。

3.5. 验证选项

rpm 验证命令的一般格式是:

rpm {-V|--verify} [select-options] [verify-options]

在验证包时,将有关包中已安装文件的信息与从 rpm 数据库中存储的包元数据中获取的文件信息进行比较。除此之外,还要对每个文件的大小、摘要、权限、类型、所有者和组进行比较。任何不符之处都会显示出来。没有从包中安装的文件,例如,在安装时使用--excludedocs选项排除的文档文件,将被静默忽略。

包选择选项与包查询相同(包括包清单文件作为参数)。验证模式特有的其他选项有:

简写全称描述
--nodeps不要验证包的依赖关系。
--nodigest阅读时不要验证包或标题摘要。
--nofiles不要验证包文件的任何属性。
--noconfig不要验证配置文件。
--noghost不要显示幽灵文件。
--noscripts不要执行%verifyscript 脚本程序(如果有的话)。
--nosignature阅读时不要验证包或标题签名。
--nolinkto
--nofiledigest(旧称--nomd5
--nosize
--nouser
--nogroup
--nomtime
--nomode
--nordev
不要验证相应的文件属性。

输出的格式是一个9个字符的字符串,一个可能的属性标记:

  • c %config 配置文件。
  • d %doc 文档文件。
  • g %ghost 文件(即文件内容不包含在包的有效负载中)。
  • l %license 许可证文件。
  • r %readme readme 文件。

从包头,后面跟着文件名。这9个字符中的每一个都表示文件的属性与数据库中记录的那些属性的值进行比较的结果。一个“.”(周期)表示测试通过,而单个“?”(问号)表示测试无法执行(例如,文件权限阻止读取)。否则,(壮胆的)字符表示对应的--verify测试失败:

  • S 文件大小不同。
  • M 模式不同(包括权限和文件类型)。
  • 5 digest(以前的 MD5 和)不同。
  • D 设备主、副号码不匹配。
  • L readLink(2) 路径不匹配。
  • U 用户所有权不同。
  • G 集团所有权不同。
  • T mTime 不同。
  • P 能力不同。

3.6. 其他命令

rpm --showrc

显示rpm将用于rpmrcmacros配置文件中当前设置的所有选项的值。

rpm --setperms PACKAGE_NAME

设置给定包中的文件的权限。

rpm --setugids PACKAGE_NAME

设置给定包中文件的用户/组所有权。

选项--setperms--setugids互斥。

3.7. FTP/HTTP 选项

rpm 可以作为 FTP 和/或 HTTP 客户端,因此可以从互联网查询或安装包。包文件安装、升级和查询操作可以指定为ftphttp样式的 URL:

ftp://USER:PASSWORD@HOST:PORT/path/to/package.rpm

如果省略:PASSWORD部分,密码将被提示为(每个用户/主机名对一次)。如果同时省略USERPASSWORD,则使用匿名 ftp。在所有情况下,都执行被动(PASV)ftp 传输。

rpm 允许在 ftp url 中使用以下选项:

简写全称描述
--ftpproxy HOST主机 HOST 将用作所有 ftp 传输的代理服务器,这允许用户通过使用代理系统的防火墙机器进行 ftp 传输。也可以通过配置宏%_ftpproxy来指定此选项。
--ftpport PORT在代理 ftp 服务器上进行 ftp 连接时使用的 TCP 端口号,而不是默认端口。也可以通过配置宏%_ftpport来指定此选项。

rpm 允许以下选项用于 http url:

简写全称描述
--httpproxy HOST主机 HOST 将用作所有 http 传输的代理服务器。这个选项也可以通过配置宏%_httpproxy来指定。
--httpport PORT代理 http 服务器上用于 http 连接的 TCP 端口号,而不是默认端口。这个选项也可以通过配置宏%_httpport来指定。

4. 示例

查询 linux 是否安装了lrzsz软件包:

[root@product ~]# rpm -q lrzsz
lrzsz-0.12.20-36.el7.x86_64

列出 linux 安装的所有软件包:

[root@product ~]# rpm -qa
iwl5150-firmware-8.24.2.2-69.el7.noarch
lsscsi-0.27-6.el7.x86_64
iwl100-firmware-39.31.5.1-69.el7.noarch
libndp-1.2-7.el7.x86_64
iwl6050-firmware-41.28.5.1-69.el7.noarch
avahi-libs-0.6.31-19.el7.x86_64
bind-libs-lite-9.9.4-74.el7_6.1.x86_64
dracut-033-554.el7.x86_64
......省略