bam*_*amm 5 package-management command-line apt
这样做时apt install
,我会在以下行下获得需要安装的软件包列表:
The following NEW packages will be installed:
Run Code Online (Sandbox Code Playgroud)
如果没有,它将在没有提示的情况下继续。我试图检索此列表,但如果没有,则会失败,因为安装将继续进行。我想在不安装的情况下获取此列表。
我试过这样的事情:
apt-cache depends --recurse packagename | grep -v " " | sort -u
Run Code Online (Sandbox Code Playgroud)
但它提供了一个完整的列表,包括那些已经安装的列表。我想将其限制为需要安装的那些。
我知道我可以将上面的输出与结果进行比较
dpkg --get-selections
Run Code Online (Sandbox Code Playgroud)
查看哪些已安装,哪些未安装,但这将涉及循环内的循环,并且两个列表都很长。肯定必须有一种更优雅的方式来做到这一点。
感谢您的任何建议。(这是我第一次在这里提问)
编辑:我使用rdepends
这个问题中给出的方法检查了方法:
Recursive dependencies
这将是我正在寻找的,只是它会导致与apt install
给出的列表不同。它甚至列出了可卸载的依赖项(这是不可能的,因为包本身已成功安装)。我正在寻找的是apt
将在给定包之前安装的包列表。无论如何,我不明白为什么列表不同。结果应该是一样的吧?但既然不是,那么这不是我要找的。但是,如果有人能向我解释为什么他们给出不同的结果,我将不胜感激。
apt -s install ...
传递-s
选项以apt
使其模拟安装但不实际安装或修改任何内容。这显示了您apt
在安装软件包时可以期望看到的内容,包括引入哪些软件包以满足其(直接和间接)依赖项。
例如,要了解安装apache2
软件包时会发生什么,您可以运行:
apt -s install apache2
Run Code Online (Sandbox Code Playgroud)
这将向您显示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
通过管道传输到其他实用程序以清理包列表的with 输出的示例用法:
package="whatever"
apt-rdepends \
--state-follow=NotInstalled --state-show=NotInstalled \
-f Depends -s Depends "$package" 2> /dev/null |
grep Depends\:\ |
sed -E 's@\ \(.*\)$@@ ; s@^\s+Depends\:\ @@' |
sort -u
Run Code Online (Sandbox Code Playgroud)
这是一个使用aptitude
管道输出清理包列表的示例:
package="whatever"
aptitude -s -y install "$package" |
sed -E -e '1h;2,$H;$!d;g' \
-e 's@(.*\n)+.*NEW\ packages\ will\ be\ installed:\n(.*\n).*RECOMMENDED but will NOT be installed:(\n.*)+@\2@' \
-e 's@(\{[a-z]\})?\ @\n@g' |
sort -u
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
921 次 |
最近记录: |