本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
RPM(8) System Manager's Manual RPM(8) 名字 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/ Red Hat, Inc. 13 February 2014 RPM-4.11.2(8)