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

Mik*_*ike 6 package-management apt dpkg

我刚刚安装了一个包(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]?
Run Code Online (Sandbox Code Playgroud)

所以我安装了它和依赖项。到现在为止还挺好。

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

# 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]?
Run Code Online (Sandbox Code Playgroud)

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

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

Anw*_*war 3

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

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

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

这个问题最可能的原因似乎是,在安装软件包后dansguardian,您稍后通过执行以下此类命令安装了所有依赖包:

sudo apt-get install clamav clamav-base clamav-freshclam dansguardian libclamav6 libtommath0
Run Code Online (Sandbox Code Playgroud)

如果确实如此,您无法通过删除它们的母包来卸载它们dansguardian。因为在 APT 的语言中,当您通过将它们的名称输入到显式安装这些软件包时,它们是“手动”安装的apt-get,因此还必须通过显式说明它们的软件包名称来卸载它们

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

去除:

您必须通过明确命名已安装的软件包来删除它们的名称。因此,在您的具体情况下,它是

sudo apt-get purge clamav clamav-base clamav-freshclam dansguardian libclamav6 libtommath0
Run Code Online (Sandbox Code Playgroud)

查看依赖包

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

apt-cache depends -i dansguardian | cut -f 2 -d ':' | tr '\n' ' '.
Run Code Online (Sandbox Code Playgroud)

请注意dansguardian取决于包libc6。而该软件包在您的系统中是非常非常重要的。dansguardian所以,你不能通过命令生成依赖包列表来删除所有依赖apt-cache,因此不建议这样做。(实际上,强烈建议避免这样做,除非您对损坏的系统感到满意)