就像对答案的评论中提到的那样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
.
设置RecommendsImportant
为false
打破了软件包安装的对称性,因此不应在apt
的配置中设置它,除非您默认也禁用“推荐”安装 ( Apt::Install-Recommends
)。对于常规桌面使用来说,这通常不是一个好主意。