查找当前安装的软件包的最小等效项

A S*_*ity 8 package-management apt dpkg

我使用了一个工具来计算您可以安装的最小软件包集,以获得您拥有的当前软件包集。这不同于告诉您您的选择是什么。从字面上看,它会找到最短的软件包列表,这些软件包将通过依赖项为您提供当前拥有的内容。

我忘了在哪里可以找到这个工具。这叫什么?

Oli*_*Oli 4

aptitude可以通过其搜索功能为您提供大部分帮助。以下是如何找到所有已安装的内容,而不仅仅是自动依赖项:

aptitude search -F "%p" "?installed ?not(?automatic)"
Run Code Online (Sandbox Code Playgroud)

这不是最佳选择,其中一些可能可以删除,但我不知道解决这个问题的简单方法。也许答案就在man aptitude

再一想,通过该列表,您可以循环遍历它并找到每个包的依赖包(而不是依赖项)。如果其中一个在主列表中,请从列表中删除当前包...但只有在解析整个列表之后,否则您将错过 3 级以上 dep 树中的中间体。

您可以通过如下查询找到家属:

aptitude search '~i~Dpackage'
Run Code Online (Sandbox Code Playgroud)

我会尝试编写脚本,但我是在一个小手机键盘上输入的。即使我也有极限。

编辑:尝试睡觉五分钟后,我开始研究这个。像这样的事情应该可以完成工作:

orig=$(aptitude search -F "%p" "?installed ?not(?automatic)")
newlist="";
for p in $orig; do
    depended=0;
    for dependant in `aptitude search -F "%p" "~i~D$p"`; do
        if [[ $orig == "* $dependant *" ]]; then
            depended=1;
        fi;
    done;
    if [[ $depended == 0 ]]; then
        newlist="$newlist $p";
    fi;
done;
echo $newlist
Run Code Online (Sandbox Code Playgroud)

请注意,这需要长时间才能运行,并且可能过于敏感(例如,它会删除您手动安装的东西,您想要手动安装的东西,如果它们被您在 $orig 列表中的其他东西所依赖)也许是之后安装的)。