rpm 中文手册

发布于 2021-07-14 12:55:08 字数 10969 浏览 1806 评论 0

原文:http://www.jinbuguo.com/pkgmanager/redhat/rpm.html

名字

rpm - RPM 软件包管理器

语法

查询软件包:
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] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...

其他杂项:
rpm {--querytags|--showrc}
rpm {--setperms|--setugids} PACKAGE_NAME ...

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]

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

描述

rpm 是一个强大的软件包管理器,可以用来构建、安装、查询、校验、升级、卸载单独的软件包。
一个"包"包括文件的归档以及用来安装和卸载归档中文件的元数据。
元数据包括辅助脚本、文件属性、以及相关的描述性信息。

软件包有两种:

  • 二进制包,用来封装已经编译好的二进制文件;
  • 源代码包,用来封装源代码和要构建二进制包需要的信息。

必须选择下列"模式"之一:
Query(查询), Verify(校验), Install/Upgrade/Freshen(安装/升级/更新), Uninstall(卸载),Set Owners/Groups(设置属主/属组), Show Querytags(显示查询标记), Show Configuration(显示配置)

通用选项

下列选项可以用于所有不同的模式。

-?, --help
打印详细的帮助信息

--version
打印一行详细的版本号信息

--quiet
输出尽可能少的信息,通常只有错误信息才会显示出来。

-v 输出冗余信息,例如进度之类的信息。

-vv 输出大量冗长的调试信息

--rcfile FILELIST
FILELIST 中冒号分隔的每个文件都被 rpm 按顺序读取,从中获得配置信息。
只有列表中的第一个文件必须存在,波浪线将被替换为 $HOME 。默认值是:
/usr/lib/rpm/rpmrc:/usr/lib/rpm/redhat/rpmrc:/etc/rpmrc:~/.rpmrc

--pipe CMD
将 rpm 的输出通过管道送到 CMD 命令。

--dbpath DIRECTORY
使用 DIRECTORY 中的数据库,而不是默认的 /var/lib/rpm

--root DIRECTORY
以 DIRECTORY 作为根文件系统进行操作。这意味着将使用 DIRECTORY 中的数据库来进行依赖性检测,
并且任何操作(比如安装时的 %post 和构建时的 %prep)都将 chroot 到 DIRECTORY 下执行。

-D, --define='MACRO EXPR'
将 MACRO 宏的值定义为 EXPR

--undefine='MACRO'
撤销 MACRO 宏

-E, --eval='EXPR'
打印出值 EXPR 对应的宏

安装/升级/更新选项

下列选项中的 PACKAGE_FILE 既可以是二进制的 rpm 文件,
也可以是 ASCII 格式的软件包清单文件(manifest)(参见"包选择选项")。
并且可以指定为 ftp 或 http 的 URL ,在这种情况下,会在安装或升级前自动下载指定的文件。
详见"FTP/HTTP 选项"以了解 rpm 内部对 ftp 与 http 客户端的支持。

安装一个新软件包的一般形式是:

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

安装或升级软件包到新版本[与安装类似,只是所有其他版本都将被移除]:

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

更新软件包到新版本[仅当系统中确实存在老版本时,才会升级软件包,否则什么也不做]:

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

[注意]下文中只要提到"升级",就同时包含了"更新"在内。也就是说"更新"只是"升级"的一种特例。

--allfiles
安装或升级软件包中所有文件,即使它们可能应该被跳过。

--badreloc
与 --relocate 搭配使用,允许重新定位所有文件的路径,
而不仅仅是二进制包中重定位提示(hint)包含的那些 OLDPATH 。

--excludepath OLDPATH
不安装名字以 OLDPATH 开头的文件。

--excludedocs
不安装任何被标记为文档的文件(包括手册页和 texinfo)。

--force
与同时使用 --replacepkgs, --replacefiles, --oldpackage 的效果相同。

-h, --hash
在包被解压时,输出50个井号(#),与 -v|--verbose 配合使用,得到漂亮一点的输出。

--ignoresize
安装前不检查已挂载文件系统的空闲空间是否够用。

--ignorearch
允许安装或升级,即使二进制包的硬件架构与主机不匹配。

--ignoreos
允许安装或升级,即使二进制包的操作系统与主机不匹配。

--includedocs
安装文档文件。这是默认行为。

--justdb
只更新数据库,而不更新文件系统。

--nodigest
读取时不校验包或头部的摘要信息。

--nomanifest
不将非包文件(non-package file)当做软件包清单文件(manifest)处理。

--nosignature
读取时不校验包或头部的签名。

--nodeps
在安装或升级前,不进行依赖性检测。

--noorder
不为安装重排序。通常软件包列表会被重排序,以满足依赖关系。

--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
对于可重定位的包,将把软件包重定位提示中所有以安装前缀(prefix)开头的文件路径转换为以 NEWPATH 开头。

--relocate OLDPATH=NEWPATH
对于可重定位的二进制包,将软件包重定位提示中所有以 OLDPATH 开头的文件路径转换为以 NEWPATH 开头。
如果软件包中有多个 OLDPATH 要重定位的话,这一选项可以使用多次。

--replacefiles
强制安装软件包,即使它将覆盖其他已安装软件包的文件。

--replacepkgs
强制安装软件包,即使其中有些软件包已经被安装到了系统中。

--test 不安装软件包,仅仅检测并报告可能的冲突。

卸载选项

卸载命令的一般形式是

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

同时还可以用下列选项:

--allmatches
删除匹配 PACKAGE_NAME 的软件包的所有版本。
默认情况下,如果 PACKAGE_NAME 匹配多个软件包将导致错误。

--nodeps
在卸载前不检测依赖关系。

--noscripts
--nopreun
--nopostun
不执行对应的程序/脚本。
单独的一个 --noscripts 等价于同时使用 --nopreun --nopostun 的组合。
它将会把 %preun, %postun 段对应的程序/脚本全部关闭。

--notriggers
--notriggerun
--notriggerpostun
不执行任何对应的触发程序/脚本。
单独的一个 --notriggers 等价于同时使用 --notriggerun --notriggerpostun 的组合。
它将会把 %triggerun, %triggerpostun 段对应的程序/脚本全部关闭。

--test 并不真正卸载任何东西,仅仅尝试它们。与 -vv 选项联合使用,在调试时很有用。

查询选项

查询命令的一般形式是

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

还可以使用下面的选项指定软件包信息的输出格式:

--qf|--queryformat QUERYFMT

QUERYFMT 是格式字符串,是标准的 printf(3) 格式的修改版本。
格式包括静态字符串(包括标准的C语言转义字符、新行符、跳格以及其他特殊字符)以及 printf(3) 类型标记。
因为 rpm 已知输出类型,所以应当忽略类型标记,转而使用包含在 {} 中的头部标记名来代替。
标记名是大小写无关的,并且标记名中以 RPMTAG_ 开头的部分可以被忽略。

可选的输出格式可以使用":tag"这样格式的标记表示。当前支持的标记如下:

:armor 以 ASCII 形式编码的公钥
:arraysize 在数组标记中显示单元数目
:base64 使用 base64 编码二进制数据
:date 使用 strftime(3) 的 "%c" 格式
:day 使用 strftime(3) 的 "%a %b %d %Y" 格式
:depflags 格式化依赖比较操作符
:deptype 格式化依赖类型
:expand 对宏进行展开
:fflags 格式化文件标记
:fstate 格式化文件状态
:fstatus 格式化文件校验状态
:hex 以16进制格式化
:octal 以八进制格式化
:perms 格式化文件权限
:pgpsig 显示签名指纹和时间
:shescape 对单引号进行转义(为了可以在脚本中使用)
:triggertype 显示触发器后缀
:vflags 文件校验标记
:xml 以 XML 格式编码数据

例如,只输出所查询的软件包的名称,可以使用 %{NAME} 作为格式化字符串。
要分两列输出软件包名称和发行版信息,可以用 %-30{NAME}%{DISTRIBUTION}
如果使用 --querytags 参数,rpm 将输出它已知的所有标记列表。

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

包选择选项[子集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 ,软件包头部将被下载并查询。
详见"FTP/HTTP 选项"以了解 rpm 内部对 ftp 与 http 客户端的支持。
如果 PACKAGE_FILE 不是二进制文件,那么将被当作 ASCII 格式的软件包清单文件(除非使用了 --nomanifest 选项)。
清单文件中以'#'开头的是注释行,其他每行都可以包含以空格分隔的 glob 表达式(包括 URL),
这些 glob 表达式将被扩展为路径,取代软件包清单文件,作为查询的附加 PACKAGE_FILE 参数。

--pkgid MD5
查询含有特定标识符的软件包。也就是包的头部以及有效内容的 MD5 摘要信息。

--querybynumber HDRNUM
直接查询第 HDRNUM 个数据库入口,仅用于调试。

--specfile SPECFILE
解析并查询 SPECFILE ,就好像它是一个软件包。尽管并非所有信息都可获得(比如文件清单),
但这种查询允许 rpm 从 spec 文件中抽取信息,而不必自己再去写一个解析器。

--tid TID
查询包含给定 TID 事务标识符的软件包。当前使用 unix 时间戳作为事务标识符。
任何在一次事务中安装或卸载的软件包都拥有相同的标识符。

--triggeredby PACKAGE_NAME
查询被软件包 PACKAGE_NAME 触发的软件包。

--whatprovides CAPABILITY
查询提供了 CAPABILITY 功能的软件包。

--whatrequires CAPABILITY
查询所有需要 CAPABILITY 功能才能运行的软件包。

包查询选项[子集2]

--changelog
显示软件包的变更信息

-c, --configfiles
只显示配置文件(隐含 -l)

--conflicts
显示此软件包与哪些功能有冲突

-d, --docfiles
只显示文档文件(隐含 -l)

--dump 转储文件下列信息(隐含 -l):path size mtime digest mode owner group isconfig isdoc rdev symlink

--filesbypkg
列出每个所选软件包中的文件

-i, --info
显示软件包信息,包括名称、版本、描述。
如果同时还使用了 --queryformat 选项,那么就按照它指定的格式显示。

--last 列出软件包时以安装时间排序,最新的在上面。

-L, --licensefiles
只显示许可证文件(隐含 -l)

-l, --list
列出软件包中的文件

--obsoletes
列出被此软件包废弃的软件包

--provides
列出软件包提供的功能

-R, --requires
列出此软件包所依赖的功能(通常是一个软件包)

--scripts
列出软件包自定义的小程序/脚本,他们是安装和卸载等过程的一部分。

-s, --state
显示软件包中文件的状态(隐含 -l)。状态是 normal, not installed, replaced 之一。

--triggers, --triggerscripts
显示软件包中包含的触发脚本,如果有的话。

校验选项

校验命令的一般形式是

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

校验软件包,是指将已安装的文件信息与保存在 rpm 数据库中的元数据(来自于rpm包)进行比较。
校验将会比较每个文件的大小、摘要信息(哈希值)、权限、类型、属主与属组。任何不一致的地方都将被显示出来。
软件包中未安装的文件(例如在安装过程中使用"--excludedocs"跳过的文档),将被忽略。

软件包的选择选项与软件包查询选项是相同的(包括以清单文件作为参数)。其他独有的选项包括:

--nodeps
不校验软件包的依赖关系

--nodigest
读取时不校验软件包或头部的摘要信息(哈希值)

--nofiles
不校验文件的任何属性

--noscripts
不执行 %verifyscript 小程序/脚本(如果有的话)。

--nosignature
读取时不校验软件包或头部签名

--nolinkto
--nofiledigest (以前是 --nomd5)
--nosize
--nouser
--nogroup
--nomtime
--nomode
--nordev

不校验相应的文件属性

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

c %config 配置文件
d %doc 文档文件
g %ghost 占位文件,也就是文件内容不包含在软件包有效内容里面
l %license 许可证文件
r %readme 说明文件

从头部开始,接下来是文件名,每9个字符表示将文件属性与数据库中记录的值进行比较的结果。
一个单独的"."表示测试通过了,一个单独的"?"表示测试可能无法进行(例如,文件禁止了读权限)。
最后,粗体的字母表示相应的 --verify 测试失败了:

S 大小不一致
M 模式不一致(包括权限和文件类型)
5 MD5校验和不一致
D 主/次设备号不匹配
L readLink(2) 路径不匹配
U User 属主不一致
G Group 属组不一致
T mTime 不一致
P 功能不一致

杂项命令

rpm --showrc
显示 rpm 使用的、在 rpmrc 和 macros 配置文件中定义的选项的值。

rpm --setperms PACKAGE_NAME
设置 PACKAGE_NAME 软件包中的文件权限

rpm --setugids PACKAGE_NAME
设置 PACKAGE_NAME 软件包中的属主/属组

FTP/HTTP 选项

rpm 内置 FTP/HTTP 客户端,可以查询或安装互联网上的软件包。
可以安装、升级、查询用 URL 指定的软件包文件,比如:

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

如果省略 :PASSWORD 部分,将为每个用户名/主机对提示一次密码。
如果忽略了用户名和密码,将使用匿名FTP。在所有情况下,都会使用被动FTP(PSAV)。

rpm 允许在使用 ftp URL 时使用下面的选项:

--ftpproxy HOST
使用主机 HOST 作为所有 FTP 传输的代理服务器,允许通过防火墙代理访问 FTP 。
这个选项也可以用宏 %_ftpproxy 指定。

--ftpport PORT
连接到 FTP 代理服务器的 PORT 端口,而不是默认端口。
这个选项也可以用宏 %_ftpport 指定。

rpm 允许在使用 http URL 时使用下面的选项:

--httpproxy HOST
使用主机 HOST 作为所有 HTTP 传输的代理服务器,允许通过防火墙代理访问 HTTP 。
这个选项也可以用宏 %_httpproxy 指定。

--httpport PORT
连接到 HTTP 代理服务器的 PORT 端口,而不是默认端口。
这个选项也可以用宏 %_httpport 指定。

历史遗留问题

执行 rpmbuild

rpm "构建模式"以被移至 /usr/bin/rpmbuild 可执行文件中。
请参见 rpmbuild(8) 文档了解详情。

文件

rpmrc 配置文件
/usr/lib/rpm/rpmrc
/usr/lib/rpm/redhat/rpmrc
/etc/rpmrc
~/.rpmrc

Macro 配置文件

/usr/lib/rpm/macros
/usr/lib/rpm/redhat/macros
/etc/rpm/macros
~/.rpmmacros

数据库

/var/lib/rpm/Basenames
/var/lib/rpm/Conflictname
/var/lib/rpm/Dirnames
/var/lib/rpm/Group
/var/lib/rpm/Installtid
/var/lib/rpm/Name
/var/lib/rpm/Obsoletename
/var/lib/rpm/Packages
/var/lib/rpm/Providename
/var/lib/rpm/Requirename
/var/lib/rpm/Sha1header
/var/lib/rpm/Sigmd5
/var/lib/rpm/Triggername

临时文件

/var/tmp/rpm*

参见

popt(3),
rpm2cpio(8),
rpmbuild(8),
rpmdb(8),
rpmkeys(8),
rpmsign(8),
rpmspec(8),

rpm --help

http://www.rpm.org/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

醉城メ夜风

文章 0 评论 0

远昼

文章 0 评论 0

平生欢

文章 0 评论 0

微凉

文章 0 评论 0

Honwey

文章 0 评论 0

qq_ikhFfg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文