如何列出没有包依赖的所有包?

Rei*_*ost 6 apt dependencies

首先,介绍。我刚刚找到了一个安装了各种 GUI 包的开发服务器。我想知道为什么。因此,我想知道安装了哪些需要X的软件。

我可以通过回答两个密切相关的问题来回答这个问题:

  • 如何列出没有其他软件包依赖的所有已安装软件包?
  • 如何列出没有其他软件包依赖的所有已安装软件包,并且直接或间接依赖于给定软件包?(例如,x11-common。)

对于第一个问题,apt-mark showmanual是一个有用的近似值,但可能并不完全正确。

对于第二个问题,我现在使用的是对apt-rdepends输出进行后处理以仅列出未列出作为结果列出的依赖项的结果。

这样对吗?有更容易的方法吗?我注意到结果包含很多未标记为手动安装的软件包。

我在 Ubuntu 14.04、16.04 和 18.04 上需要这个。

Fri*_*son 3

例如,您可以列出所有已安装的软件包dpkg-query,然后通过管道传递软件包名称以apt-cache查看它们是否具有任何反向依赖性。这是一种方法:

#!/bin/sh

dpkg-query --show --showformat='${Package}\t${Status}\n' | sed --quiet '
    /installed$/{
        s/^/apt-cache rdepends --installed /
        e
        s/\n/ /g                                                        
        /:$/{                                                               
            s/\s.*// 
            p                                   
        }    
    }               
'
Run Code Online (Sandbox Code Playgroud)

如果您想执行相反的操作并列出至少具有一个反向依赖项的包,只需更改/:$/为/:$/!

  • 很不错。重复调用 apt-cache 会使其变慢 - 我已将其修改为 dpkg-query --show --showformat='${Package}\t${Status}\n' | 塔克 | awk '/installed$/ {print $1}' | xargs apt-cache rdepends --已安装 | 塔克 | awk '{ if (/^/) ++deps; else if (!/:$/) { if (!deps) 打印; 依赖= 0 } }' ` (3认同)