Linux 有问必答：如何删除 Ubuntu 上不再使用的旧内核
提问：过去我已经在我的Ubuntu上升级了几次内核。现在我想要删除这些旧的内核镜像来节省我的磁盘空间。如何用最简单的方法删除Ubuntu上先前版本的内核？  在Ubuntu上，有几个方法来升级内核。在Ubuntu桌面中，软件更新允许你每天检查并更新到最新的内核上。在Ubuntu服务器上，最为重要的安全更新项目之一就是 unattended-upgrades 软件包会自动更新内核。然而，你也可以手动用apt-get或者aptitude命令来更新。 随着时间的流逝，持续的内核更新会在系统中积聚大量的不再使用的内核，浪费你的磁盘空间。每个内核镜像和其相关联的模块/头文件
Ubuntu 内核
118.122.120.235
这是我自己总结的清理 Linux 内核包的代码<br />
但是有些问题，不能识别内核的子版本，需要手动修改一下。比如没有识别内核版本中的 6-201<br />
系统是 dnf 需要自行替换 yum<br />
如下命令使用长参数格式<br />
<br />
# 列出较早版本的 Linux 內核包, For Fedora<br />
rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match $(uname --kernel-release | cut --delimiter='-' --fields=1)<br />
# 刪除之前列出的较早前的 Linux 內核包<br />
sudo yum --assumeno remove &quot;$(rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match $(uname --
来自四川成都的 Chrome 45.0|GNU/Linux 用户
2015-09-18T10:21:54.000
118.122.120.235
sudo yum --assumeno remove &quot;$(rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match $(uname --kernel-release | cut --delimiter='-' --fields=1))&quot;
来自四川成都的 Chrome 45.0|GNU/Linux 用户
2015-09-18T10:22:55.000
118.122.120.235
这是刚刚修改后的命令，因为不长清理内核，所以一直没有怎么改。<br />
这次是直接用 uname 返回的内核版本，没有做任何截取。<br />
不过考虑到发行版的差异，所以还有如下的一个版本<br />
此外没有用 autoremove，是因为之前发现如果用 autoremove 会带出其他包<br />
这个问题可能与 dnf 版本有关。<br />
用 --assumeno 是防止意外删除，仅展示命令要执行什么。
来自四川成都的 Chrome 45.0|GNU/Linux 用户
2015-09-18T10:44:33.000
118.122.120.235
# 版本1<br />
rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match $(uname --kernel-release)<br />
sudo dnf --assumeno remove $(rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match $(uname --kernel-release))
来自四川成都的 Chrome 45.0|GNU/Linux 用户
2015-09-18T10:44:54.000
118.122.120.235
# 版本 2<br />
os_ver=$(uname --kernel-release | awk --assign FS='.' '{print $(NF-1)&quot;.&quot;$(NF)}')<br />
knlver=$(uname --kernel-release | sed $'s#.'&quot;$os_ver&quot;'##')<br />
# rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match &quot;$knlver&quot;<br />
sudo dnf --assumeno remove $(rpm --query --all | grep --ignore-case '^kernel-' | grep --invert-match &quot;$knlver&quot;)
来自四川成都的 Chrome 45.0|GNU/Linux 用户
2015-09-18T10:45:10.000
111.201.13.121
兄台，注册个用户吧，这样回帖长度会长很多。
linux [Chrome 45.0|Mac 10.10]
2015-09-18T10:52:00.000
211.140.6.123
所以还是fedora好，dnf update自动删除旧内核
羽舟Disigner [Chrome 45.0|Fedora]
2015-09-18T11:02:52.000
118.122.120.235
dnf 确实可以自动删除，不过默认条件下是在删除最早的一个。暂不清楚能不能改成在一定时间后删除所有老的内核。
来自四川成都的 Chrome 45.0|GNU/Linux 用户
2015-09-18T11:05:02.000
113.140.84.108
如果新内核导致系统崩溃，会需要使用久内核来启动系统。虽然这些版本不太可能会发生这么严重的错误，但是可能还是存在的。起码得留一个能够稳定的久内核
来自陕西西安的 Chrome 45.0|GNU/Linux 用户
2015-09-18T13:05:29.000
116.255.132.12
兄台，注册个账号吧！欢迎入驻！&nbsp; &nbsp;:&gt;
来自河南郑州的 Chrome 45.0|Windows 7 用户
2015-09-20T11:05:02.000
116.255.132.12
汗！自己都忘了登陆了！
netb2c [Chrome 45.0|GNU/Linux]
2015-09-20T11:11:50.000
111.201.13.121
原来是你~~
linux [Chrome 45.0|Mac 10.10]
2015-09-20T18:37:05.000
171.11.18.93
是我 :&gt;
netb2c [Chrome 45.0|GNU/Linux]
2015-09-20T21:45:04.000
提问：过去我已经在我的Ubuntu上升级了几次内核。现在我想要删除这些旧的内核镜像来节省我的磁盘空间。如何用最简单的方法删除Ubuntu上先前版本的内核？  在Ubuntu上，有几个方法来升级内核。在Ubuntu桌面中，软件更新允许你每天检查并更新到最新的内核上。在Ubuntu服务器上，最为重要的安全更新项目之一就是 unattended-upgrades 软件包会自动更新内核。然而，你也可以手动用apt-get或者aptitude命令来更新。 随着时间的流逝，持续的内核更新会在系统中积聚大量的不再使用的内核，浪费你的磁盘空间。每个内核镜像和其相关联的模块/头文件

> 
> **提问**：过去我已经在我的Ubuntu上升级了几次内核。现在我想要删除这些旧的内核镜像来节省我的磁盘空间。如何用最简单的方法删除Ubuntu上先前版本的内核？
> 
> 
> 


在Ubuntu上，有几个方法来升级内核。在Ubuntu桌面中，软件更新允许你每天检查并更新到最新的内核上。在Ubuntu服务器上，最为重要的安全更新项目之一就是 unattended-upgrades 软件包会自动更新内核。然而，你也可以手动用apt-get或者aptitude命令来更新。


随着时间的流逝，持续的内核更新会在系统中积聚大量的不再使用的内核，浪费你的磁盘空间。每个内核镜像和其相关联的模块/头文件会占用200-400MB的磁盘空间，因此由不再使用的内核而浪费的磁盘空间会快速地增加。


![](/data/attachment/album/201509/18/091447jtx4rf8o2f5y4o96.jpg)


GRUB管理器为每个旧内核都维护了一个GRUB入口，以备你想要使用它们。


![](/data/attachment/album/201509/18/091455qvnp7gyjf14lwojw.jpg)


作为磁盘清理的一部分，如果你不再使用这些，你可以考虑清理掉这些镜像。


### 如何清理旧内核镜像


在删除旧内核之前，记住最好留有2个最近的内核（最新的和上一个版本），以防主要的版本出错。现在就让我们看看如何在Ubuntu上清理旧内核。


在Ubuntu内核镜像包含了以下的包。


* **linux-image-**: 内核镜像
* **linux-image-extra-**: 额外的内核模块
* **linux-headers-**: 内核头文件


首先检查系统中安装的内核镜像。



```
$ dpkg --list | grep linux-image
$ dpkg --list | grep linux-headers

```

在列出的内核镜像中，你可以移除一个特定的版本（比如3.19.0-15）。



```
$ sudo apt-get purge linux-image-3.19.0-15
$ sudo apt-get purge linux-headers-3.19.0-15

```

上面的命令会删除内核镜像和它相关联的内核模块和头文件。


注意如果你还没有升级内核那么删除旧内核会自动触发安装新内核。这样在删除旧内核之后，GRUB配置会自动升级来移除GRUB菜单中相关GRUB入口。


如果你有很多没用的内核，你可以用shell表达式来一次性地删除多个内核。注意这个括号表达式只在bash或者兼容的shell中才有效。



```
$ sudo apt-get purge linux-image-3.19.0-{18,20,21,25}
$ sudo apt-get purge linux-headers-3.19.0-{18,20,21,25}

```

![](/data/attachment/album/201509/18/091544qutw3pzp1ww9whtt.jpg)


上面的命令会删除4个内核镜像：3.19.0-18、3.19.0-20、3.19.0-21 和 3.19.0-25。


如果GRUB配置由于任何原因在删除旧内核后没有正确升级，你可以尝试手动用update-grub2命令来更新配置。



```
$ sudo update-grub2

```

现在就重启来验证GRUB菜单是否已经正确清理了。


![](/data/attachment/album/201509/18/091544jbjwrewfbhlbdhaf.jpg)




---


via: <http://ask.xmodulo.com/remove-kernel-images-ubuntu.html>


作者：[Dan Nanni](http://ask.xmodulo.com/author/nanni) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

