必须先用 uname -r 确认当前运行内核(如 6.8.0-45-generic)并保留,再通过 dpkg --list 或 dnf/yum list 区分已安装旧内核,推荐 sudo apt autoremove --purge(ubuntu/debian)或 dnf remove $(dnf repoquery --installonly --latest-limit=-2 -q)(rhel/fedora)安全清理,最后执行 update-grub 或 grub2-mkconfig 更新引导配置。

Linux 系统长期运行后,会累积多个旧版本内核和未被使用的内核模块,既占用磁盘空间,也可能干扰更新或启动菜单。清理的关键是:只删不用的、保留当前运行的、避免误删关键模块。
确认当前正在使用的内核版本
执行命令查看当前运行的内核,这是绝对不能删除的:
uname -r
输出类似 6.8.0-45-generic,记下这个版本号。后续所有删除操作都必须避开它。
列出所有已安装的内核版本
不同发行版命令略有差异,按常用系统区分:
- Ubuntu/Debian 系统:dpkg --list | grep linux-image- | grep ^ii
- CentOS/RHEL/Rocky 8+:dnf list installed kernel
- CentOS/RHEL 7:yum list installed kernel
注意识别哪些是已安装但未在用的旧内核(版本号明显低于 uname -r 的结果),尤其留意带 -generic、-lowlatency 或 -signed 后缀的变体,它们属于独立包,需分别处理。
安全删除旧内核(以 Ubuntu/Debian 为例)
推荐使用 apt autoremove 自动清理,它默认保留当前内核 + 最近一个旧内核:
sudo apt autoremove --purge
如需手动精确控制(比如只留最新两个):
- 先查出要删的包名,例如:dpkg --list | grep 'linux-image-5.15.0-.*-generic' | awk '{print $2}'
- 再逐个卸载:sudo apt purge linux-image-5.15.0-76-generic linux-headers-5.15.0-76
- 最后更新引导菜单:sudo update-grub
⚠️ 不建议直接用 rm -rf /boot/vmlinuz-* 或手动删文件,可能破坏 grub 配置或导致无法启动。
清理无用内核模块(ko 文件)
内核模块通常随内核包自动安装/卸载,但有时残留模块会留在 /lib/modules/ 下对应旧内核目录中。确认无用模块的方法:
- 检查哪些内核目录不再有对应安装包:ls /lib/modules/,对比 dpkg --list | grep linux-image 输出
- 若某目录(如 5.4.0-100-generic)在 dpkg 列表中找不到对应包,则可安全删除:sudo rm -rf /lib/modules/5.4.0-100-generic
- 执行 sudo depmod -a 更新模块依赖映射(针对当前内核)
注意:不要删除当前 uname -r 对应的整个 /lib/modules/$(uname -r) 目录,也不要手动删单个 .ko 文件——除非明确知道该模块从未被加载且无依赖。











