如何检查Deb软件包的依赖项列表


93

如何检查Deb软件包的依赖项列表。我正在运行Ubuntu 11.10,并且已经备份了所有的deb软件包var/cache/apt/archives。我想格式化我的电脑并仅重新安装所选的应用程序。另外,我如何获得已安装软件包和依赖项的列表。


关于第二个问题看askubuntu.com/questions/17823/...
htorque

有关已安装软件包的完整列表,请使用dpkg --get-selections | sed -n 's/[[:space:]]install$//p'
Tino

Answers:


72

除了该dpkg方法之外,您还可以检查存储库中软件包的依赖关系:

apt-cache depends package-name

编辑用@Tino的推荐进行了更新。@Tigran的评论不再适用。


3
注意:仅在已安装软件包的情况下才有效。
Tigran Saluev '16

@TigranSaluev请注意,dpkg -I package仅适用于已安装的软件包。 apt-cache完成所有已知的软件包的工作apt-get update
蒂诺(Tino)

1
apt-cache depends package在这种情况下,这是一种更好的方法,因为showpkg并不能确定依赖项是否是推荐,冲突等,因此有点令人费解。有关depends结合使用的脚本,showpkg请参见unix.stackexchange.com/a/362866/23450
Tino,

100

这将显示有关该软件包的所有信息:

dpkg -I package.deb

在Ubuntu 14.04上不再dpkg -I splunkforwarder-6.3.3-f44afce176d0-linux-2.6-amd64.deb new debian package, version 2.0. size 15881308 bytes: control archive=3104 bytes. 153 bytes, 5 lines control 6058 bytes, 207 lines * postinst #!/bin/bash 2912 bytes, 93 lines * preinst #!/bin/bash Package: splunkforwarder Version: 6.3.3 Maintainer: Splunk Inc. <info@splunk.com> Architecture: amd64 Description: Splunk The platform for machine data.
Craig S. Anderson

@ CraigS.Anderson在这里运行14.04,就我而言,它非常完美。应该是恕我直言的答案。
magic_al

别忘了/var/cache/apt/archives/在软件包名称前放上,并使用制表符补全查找带有版本的完整软件包名称,例如dpkg -I /var/cache/apt/archives/elasticsearch_2.4.4_all.deb
杰森·库姆斯

1
我没有看到任何依赖项信息
Nick

您可以补充说,无需使用(重新安装)该软件包即可获得该软件包(这可能是一个流行的用例)sudo apt-get install --reinstall --download-only [package name]
Karl Richter '18

2

apt-cache depends [Package-Name]也会工作。尽管如果您.deb从来源列表之外获取软件包,则类似的内容 apt-cache showpkg [Package-Name] && apt-cache depends [Package-Name]可能会显示过期信息或可能与实际安装的软件包不同步,因此 dpkg -I [Package-Name]在这种情况下效果最佳。


2

对于14.04及更高版本:

dpkg没有-I更多了,您必须使用它dpkg-deb来显示软件包信息,包括依赖项:

dpkg-deb -I package.deb

1
嗨,Fabby,dpkg当前没有-I选项。在Ubuntu 12.04和16.04上测试。您必须改为使用dpkg-deb。
Rup Narayan

评论已撤消;答案得到澄清和支持
Fabby

0

这有些草率,可能不很全面,您可以进行dpkg -I输出以获取依赖项列表的后处理:

冷凝式电脑

# dpkg -I package.deb | python -c "import sys, re; t=re.split(r'\n(?= ?[\w]+:)|:', sys.stdin.read()); print '\n'.join([i.strip() for i in {key.strip(): value.strip() for key, value in zip(t[::2], t[1::2])}['Depends'].split(',')])"
#

扩展为人类:

dpkg -I package.deb | python -c "
    import sys, re;
    # Split keys and values into pairs (zipped together later)
    t=re.split(
        r'\n(?= ?[\w]+:)|:', 
        sys.stdin.read()
    ); 
    # Newline separate each dependency
    print '\n'.join([
        # Trim each dependency value
        i.strip() for i in {
            # Build assoc array from package metadata
            key.strip(): value.strip() 
            for key, value in zip(t[::2], t[1::2])
        }['Depends'].split(',')
    ])
"

这将回显依赖于'foo.deb'并且尚未安装的软件包:dpkg -I foo.deb | for i in $(awk -F',''/ Depends:/ {gsub(/:/,“,”); for(i = 2; i <= NF; i ++){gsub(/。* $ /, “”,$(i)); printf(“%s \ n”,$(i));}}'); 做dpkg -s $ i&> / dev / null || 回声$ i; 完成| tr'\ n'''
Gregory Burd 2015年

@GregoryBurd,请随意编辑我的答案/提示,出于这个原因,我将其发布为社区Wiki ^ u ^
ThorSummoner

当我在elasticsearch上运行此命令时,它发出libc6\nadduser\n Installed-Size\n。也就是说,它似乎比Depends行更匹配。
杰森·库姆斯

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.