我不断得到像这样的答案:

yum list installed | grep bind




rpm -qa | grep bind


但是我不准确获取其他一些这样的绑定程序包的列表:

bind-utils-9.8.2-0.17.rc1.el6_4.5.x86_64
rpcbind-0.2.0-11.el6.x86_64
bind-libs-9.8.2-0.17.rc1.el6_4.5.x86_64
samba-winbind-3.6.9-151.el6.x86_64
samba-winbind-clients-3.6.9-151.el6.x86_64
ypbind-1.20.4-30.el6.x86_64


那不是我想要的。相反,我想准确检查绑定核心软件包是否已安装。例如。 bind.x86_64 32:9.8.2-0.17.rc1.el6_4.6

我希望有这样的东西:

yum check installed bind


,但希望有人能照亮。

#1 楼

您尝试过吗?

$ yum list installed bind


评论


我收到错误消息:没有匹配的软件包列表和$?返回1,当我尝试安装安装的绑定库的yum list时,$?返回0。到目前为止应该是正确的。我可以安全地得出结论,您的命令可以准确地确定已安装软件包吗?我确实发现了rpm -q绑定。它也等同于您的命令吗?

–校验和
2013年12月3日15:32

这是正确的AFAIK,只有安装了软件包,才退出代码0。

–plasmid87
2013年12月3日15:35

我认为这是有效的。我喜欢单线解决方案。

–校验和
2013年12月3日15:42

我认为正确的命令是使用通配符:yum list install bind *

–亚历杭德罗·安杰利科(Alejandro Angelico)
17-2-14在12:39



@NoahSussman您可以尝试安装yum -C list bind以避免网络连接。这样可以使所有插件保持启用状态(以防万一您有任何影响yumdb中查找的奇特功能),并告诉您从中安装了软件包的仓库

–plasmid87
18年1月24日在21:47

#2 楼

发出此查询的方法要简单得多:rpm -qa | grep bindrpm -q bind。如果您不确定包名,最好使用前者。

评论


为rpm -q $ package +1,我相信这是最快的解决方案,因为使用yum进行任何操作都可能会强制进行高速缓存更新(通常很慢)。

– Alex S
17年1月4日在21:11

该解决方案(使用rpm)应该是可以接受的答案,因为它返回干净的退出状态,并且不需要像yum解决方案那样调用大量的远程URL。

–诺亚·萨斯曼(Noah Sussman)
18年1月24日15:37



@NoahSussman在我能想到的所有示例中,yum和rpm的退出代码都遵循相同的行为(0 =已安装,1 =未安装/错误),因此了解您是否看到不同的退出代码将很有用。请查看我以上关于使用缓存以避免网络访问的回复

–plasmid87
18年1月24日在21:54

@ plasmid87我不知道我可以使用yum -C来防止yum花费所有额外的时间与网络主机联系。谢谢,我现在看到在这里如何可以互换使用yum和rpm!

–诺亚·萨斯曼(Noah Sussman)
18年5月1日在15:18

rpm -q [软件包名称] +1

–贡萨洛·佩雷斯龚耀禄
20-10-7在18:41

#3 楼

解析此命令的结果是最完整的答案。您需要知道确切的软件包名称。

yum info bind

Loaded plugins: refresh-packagekit, rhnplugin
This system is receiving updates from RHN Classic or RHN Satellite.
Installed Packages
Name        : bind
Arch        : x86_64
Epoch       : 32
Version     : 9.8.2
Release     : 0.17.rc1.el6_4.6
Size        : 7.3 M
Repo        : installed
From repo   : rhel-x86_64-workstation-6
Summary     : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
URL         : http://www.isc.org/products/BIND/
License     : ISC
Description : BIND (Berkeley Internet Name Domain) is an implementation of the DNS
        : (Domain Name System) protocols. BIND includes a DNS server (named),
        : which resolves host names to IP addresses; a resolver library
        : (routines for applications to use when interfacing with DNS); and
        : tools for verifying that the DNS server is operating properly.


评论


嗯,这不是在告诉我bind是可用的/有效的yum软件包,而不是告诉我它是否已安装吗?

–校验和
2013年12月3日15:34



这不是很明显,但是如果Repo标记下列出了已安装,则表示已安装。否则,它将列出可用的存储库。

–弗雷德·神奇狗
13年12月4日,0:12

当我只想查看本地计算机上发生的事情时,这将导致连接到远程yum仓库。

–诺亚·萨斯曼(Noah Sussman)
18年1月24日在15:39

#4 楼

我想出的最好的衬纸(非常适合在脚本中快速使用)是:

yum info <package_name> | grep Repo | awk '{ print  }'


例如:如果我当前有git已安装:

yum info git | grep Repo | awk '{ print  }'


这将返回installed

如果我当前未安装git,则相同的先前命令将返回:base/7/x86_64 git的当前可用安装

评论


当我只想查看本地计算机上发生的事情时,这将导致连接到远程yum仓库。

–诺亚·萨斯曼(Noah Sussman)
18年1月24日在15:39

@NoahSussman列出您本地计算机上当前安装的所有软件包,您可以使用已安装的yum列表。从那里,您可以使用grep命令来获取您要查找的内容的更精确答案。另外,如果您要检查特定的软件包,可以将其添加到命令中-例如:php70w。 yum list installed php70w将列出已安装软件包的信息,或者返回没有匹配的软件包到列表

–domdambrogia
18年1月24日在17:21



#5 楼

使用Python代码检查是否使用yum在python中安装了软件包:

def is_installed(package_name):
    return "not installed" in commands.getstatusoutput("rpm -q " + package_name)[1]


评论


这不应该吗?

– Inbar Rose
18年5月23日在8:36

#6 楼

yum list installed bind >/dev/null ; echo $?


如果结果为0(零),则表示已安装软件包

评论


与John的答案中显示的rpm -q bind解决方案相比,这非常慢。

–诺亚·萨斯曼(Noah Sussman)
18年1月24日在15:40

尽管也许使用yum -C ...会很快。

–诺亚·萨斯曼(Noah Sussman)
18年5月1日15:19