如何从特定存储库(例如“ epel”)中获取系统上已安装的所有RPM软件包的列表?
如何从特定存储库(例如“ epel”)中获取系统上已安装的所有RPM软件包的列表?
Answers:
yum list installed | grep @epel
dnf list installed | grep @epel
从RHEL6开始,如该stackoverflow答案中所建议,存在一种更彻底的方法yumdb
:
yumdb search from_repo REPOID*
Repoid采用通配符。
如果我们要欺骗并通过管道传输输出,那么我们也可以实现漂亮的打印效果。这是一个使用awk
yumdb search from_repo REPOID* |awk -F"\n" '{ RS=""; print $1 }'
使用egrep
或grep -e
yumdb search from_repo REPOID* |egrep -v '(from_repo|^$)'
要列出指定存储库中的所有可用软件包,请执行以下操作:
repoquery -a --repoid=REPONAME
repoquery -qa --repoid=REPONAME
repoquery -a --repoid=REPONAME
因为根据手册页-q
选项是为了实现rpmquery兼容性,所以不执行任何操作。
-qa
实际上失败了。我不能给予好评注释由于先前去除给予好评:(我更新了答案,以反映。
yum的输出是最明显的方法:
yum list installed | grep @epel
但是,您无法显示额外的程序包属性,并且很难用脚本来解析。该工具repoquery
从包yum-utils
是工具,但它不是默认安装的。
repoquery -a --installed --qf "%{ui_from_repo} %{name}" | grep '^@epel'
还有一个更复杂的示例:
repoquery -a --installed --qf "%-20{ui_from_repo} %-30{name} %-7{arch} %{epoch}:%-12{version} %-4{release}" | grep '^@epel'
yum repo-pkgs <repoid> list installed
可用于检索与相同的信息yumdb search from_repo <repoid>
,但格式不同。
# yum help repo-pkgs
repo-pkgs <repoid> <list|info|install|remove|upgrade|reinstall*|remove-or-*> [pkg(s)]
Treat a repo. as a group of packages, so we can install/remove all of them
aliases: repo-packages, repository-pkgs, repository-packages
样本epel
输出:
# yumdb search from_repo epel
htop-2.2.0-1.el7.x86_64
from_repo = epel
supervisor-3.1.4-1.el7.noarch
from_repo = epel
# yum repo-pkgs epel list installed
Installed Packages
htop.x86_64 2.2.0-1.el7 @epel
supervisor.noarch 3.1.4-1.el7 @epel
您可以检查Vendor
已安装的rpm 的标头。
此示例列出了VideoLAN存储库中的所有软件包:
rpm -q -a --qf "%{Name}:%{Vendor}\n" \
| grep -F ":VideoLAN Project (http://www.videolan.org)"
显然,您需要确定Vendor
存储库的标头在不同存储库之间是否唯一。
对于只想查找缺少存储库的人:
yum list installed | awk '{print $3}' | sort | uniq
这将返回安装了软件包的所有存储库。