使用zypper生成反向依赖关系

13

使用 zypper,我可以获取一个软件包 A 依赖于软件包 B。但是我需要知道的是哪些软件包依赖于软件包 B。

是否有一种方法来生成逆向依赖列表?

6个回答

27

您可以使用以下命令在包中搜索需要某个特定软件包的依赖项:

zypper se --requires packagename

此外,您还可以使用以下命令只在已安装的软件包中搜索:

zypper se -i --requires packagename

例如,要查找需要libpng的软件包:

# zypper se -i --requires libpng
Loading repository data... 
Reading installed packages...
S | Name                        | Summary                                                             | Type   
--+-----------------------------+---------------------------------------------------------------------+--------
i | DirectFB                    | Graphics Library for Framebuffer Devices                            | package
i | MPlayer                     | Multimedia Player                                                   | package
i | cairo-devel                 | Development environment for cairo                                   | package
etc.

1
但是 zypper se --requires gdal 显示 gdal-devel,而 zypper info --requires gdal-devel 没有列出 gdal 作为要求。我理解错了什么? - bers

2

Zypper 1.14.33+有一个--requires-pkg选项,可能会比--requires选项产生更多的结果。详情请见这里

# zypper se --requires-pkg packagename

# zypper help search | grep -A1 requires-pkg
--requires-pkg          Search for all packages that require any of the provides of the
                        package(s) matched by the input parameters.

请解释一下? - PCM
@PCM 我只知道--requires对我不起作用。我在帮助文档中找到了--requires-pkg,它可以正常工作。我不知道为什么。 - djoreilly

1

假设您想知道谁依赖于libpng14

在tcsh中:

zypper search -i | cut -d \| -f 2 | tr -s '\n' ' ' > z.txt
foreach i ( `cat z.txt` )
  zypper info --requires $i |grep libpng14 &&echo $i
end

过一会儿,您将开始获得以下结果:

libpng14.so.14()(64bit)
libpng14.so.14(PNG14_0)(64bit)
DirectFB
libpng14.so.14()(64bit)
libpng14.so.14(PNG14_0)(64bit)
MPlayer

你需要将包与grep消息分开。


3
请将文本从英语翻译成中文:(使用“grep”的-q修饰符以不回显结果) - mveroone

0
如果已经安装了,您可以使用rpm --whatrequires命令:
--whatrequires CAPABILITY
        Query all packages that require CAPABILITY for proper functioning.
        Note that this does not return what requires a given package. 

如果没有的话,现在你们我们就没办法了。

1
谢谢 - 但是rpm似乎无法正常工作。根据rpm的说法,系统中没有任何东西需要其他东西。因此,rpm可以自行卸载所有内容 :( - user626201

-1

这个有效:

rpm -e --test PKGNAME

来源:man rpm


-1

希望这对你有用:

betatester@myryzen:~/tmp> rpm -qi --requires \`rpm -qa | grep 'package-name'\`

这与现有答案相比如何?鉴于这个问题已经有一个获得超过20个赞的答案,确保你的答案添加了新信息并解释为什么这些新信息与现有答案相比是相关和有用的是很有用的。 - Jeremy Caney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接