列出从仓库“ X”安装的所有RPM软件包


Answers:


45

CentOS / RHEL / Fedora 22或更早版本

yum list installed | grep @epel

Fedora 23或更高版本

dnf list installed | grep @epel

8
这是行不通的。如果它们太长,百胜将把管线输出到会断裂的管道。因此,grep的输入大多数是每个软件包一行,但也可能是两行。百胜可以通过“ whizbanger.x86_64 ___ 3.8.4-2.el6 _______________ @epel”。(将下划线想象为空格。)“ @epel”位于grep输入的下一行。因此,grep将输出该行,除了“ @epel”外,不带包名称的前一行。
Todd Walton

您可能需要以root用户身份运行这些命令,直到bugzilla.redhat.com/show_bug.cgi?id=1525645得到修复。
proski

如果回购协议出现问题,则yum命令似乎不起作用。我需要此列表以查看是否要禁用有问题的回购协议。
Jayen

@Todd Watson我知道,这是一个hack,但是“ export COLUMNS = 999 yum ...”又如何呢?
Massimo

这行得通吗,@ Massimo?那将是一个不错的解决方法。我还发现这与UNIX StackExchange问题:unix.stackexchange.com/questions/308731/...
托德·沃尔顿

17

从RHEL6开始,如该stackoverflow答案中所建议,存在一种更彻底的方法yumdb

yumdb search from_repo REPOID*

Repoid采用通配符。

漂亮印刷

如果我们要欺骗并通过管道传输输出,那么我们也可以实现漂亮的打印效果。这是一个使用awk

yumdb search from_repo REPOID* |awk -F"\n" '{ RS=""; print $1 }'

使用egrepgrep -e

yumdb search from_repo REPOID* |egrep -v '(from_repo|^$)'

list_ALL_AVAILABLE_from_repo

要列出指定存储库中的所有可用软件包,请执行以下操作:

repoquery -a --repoid=REPONAME

只是一个旁注:要列出指定存储库中的所有软件包,请执行repoquery -qa --repoid=REPONAME
ILMostro_7 2014年

2
这也是一个很好的答案。输出的长度比接受的答案长,但格式更好。
Routhinator 2015年

可以简化为repoquery -a --repoid=REPONAME因为根据手册页-q选项是为了实现rpmquery兼容性,所以不执行任何操作。
Rockallite

@Rockallite是正确的;对于dnf,-qa实际上失败了。我不能给予好评注释由于先前去除给予好评:(我更新了答案,以反映。
ILMostro_7

11
dnf repo-pkgs <repoid> list installed

笔记

上面的命令使用DNF列出从安装的软件包<repoid>。注意repo-pkgs只是的别名repository-packages

man页面:

man dnf | grep "repository-packages.*list.*installed" -A 1

进一步阅读:

man dnf

3

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'

2

RHEL Server 7.5(Maipo)

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

1

您可以检查Vendor已安装的rpm 的标头。

此示例列出了VideoLAN存储库中的所有软件包:

 rpm -q -a --qf "%{Name}:%{Vendor}\n" \
     | grep -F ":VideoLAN Project (http://www.videolan.org)"

显然,您需要确定Vendor存储库的标头在不同存储库之间是否唯一。


3
供应商和存储库之间没有一对一的映射,在某些情况下,供应商字符串为空。
Lorin Hochstein

1

对于只想查找缺少存储库的人:

yum list installed | awk '{print $3}' | sort | uniq

这将返回安装了软件包的所有存储库。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.