执行此操作时apt install
,我会在以下行下获得需要安装的软件包列表:
The following NEW packages will be installed:
如果没有,它将继续没有提示。我试图检索此列表,但如果没有,则会失败,因为安装将继续进行。我想在不安装的情况下获取此列表。
我试过这样的事情:
apt-cache depends --recurse packagename | grep -v " " | sort -u
但它提供了完整列表,包括已安装的列表。我想把它限制在那些需要安装的地方。
我知道我可以将上面的输出与结果进行比较
dpkg --get-selections
查看哪些已安装,哪些未安装,但它会涉及循环内的循环,并且两个列表都很长。肯定有更优雅的方式来做到这一点。
感谢您的任何建议。(这是我第一次在这里提问)
编辑:我检查了使用rdepends
此问题中给出的方法:
递归依赖项
这将是我正在寻找的,除了它会产生与apt install
给出的不同的列表。它甚至列出了可卸载的依赖项(不可能,因为包本身安装成功)。我正在寻找的是在apt
给定包之前安装的包列表。无论如何,我不明白为什么列表不同。结果应该是一样的吧?但既然不是,那么它不是我要找的。但是,如果有人可以向我解释为什么他们给出不同的结果,我将不胜感激。
利用:
apt -s install ...
-s
将选项传递给apt
它会使其模拟安装,但不会实际安装或修改任何东西。这显示了您在安装软件包时可以看到apt
的内容,包括哪些软件包被拉入以满足其(直接和间接)依赖关系。例如,要了解安装
apache2
软件包时会发生什么,您可以运行:这显示您将采取哪些步骤
sudo apt install apache2
。该
-s
选项也可以拼写为--simulate
,--just-print
,--dry-run
,--recon
,中的任何一个--no-act
。因此,如果您看到(或写下)其中任何一个,他们正在做同样的事情。该
-s
选项记录在man apt-get
而不是man apt
(后者没有记录大多数功能和选项),但两者apt-get -s install ...
和apt -s install ...
都受支持。您同样可以使用 模拟其他动作
-s
,例如remove
动作。与
apt
实际更改系统的命令不同,apt -s
以 root 身份运行是可选的,因此您可以省略sudo
.似乎
apt -s install
(从另一个答案)可以满足您的需求。您可以考虑的其他工具是apt-rdepends
和apt-cache
。但是,它们列出了来自 的不同包apt -s install
,因此使用哪个包取决于您的需要。apt
可能包括标记为“建议”和“推荐”的软件包,具体取决于您的配置。apt-rdepends
不排除其他人已经提供的包。假设您安装了软件包xyz-ng
,并且它提供了xyz
.apt-rdepends
列出xyz
,因为它是一个未安装的依赖项,但apt
不需要安装,xyz
因为它是由xyz-ng
已安装的 提供的。xyz-ng
和xyz
会发生冲突。所以xyz
不卸载就无法安装xyz-ng
。apt-cache
可能出于其他原因包含不必要的包,例如其他架构 (i386
)。以下是使用
apt-rdepends
管道输出到其他实用程序以清理包列表的示例用法:这是一个使用
aptitude
管道输出清理包列表的示例:您可以使用 aptitude 完成此操作: