为什么“自动删除”不能删除所有不必要的依赖项?

为什么“自动删除”不能删除所有不必要的依赖项?

我刚刚安装了一个包(dansguardian在这种情况下)并apt告诉我有未满足的依赖关系。

# sudo apt-get install dansguardian
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  clamav clamav-base clamav-freshclam libclamav6 libtommath0
Suggested packages:
  clamav-docs squid libclamunrar6
The following NEW packages will be installed:
  clamav clamav-base clamav-freshclam dansguardian libclamav6 libtommath0
0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/4,956 kB of archives.
After this operation, 14.4 MB of additional disk space will be used.
Do you want to continue [Y/n]?

所以我安装了它和依赖项。到目前为止一切顺利。

后来,我决定这个包不适合我,所以我想删除它以及它安装的所有其他垃圾,因为我不再需要它们了:

# sudo apt-get remove --auto-remove --purge dansguardian
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  dansguardian
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 1,816 kB disk space will be freed.
Do you want to continue [Y/n]?

但是它只删除了那个特定的包。那怎么办clamav clamav-base clamav-freshclam libclamav6 libtommath0?它不仅没有删除它们,而且clamav实际上还运行了一个在每次计算机启动时加载的守护进程。我以为这--auto-remove不仅会删除包,还会删除随其安装的依赖项。

所以基本上,无需查看apt历史日志文件(如果我记得这样做,或者如果我记得 3 个月前安装的特定包有依赖项),有没有办法删除包和所有其他像在这种情况下安装的依赖项?

答案1

正如 izx 在他的一般回答中所说,第一点可能是导致此类事情的原因。

现在,系统上仍安装的一些其他软件包也需要/推荐这些依赖项。

这是最可能和最有效的原因种类的情况,但我认为,其他以 命名的包clamav clamav-base clamav-freshclam libclamav6 libtommath0很可能只与其母包相关联clamav。因此,第一点,在这种情况下可能并非如此特别的情况。

导致此问题的最可能原因似乎是,在安装软件包之后dansguardian,您通过执行下面这样的命令安装了其所有依赖软件包:

sudo apt-get install clamav clamav-base clamav-freshclam dansguardian libclamav6 libtommath0

如果确实如此,您无法通过删除它们的母包来卸载它们dansguardian。因为在 APT 的语言中,它们是“手动”安装的,因为您通过将它们的名称提供给命令来明确安装这些包apt-get,所以必须还可以通过明确说明其软件包名称来卸载它们

如果是这种情况,您可以通过查看/var/log/apt/history.log文件来检查。

去除:

您必须通过明确命名来删除已安装的软件包。因此,在您的特定情况下

sudo apt-get purge clamav clamav-base clamav-freshclam dansguardian libclamav6 libtommath0

查看依赖包

您可以使用以下命令找到所有依赖包:

apt-cache depends -i dansguardian | cut -f 2 -d ':' | tr '\n' ' '.

笔记依赖dansguardian于软件包libc6。而该软件包对于您的系统来说非常非常重要。因此,您无法dansguardian通过使用apt-cache命令生成其依赖包列表来删除所有 的依赖关系,因此不建议这样做。(实际上,强烈建议避免这样做,除非你对损坏的系统感到满意)

答案2

具体答案:

这不是正常行为:

izx@preciseunity:~$ sudo apt-get remove --auto-remove --purge dansguardian
正在读取软件包列表...完成
构建依赖关系树       
正在读取状态信息...完成
下列软件包将被删除:
  clamav* clamav-base* clamav-freshclam*丹斯卫士*libclamav6*
  libtommath0* python-gpgme*
升级了 0 个,新安装了 0 个,删除了 7 个,并且未升级 91 个。
此操作后,将释放14.7 MB的磁盘空间。
您想继续 [Y/n] 吗?

请参阅下面的一般答案 1 来了解最可能的原因。


一般答案:

发生这种情况的原因有很多。最常见的原因是:

  1. 现在,系统上仍安装的一些其他软件包也需要/推荐这些依赖项。
  2. 原始软件包是元软件包,即快速安装多个软件包的快捷方式。删除元软件包只会删除快捷方式本身,而不会删除其安装的所有软件包。常见示例是各种伞式桌面软件包,例如Ubuntu 桌面

去除,使用apt-cache depends package-name来获取其依赖项,并将它们提供给apt-get remove。仔细检查显示的列表以确保您没有丢失任何重要信息!

您可以使用以下命令一步完成此操作(再次强调,除非您已阅读列表,否则请不要按 Y!):

sudo apt-get 删除`apt-cache 依赖于 dansguardian | grep Dep | cut -d: -f2 | tr'\n'''`

相关内容