我目前正在清理几台服务器。
我注意到一些奇怪的行为:
当我这样做时,apt-get autoremove
它会列出几个在我继续时要自动删除的标题,有时它会保留文件/文件夹/usr/src
,有时它们会被删除。
有什么原因吗?或者我该从哪里开始搜索?谷歌搜索没有找到太多结果。
即使自动删除功能给出“0 删除”,但标题仍然保留的机器
ubuntu@acc-ws-website-1:~$ sudo apt-get autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 65 not upgraded.
ubuntu@acc-ws-website-1:~$ ls -lart /usr/src
total 108
drwxr-xr-x 10 root root 4096 Apr 16 2014 ..
drwxr-xr-x 24 root root 4096 Jul 8 2014 linux-headers-3.13.0-24
drwxr-xr-x 7 root root 4096 Jul 8 2014 linux-headers-3.13.0-24-generic
drwxr-xr-x 3 ubuntu ubuntu 4096 Apr 17 2015 ixgbevf-2.14.2
drwxr-xr-x 24 root root 4096 Oct 6 2015 linux-headers-3.13.0-65
drwxr-xr-x 7 root root 4096 Oct 6 2015 linux-headers-3.13.0-65-generic
drwxr-xr-x 24 root root 4096 Oct 20 2015 linux-headers-3.13.0-66
drwxr-xr-x 7 root root 4096 Oct 20 2015 linux-headers-3.13.0-66-generic
drwxr-xr-x 24 root root 4096 Nov 5 2015 linux-headers-3.13.0-67
drwxr-xr-x 7 root root 4096 Nov 5 2015 linux-headers-3.13.0-67-generic
drwxr-xr-x 24 root root 4096 Nov 10 2015 linux-headers-3.13.0-68
drwxr-xr-x 7 root root 4096 Nov 10 2015 linux-headers-3.13.0-68-generic
drwxr-xr-x 24 root root 4096 Dec 1 2015 linux-headers-3.13.0-70
drwxr-xr-x 7 root root 4096 Dec 1 2015 linux-headers-3.13.0-70-generic
drwxr-xr-x 24 root root 4096 Dec 2 2015 linux-headers-3.13.0-71
drwxr-xr-x 7 root root 4096 Dec 2 2015 linux-headers-3.13.0-71-generic
drwxr-xr-x 24 root root 4096 Dec 17 2015 linux-headers-3.13.0-73
drwxr-xr-x 7 root root 4096 Dec 17 2015 linux-headers-3.13.0-73-generic
drwxr-xr-x 24 root root 4096 Dec 19 2015 linux-headers-3.13.0-74
drwxr-xr-x 7 root root 4096 Dec 19 2015 linux-headers-3.13.0-74-generic
drwxr-xr-x 24 root root 4096 Feb 2 2016 linux-headers-3.13.0-77
drwxr-xr-x 7 root root 4096 Feb 2 2016 linux-headers-3.13.0-77-generic
drwxr-xr-x 24 root root 4096 Feb 23 2016 linux-headers-3.13.0-79
drwxr-xr-x 7 root root 4096 Feb 23 2016 linux-headers-3.13.0-79-generic
drwxr-xr-x 24 root root 4096 Mar 30 06:50 linux-headers-3.13.0-115
drwxr-xr-x 7 root root 4096 Mar 30 06:50 linux-headers-3.13.0-115-generic
drwxr-xr-x 27 root root 4096 Mar 30 06:52 .
ubuntu@acc-ws-website-1:~$ uname -r
3.13.0-112-generic
而我期望的是这样的:
ubuntu@tools-jenkins:~$ sudo apt-get autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 94 not upgraded.
ubuntu@tools-jenkins:~$ ls -lart /usr/src
total 32
drwxr-xr-x 10 root root 4096 Mar 25 2015 ..
drwxr-xr-x 24 root root 4096 Dec 6 06:39 linux-headers-3.13.0-105
drwxr-xr-x 7 root root 4096 Dec 6 06:39 linux-headers-3.13.0-105-generic
drwxr-xr-x 24 root root 4096 Mar 8 06:44 linux-headers-3.13.0-112
drwxr-xr-x 7 root root 4096 Mar 8 06:44 linux-headers-3.13.0-112-generic
drwxr-xr-x 24 root root 4096 Mar 30 06:26 linux-headers-3.13.0-115
drwxr-xr-x 7 root root 4096 Mar 30 06:26 linux-headers-3.13.0-115-generic
drwxr-xr-x 8 root root 4096 Apr 3 10:50 .
ubuntu@tools-jenkins:~$ uname -r
3.13.0-105-generic
答案1
如果您的系统上仍安装了大量linux-headers*
软件包,您可以尝试这种简单的方法来删除旧的标头:
dpkg-query -f '${binary:Package}\n' -W linux-headers\*|xargs apt-mark auto
apt-mark manual linux-headers-generic
apt-get -f autoremove
如果我的假设是正确的,那么您的标头以某种方式被标记为手动安装,这会阻止您的系统删除这些软件包。例如,您直接安装了这些软件包,即要求 apt 安装内核标头软件包的确切版本。上述命令尝试将所有这些软件包标记为自动安装,并使一切按预期工作。
如果软件包已被删除,但文件夹仍然存在且里面只有一些残留文件,则意味着这些文件不属于该软件包。这可防止 apt 在卸载linux-headers*
软件包时删除顶层目录。在这种情况下,您应该手动删除文件。
琐事:apt 的自动删除功能仅适用于自动安装的软件包。这意味着软件包必须被标记为“自动安装”,并且不应有任何依赖于它的软件包。对于 Linux 内核及其标头,我们有以下常见情况:
- 有一个或多个元包
linux-generic
,例如linux-image-generic
和linux-headers-generic
通常标记为手动安装 - 有很多“真正的”软件包,其中包含文件,例如
linux-image-4.8.0-45-generic
元软件包依赖于其中一些软件包;这些通常标记为“自动安装” - 当元包更新时,它通常需要“真实”包的较新版本,因此会安装新版本
- 标记为“自动安装”的软件包仅在没有手动安装的软件包依赖于它时才会自动删除,因此当安装了新软件包后,旧软件包可能会在稍后自动删除,因为没有人再依赖这些软件包
答案2
你看到 94 个没有升级吗?这就是问题所在,我遇到过类似的问题,然后我手动升级了所有项目(未通过 apt-get upgrade 升级,这些文件包含依赖项)。之后我使用 apt-get autoremove,它成功了。当你使用 apt-get upgrade 升级时,在详细文本的末尾,你可以看到未升级文件的列表。一个接一个地查看它们(不要担心,有些升级会升级列表中的一半)。希望这能有所帮助,加油伙计。
PS:升级之前,请确保备份工作系统的映像,以防出现问题。