rpm 中文手册
原文: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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: emerge 中文手册
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论