Linux rpmquery 命令介绍
rpmquery(Query RPM Package Manager)是一个用来查询 RPM 数据库的命令,它可以显示已安装或未安装的 RPM 包的信息,如名称、版本、描述、依赖关系、文件列表等。rpmquery 命令是 rpm 命令的一个别名,它相当于 rpm -q 命令。
Linux rpmquery 命令适用的 Linux 版本
rpmquery 命令适用于基于 RPM 的 Linux 发行版,如 RedHat/CentOS、Fedora、openSUSE、Mandriva、Mageia 等。如果您使用的是其他类型的 Linux 发行版,您可能需要安装 RPM 包管理器或使用其他的查询命令,如 dpkg-query、pacman -Q 等。您可以参考下面的安装命令:
# 对于基于 apt 的发行版(如 Debian、Ubuntu、Raspbian、Kali Linux 等):
sudo apt-get install rpm
# 对于基于 yum 的发行版(如 RedHat,CentOS 7 等):
sudo yum install rpm
# 对于基于 dnf 的发行版(如 Fedora,CentOS 8 等):
sudo dnf install rpm
# 对于基于 apk 的发行版(如 Alpine Linux):
sudo apk add --update rpm
# 对于基于 pacman 的发行版(如 Arch Linux):
sudo pacman -S rpm-tools
# 对于基于 zypper 的发行版(如 openSUSE):
sudo zypper in rpm
# 对于基于 pkg 的 FreeBSD 发行版
sudo pkg install rpm4
# 对于基于 pkg 的 OS X/macOS 发行版:
brew install rpm
Linux rpmquery 命令的基本语法
rpmquery 命令的基本语法格式如下:
rpmquery [选项] [参数]
其中,选项可以用来指定查询的模式、格式、条件等,参数可以是一个或多个 RPM 包的名称、文件名、触发器、提供者等。
Linux rpmquery 命令的常用选项或参数说明
rpmquery 命令的常用选项或参数说明如下表所示,选项列举要全面,按照字母顺序排序,如果大于 20 个选项,则选择 20 个最常用的:
选项 | 说明 |
---|---|
-a | 查询所有已安装的 RPM 包 |
-c | 查询 RPM 包的配置文件 |
-d | 查询 RPM 包的文档文件 |
-f | 查询指定文件属于哪个 RPM 包 |
-i | 查询 RPM 包的基本信息 |
-l | 查询 RPM 包的文件列表 |
-p | 查询未安装的 RPM 包 |
-q | 指定查询模式,可以省略 |
-R | 查询 RPM 包的依赖关系 |
-s | 查询 RPM 包的文件状态 |
--changelog | 查询 RPM 包的变更日志 |
--dbpath | 指定 RPM 数据库的路径 |
--queryformat | 指定查询的输出格式 |
--scripts | 查询 RPM 包的脚本 |
--triggers | 查询 RPM 包的触发器 |
--whatprovides | 查询提供指定功能的 RPM 包 |
--whatrequires | 查询需要指定功能的 RPM 包 |
Linux rpmquery 命令实例详解
实例 1:查询所有已安装的 RPM 包
使用 -a 选项可以查询所有已安装的 RPM 包,输出结果按照名称、版本、发行版的顺序排列,每行显示一个 RPM 包的信息。例如:
[linux@bashcommandnotfound.cn ~]$ rpmquery -a
acl-2.2.53-1.el8.x86_64
audit-libs-3.0-0.17.20191104git1c2f876.el8.x86_64
basesystem-11-5.el8.noarch
bash-4.4.19-12.el8.x86_64
...
zlib-1.2.11-17.el8.x86_64
zstd-1.4.9-1.el8.x86_64
实例 2:查询 RPM 包的基本信息
使用 -i 选项可以查询 RPM 包的基本信息,如名称、版本、大小、描述、许可证、签名等。如果不指定参数,则查询所有已安装的 RPM 包的信息,如果指定参数,则查询指定的 RPM 包的信息,参数可以是已安装或未安装的 RPM 包的名称或文件名。例如:
[linux@bashcommandnotfound.cn ~]$ rpmquery -i bash
Name : bash
Version : 4.4.19
Release : 12.el8
Architecture: x86_64
Install Date: Mon 25 Jan 2021 10:23:15 AM CST
Group : Unspecified
Size : 6628416
License : GPLv3+
...
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.
实例 3:查询 RPM 包的文件列表
使用 -l 选项可以查询 RPM 包的文件列表,即 RPM 包中包含的所有文件和目录的路径。如果不指定参数,则查询所有已安装的 RPM 包的文件列表,如果指定参数,则查询指定的 RPM 包的文件列表,参数可以是已安装或未安装的 RPM 包的名称或文件名。例如:
[linux@bashcommandnotfound.cn ~]$ rpmquery -l bash
/bin/bash
/bin/sh
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc
...
实例 4:查询 RPM 包的依赖关系
使用 -R 选项可以查询 RPM 包的依赖关系,即 RPM 包需要的其他 RPM 包或功能。如果不指定参数,则查询所有已安装的 RPM 包的依赖关系,如果指定参数,则查询指定的 RPM 包的依赖关系,参数可以是已安装或未安装的 RPM 包的名称或文件名。例如:
[linux@bashcommandnotfound.cn ~]$ rpmquery -R bash
/bin/sh
config(bash) = 4.4.19-12.el8
glibc >= 2.15-103
...
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
实例 5:查询指定文件属于哪个 RPM 包
使用 -f 选项可以查询指定文件属于哪个 RPM 包,即反向查询文件的来源。参数可以是一个或多个文件的路径,如果文件不存在或不属于任何 RPM 包,则会显示错误信息。例如:
[linux@bashcommandnotfound.cn ~]$ rpmquery -f /bin/bash
bash-4.4.19-12.el8.x86_64
[linux@bashcommandnotfound.cn ~]$ rpmquery -f /bin/ls
coreutils-8.30-8.el8.x86_64
[linux@bashcommandnotfound.cn ~]$ rpmquery -f /bin/foo
file /bin/foo is not owned by any package
实例 6:查询未安装的 RPM 包
使用 -p 选项可以查询未安装的 RPM 包,即从 RPM 包文件中获取信息,而不是从 RPM 数据库中获取。参数必须是一个或多个 RPM 包文件的路径,如果文件不存在或不是有效的 RPM 包,则会显示错误信息。例如:
[linux@bashcommandnotfound.cn ~]$ rpmquery -p /tmp/nginx-1.20.1-1.el8.ngx.x86_64.rpm
nginx-1.20.1-1.el8.ngx.x86_64
[linux@bashcommandnotfound.cn ~]$ rpmquery -p /tmp/nginx-1.20.1-1.el8.ngx.x86_64.rpm -i
Name : nginx
Version : 1.20.1
Release : 1.el8.ngx
Architecture: x86_64
...
Summary : High performance web server
Description :
nginx [engine x] is an HTTP and reverse proxy server, as well as
a mail proxy server.
实例 7:查询 RPM 包的配置文件
使用 -c 选项可以查询 RPM 包的配置文件,即 RPM 包中标记为配置文件的文件,这些文件通常是可以被用户修改的。如果不指定参数,则查询所有已安装的 RPM 包的配置文件,如果指定参数,则查询指定的 RPM 包的配置文件,参数可以是已安装或未安装的 RPM 包的名称或文件名。例如:
[linux@bashcommandnotfound.cn ~]$ rpmquery -c bash
/etc/bashrc
/etc/profile
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc
实例 8:查询 RPM 包的文档文件
使用 -d 选项可以查询 RPM 包的文档文件,即 RPM 包中标记为文档文件的文件,这些文件通常是 README、LICENSE、MANUAL 等。如果不指定参数,则查询所有已安装的 RPM 包的文档文件,如果指定参数,则查询指定的 RPM 包的文档文件,参数可以是已安装或未安装的 RPM 包的名称或文件名。例如:
[linux@bashcommandnotfound.cn ~]$ rpmquery -d bash
/usr/share/doc/bash/CHANGES
/usr/share/doc/bash/COMPAT
/usr/share/doc/bash/FAQ
...
/usr/share/man/man1/bash.1.gz
/usr/share/man/man1/bashbug.1.gz
实例 9:查询 RPM 包的文件状态
使用 -s 选项可以查询 RPM 包的文件状态,即 RPM 包中的文件是否被修改过,以及修改的类型。如果不指定参数,则查询所有已安装的 RPM 包的文件状态,如果指定参数,则查询指定的 RPM 包的文件状态,参数可以是已安装或未安装的 RPM 包的名称或文件名。例如:
[linux@bashcommandnotfound.cn ~]$ rpmquery -s bash
normal /bin/bash
normal /bin/sh
normal /etc/skel/.bash_logout
...
normal /usr/share/man/man1/bash.1.gz
normal /usr/share/man/man1/bashbug.1.gz
实例 10:查询 RPM 包的变更日志
使用 --changelog 选项可以查询 RPM 包的变更日志,即 RPM 包的更新历史和修复记录。如果不指定参数,则查询所有已安装的 RPM 包的变更日志,如果指定参数,则查询指定的 RPM 包的变更日志,参数可以是已安装或未安装的 RPM 包的名称或文件名。例如:
[linux@bashcommandnotfound.cn ~]$ rpmquery --changelog bash
* Tue Nov 03 2020 Ondrej Oprala <ooprala@redhat.com> - 4.4.19-12
- Fix CVE-2019-18276
* Wed Oct 28 2020 Ondrej Oprala <ooprala@redhat.com> - 4.4.19-11
- Fix CVE-2019-18276
...
实例 11:查询 RPM 包的脚本
使用 --scripts 选项可以查询 RPM 包的脚本,即 RPM 包中包含的在安装、升级或卸载时执行的脚本。如果不指定参数,则查询所有已安装的 RPM 包的脚本,如果指定参数,则查询指定的 RPM 包的脚本,参数可以是已安装或未安装的 RPM 包的名称或文件名。例如:
[linux@bashcommandnotfound.cn ~]$ rpmquery --scripts bash
preinstall scriptlet (using /bin/sh):
# Add the 'bash' group to /etc/group, if it doesn't already exist:
if ! grep -q '^bash:' /etc/group 2>/dev/null; then
groupadd -g 12 -r bash 2>/dev/null || \
groupadd -r bash 2>/dev/null
fi
postinstall scriptlet (using /bin/sh):
# Add /bin/bash as a valid shell to /etc/shells, if it doesn't already exist:
if ! grep -q '^/bin/bash$' /etc/shells 2>/dev/null; then
echo '/bin/bash' >> /etc/shells
fi
preuninstall scriptlet (using /bin/sh):
if [ $1 = 0 ]; then
# Remove /bin/bash as a valid shell from /etc/shells, if it exists:
if grep -q '^/bin/bash$' /etc/shells 2>/dev/null; then
sed -i '/^\/bin\/bash$/d' /etc/shells
fi
fi
实例 12:查询 RPM 包的触发器
使用 --triggers 选项可以查询 RPM 包的触发器,即 RPM 包中包含的在其他 RPM 包被安装、升级或卸载时触发的脚本。如果不指定参数,则查询所有已安装的 RPM 包的触发器,如果指定参数,则查询指定的 RPM 包的触发器,参数可以是已安装或未安装的 RPM 包的名称或文件名。例如:
[linux@bashcommandnotfound.cn ~]$ rpmquery --triggers glibc
triggerin scriptlet (using /bin/sh) -- ldconfig < 2.17-55
/sbin/ldconfig
/sbin/ldconfig -X
triggerun scriptlet (using /bin/sh) -- ldconfig < 2.17-55
/sbin/ldconfig
/sbin/ldconfig -X
实例 13:查询提供指定功能的 RPM 包
使用 --whatprovides 选项可以查询提供指定功能的 RPM 包,即反向查询功能的来源。参数可以是一个或多个功能的名称,如果功能不存在或不属于任何 RPM 包,则会显示错误信息。例如:
[linux@bashcommandnotfound.cn ~]$ rpmquery --whatprovides /bin/bash
bash-4.4.19-12.el8.x86_64
[linux@bashcommandnotfound.cn ~]$ rpmquery --whatprovides /bin/ls
coreutils-8.30-8.el8.x86_64
[linux@bashcommandnotfound.cn ~]$ rpmquery --whatprovides /bin/foo
no package provides /bin/foo
实例 14:查询需要指定功能的 RPM 包
使用 --whatrequires 选项可以查询需要指定功能的 RPM 包,即正向查询功能的依赖。参数可以是一个或多个功能的名称,如果功能不存在或不被任何 RPM 包需要,则会显示错误信息。例如:
[linux@bashcommandnotfound.cn ~]$ rpmquery --whatrequires /bin/bash
/bin/sh
bash-completion-2.7-5.el8.noarch
coreutils-8.30-8.el8.x86_64
...
util-linux-2.32.1-24.el8.x86_64
vim-minimal-8.0.1763-15.el8.x86_64
yum-4.2.23-4.el8.noarch
[linux@bashcommandnotfound.cn ~]$ rpmquery --whatrequires /bin/ls
coreutils-8.30-8.el8.x86_64
[linux@bashcommandnotfound.cn ~]$ rpmquery --whatrequires /bin/foo
no package requires /bin/foo
实例 15:指定查询的输出格式
使用 --queryformat 选项可以指定查询的输出格式,即自定义查询的结果的显示方式。参数可以是一个或多个格式字符串,格式字符串可以包含 RPM 包的属性的标签,如 %{NAME}、%{VERSION}、%{SIZE} 等,也可以包含一些转义字符,如 \n、\t、\x 等。例如:
[linux@bashcommandnotfound.cn ~]$ rpmquery --queryformat "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" bash
bash-4.4.19-12.el8.x86_64
[linux@bashcommandnotfound.cn ~]$ rpmquery --queryformat "%{NAME}\t%{SIZE}\n" -a | sort -k2 -n -r | head
kernel-core 68960256
kernel-modules 27901696
kernel 1536000
glibc 1496064
java-11-openjdk-headless 1454080
libreoffice-core 1177600
glibc-common 1155072
libreoffice-calc 1024000
libreoffice-writer 921600
libreoffice-impress 819200
Linux rpmquery 命令的注意事项
Linux rpmquery 命令的注意事项如下:
- rpmquery 命令只能查询 RPM 包的信息,不能对 RPM 包进行安装、升级、卸载等操作,如果需要这些功能,可以使用 rpm 命令或 yum 命令。
- rpmquery 命令的查询结果可能会受到 RPM 数据库的影响,如果 RPM 数据库损坏或不一致,可能会导致查询结果不准确或出现错误,如果遇到这种情况,可以使用 rpm --rebuilddb 命令来重建 RPM 数据库。
- rpmquery 命令的查询结果可能会受到 RPM 包的签名的影响,如果 RPM 包的签名不被信任或无效,可能会导致查询结果不完整或出现警告,如果遇到这种情况,可以使用 rpm --import 命令来导入 RPM 包的签名或使用 --nosignature 选项来忽略 RPM 包的签名。
- rpmquery 命令的查询结果可能会受到 RPM 包的版本的影响,如果 RPM 包的版本与系统的版本不匹配,可能会导致查询结果不兼容或出现错误,如果遇到这种情况,可以使用 --force 选项来强制查询 RPM 包的信息,但不建议这样做,因为可能会导致系统的不稳定或损坏。
- 如果在查询 RPM 包的信息时出现 bash: rpmquery: command not found 的错误,说明 rpmquery 命令没有安装或没有在 PATH 环境变量中,可以按照上面的安装命令来安装 rpmquery 命令,或者使用 rpm -q 命令来代替 rpmquery 命令。
评论区