即使使用 Apt::AutoRemove::SuggestsImportant "false",apt autoremove 也不会删除所有依赖项;

即使使用 Apt::AutoRemove::SuggestsImportant "false",apt autoremove 也不会删除所有依赖项;

就像对答案的评论中提到的那样Debian 9.1:apt-get autoremove 不会删除依赖项,我在 /etc/apt/apt.conf 中添加了这一行Apt::AutoRemove::SuggestsImportant "false";,然后能够删除从 Debian Fast Track 安装 VirtualBox 时自动安装的 g++(我使用的是 Debian 12,所以我必须将代号 bullseye 替换为 bookworm,因为说明https://fasttrack.debian.net/没有更新)。

但是apt autoremove仍然不会卸载其他不再需要的自动安装的软件包,例如 libasan8。您知道为什么吗?有没有自动删除它们的解决方案?

以下是通过执行安装的所有软件包sudo apt install virtualbox

build-essential dkms dpkg-dev g++ g++-12 gcc gcc-12 libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan8 libc-dev-bin libc-devtools libc6-dev libcc1-0 libcrypt-dev libgcc-12-dev
libgsoap-2.8.124 libitm1 liblsan0 liblzf1 libnsl-dev libstdc++-12-dev libtirpc-dev libtsan2 libubsan1 libvncserver1 linux-compiler-gcc-12-x86 linux-headers-6.1.0-18-amd64 linux-headers-6.1.0-18-common
linux-headers-amd64 linux-kbuild-6.1 linux-libc-dev make manpages-dev patch rpcsvc-proto virtualbox virtualbox-dkms virtualbox-qt

以下是通过执行删除的包sudo apt purge virtualbox

virtualbox* virtualbox-qt*

通过执行以下命令删除这些附加包sudo apt autoremove --purge

dkms* libgsoap-2.8.124* liblzf1* libvncserver1* linux-headers-amd64* virtualbox-dkms*

通过在添加 /etc/apt/apt.conf 后执行相同的命令Apt::AutoRemove::SuggestsImportant "false";,这些软件包也被删除:

build-essential* dpkg-dev* g++* g++-12* gcc* libalgorithm-diff-perl* libalgorithm-diff-xs-perl* libalgorithm-merge-perl* libstdc++-12-dev* make* patch*

根据我的评论后的要求,以下是输出aptitude why libasan8

i   aptitude      Recommends libdpkg-perl               
i A libdpkg-perl  Suggests   gcc | c-compiler           
i A gcc-12        Provides   c-compiler                 
i A gcc-12        Depends    libgcc-12-dev (= 12.2.0-14)
i A libgcc-12-dev Depends    libasan8 (>= 12.2.0-14)

答案1

我回答的目的Debian 9.1:apt-get autoremove 不会删除依赖项只是为了使apt install和的行为apt autoremove对称 - 前者默认忽略“建议”依赖关系,答案解释了如何使后者也忽略它们。

就您而言,我认为没有一种自动方法可以删除由 拉入的所有软件包virtualbox,因为其中一个是linux-headers-6.1.0-18-amd64,并且这是受保护的内核软件包(请参阅/etc/apt/apt.conf.d/01autoremove您的系统)。在至少安装了两个较新的内核之前,它不会成为自动删除的候选者,因此如果您想删除它,则需要手动删除它:

   sudo apt purge linux-headers-6.1.0-18-amd64

那里相应的 APT 选项Apt::Protect-Kernels,您可以禁用它 - 但假设您正在运行与最新软件包 6.1.0-18 匹配的内核,标头软件包仍将受到保护。

一旦该包被删除,C 编译器就应该成为自动删除的候选者,并且apt autoremove应该删除大部分(如果不是全部)剩余的包。

如果情况并非如此,您可能还需要告诉autoremove(或autopurge)忽略“推荐”依赖项:

sudo apt -o Apt::AutoRemove::RecommendsImportant=false autopurge

运行此程序时要小心 - 它将删除所有仅保留以满足“推荐”的软件包,这很可能比通过virtualbox.

设置RecommendsImportantfalse打破了软件包安装的对称性,因此不应在apt的配置中设置它,除非您默认也禁用“推荐”安装 ( Apt::Install-Recommends)。对于常规桌面使用来说,这通常不是一个好主意。

相关内容