我用 aptitude 删除了一些不再需要的软件包。令我惊讶的是,它们的依赖项都没有被自动删除(因为我认为 aptitude 默认情况下会这样做,与 apt-get 不同),所以我检查了这些依赖项,aptitude why
并且所有依赖项都标记有 status id
,根据手册,这意味着“已安装,将被删除”。什么时候会发生这种情况?我尝试运行apt-get autoremove
、aptitude upgrade
、aptititude full-upgrade
和apt-get dist-upgrade
,并且软件包仍然安装。另外,当我运行这些命令时,它们都会打印0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
What Causes the diffrepancy Between0 to remove
和having packages tagged with status id
?
编辑:经过更多挖掘后,我发现所有这些软件包都被标记为手动安装,即使它们是自动安装的。我查看了我的历史记录,发现其中许多都是使用 apt-get 而不是 aptitude 安装的,这可能是问题的一部分。我可以使用以下命令将它们全部删除:
# aptitude search "?installed" | grep "^id" | awk '{ print $2 }' | xargs apt-mark auto
# aptitude upgrade
我仍然很好奇“d”状态到底意味着什么,以及 apt-get/aptitude 用它做什么,所以我把这个问题留下来。
答案1
输出中的第二个状态dpkg -l
是选择,即所需状态。现在主要使用这个dselect
,但也可以使用dpkg --set-selections
。要从当前状态进入选择,您甚至需要一些能够查看选择的东西,而 aptitude 和 apt 默认情况下不会这样做。
不过,Apt 有一个选项可以做到这一点。赶紧跑:
apt-get dselect-upgrade
这应该进行所需的修改。
我不知道为什么包裹被留在一个id
状态。也许卸载没有成功完成?