如何删除旧的内核映像

如何删除旧的内核映像

目前正在运行 POP_OS 20.04 (LTS)。当我打开终端并运行命令时,

dpkg --list | grep linux-image

它返回明显安装的图像列表,包括我当前的(6.0.12)和最新的(5.17.5),大约来自版本集 5.0 的九个图像和来自版本集 5.3 的六个图像...加上一个来自 4.18 的图像和一个来自 5.4 的图像。 控制台显示过时的图像

以前,我曾使用 synaptic 从系统中删除较旧的内核,但由于某种原因,当我搜索 linux-image (并将已安装的映像排序到顶部)时,只有我当前的和最新的内核显示为已安装 ~ 框是绿色的。这些较旧的 5.0/5.3 图像不会显示在搜索结果中。 旧图像不会出现在突触中

Stacer 卸载程序也找不到它们。 Stacer 找不到旧图像

谁能告诉我为什么这些图像显示在控制台中但不显示突触?他们在系统上做什么?他们真的在系统上吗?如果它们确实占用了我的主分区上的空间我怎样才能安全地删除它们

我想到的一个考虑因素是该系统从 POP_OS 版本 18.10 开始,并且每个版本都升级到 20.04 (LTS) --虽然不确定这是否与此有关。另一个想法是,这可能与恢复分区有关,但我不知道如何或为什么需要这么多版本的内核,或者为什么它们会以如此不整齐的方式累积。

答案1

介绍:

像您和所有其他 Debian 及其衍生用户一样,我需要一种方法来修剪我的旧内核。然而,我在网上找到的是几乎完美-他们删除了除当前内核之外的所有内核- 但不幸的是他们也会删除最新的我想升级到的版本。

解决方案:

下面的一行字——可能有更优雅的写法- 将删除除这两个内核之外的所有内核当前的最新的内核。我吃自己的狗粮,可以说它已经过测试并且知道可以在我自己的 Ubuntu 22.04 主机库存上工作:

测试(不会应用更改):

dpkg --list | grep -v $(uname -r) | grep -E 'linux-image-[0-9]|linux-headers-[0-9]' | awk '{print $2" "$3}' | sort -k2,2 | head -n -2 | awk '{print $1}' | xargs sudo apt-get purge

应用更改-y对于apt-get purge上面的命令):

dpkg --list | grep -v $(uname -r) | grep -E 'linux-image-[0-9]|linux-headers-[0-9]' | awk '{print $2" "$3}' | sort -k2,2 | head -n -2 | awk '{print $1}' | xargs sudo apt-get -y purge

怎么运行的:

第1部分:列出所有内核和标头排除( grep -V) 当前一项:

dpkg --list | grep -v $(uname -r) | grep -E 'linux-image-[0-9]|linux-headers-[0-9]'

第2部分dpkg --list:仅打印输出中包含内核和标题的列

dpkg --list | grep -v $(uname -r) | grep -E 'linux-image-[0-9]|linux-headers-[0-9]' | awk '{print $2" "$3}'

第三部分:接下来我们按第二列按升序对列表进行排序:

dpkg --list | grep -v $(uname -r) | grep -E 'linux-image-[0-9]|linux-headers-[0-9]' | awk '{print $2" "$3}' | sort -k2,2

第 4 部分:打印列表排除最后 (2) 行是内核和标头最新的内核版本:

dpkg --list | grep -v $(uname -r) | grep -E 'linux-image-[0-9]|linux-headers-[0-9]' | awk '{print $2" "$3}' | sort -k2,2 | head -n -2

第五部分:在第二列排序后,我们只打印内核和头包名称:

dpkg --list | grep -v $(uname -r) | grep -E 'linux-image-[0-9]|linux-headers-[0-9]' | awk '{print $2" "$3}' | sort -k2,2 | head -n -2 | awk '{print $1}'

第 6 部分:最后,在我们构建了排除以下两者的列表之后当前最新的内核版本,我们将其提供给xargs它来咀嚼每一行apt-get -y purge

dpkg --list | grep -v $(uname -r) | grep -E 'linux-image-[0-9]|linux-headers-[0-9]' | awk '{print $2" "$3}' | sort -k2,2 | head -n -2 | awk '{print $1}' | xargs sudo apt-get -y purge

结论:

可能有更优雅和更紧凑的方式来编写上述内容,但它确实有用。不管怎样,希望这能拯救你——和别的- 某个时间-

答案2

rc每行开头的标记表示软件包已被删除,但已配置—IE除了配置文件之外,它们的所有内容都已被删除。默认情况下,处于此状态的软件包不会出现在 Synaptic 中。

您可以使用sudo dpkg --purge或删除它们sudo apt purge,列出您要删除的软件包。sudo apt autoremove --purge 应该自动清除它们,而无需列出它们。

相关内容