Hans Asked: 2010-08-21 19:37:01 +0800 CST2010-08-21 19:37:01 +0800 CST 2010-08-21 19:37:01 +0800 CST 如何删除旧内核版本以清理启动菜单? 772 每次我安装新的 Linux 内核时,它都会留在 grub_config 中,每次都使启动菜单变长。 我知道我可以手动搜索已安装的软件包并将其删除。 Ubuntu 是否提供任何更简单的方法来清理它们或阻止它们显示在引导列表中? grub2 kernel cleanup 30 个回答 Voted Best Answer fossfreedom 2012-02-03T16:06:07+08:002012-02-03T16:06:07+08:00 16.04 和更新版本的 Ubuntu sudo apt autoremove 此命令删除为解决依赖关系而自动安装但现在不再依赖的软件包。这包括旧版本的linux-headers-*和linux-image-*。(这个过程也很聪明,留下一个备用的内核版本作为后备!) 11.10 和更新版本的 Ubuntu GRUB2 及其所有内核的显示 安装在Ubuntu中的最新版本的Grub2会自动显示最新的内核并隐藏您可能已经安装的旧内核。 如果您没有看到您的grub - 请记住Shift在启动时按。 如您所见,仅显示最新的内核。 如果您选择显示的选项(按Enter),那么所有旧内核都将变为可见并可从中引导。 如何永久删除旧内核 首次使用最新的可用内核启动。 有多种方法可以删除旧内核。就我个人而言,我不会碰Computer Janitor,因为它的建议会破坏您的计算机。 突触 另一种选择是Synaptic ( sudo apt install synaptic) 搜索linux-image,右键单击内核并选择完全删除,最后单击应用按钮删除内核。 重复搜索,但这次是linux-header - 您可以删除之前选择的内核映像的相关标头。 虽然Synaptic不会尝试验证您要删除的内容...您可能会无意中删除最新的内核 - 甚至通过此工具删除所有内核,从而使您的Ubuntu无法启动! 请记住检查您使用的内核类型: uname -r 结果将类似于: 记住结果和数字 - 确保不要删除相应的图像或标题。 推荐 我的建议是保留至少两个或最好三个内核,包括最新的内核。建议的原因是,如果由于某种原因您无法使用最新内核启动或引入了退化的功能(例如无线损坏),您将至少有一个/两个其他内核可供启动。 penreturns 2012-06-20T10:37:04+08:002012-06-20T10:37:04+08:00 首先,重新启动您的系统以确保它使用的是最新的内核。然后打开终端并检查您当前的内核: uname -r 不要删除这个内核! 接下来,键入以下命令以查看/列出系统上所有已安装的内核。 dpkg --list 'linux-image-*' 查找所有低于当前内核的内核。当您知道要删除哪个内核时,请继续下面将其删除。运行以下命令以删除您选择的内核。 sudo apt-get purge linux-image-x.x.x-x-generic 最后,运行下面的命令来更新 grub2 sudo update-grub2 重新启动系统。 David Kemp 2013-02-14T02:44:16+08:002013-02-14T02:44:16+08:00 我的单线删除旧内核(这也释放了磁盘空间) dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p' | xargs sudo apt-get -y purge 解释(记住,|使用上一个命令的输出作为下一个命令的输入) dpkg --list列出所有已安装的软件包 grep linux-image查找已安装的 linux 映像 awk '{ print $2 }'只输出第二列(这是包名) sort -V按版本号排列项目 sed -n '/'`uname -r`'/q;p'打印当前内核之前的行 xargs sudo apt-get -y purge清除找到的内核 展开sed调用: -n说sed要安静 `uname -r`输出当前安装的内核版本 - 我们将它包含在反引号中,以便输出包含在命令的一部分中(您也可能将其视为$(uname -r) /something/q说当你匹配 'something' 时停止(在这种情况下,something 是 的输出uname -r) -/包围一个正则表达式 p是打印 the;是命令分隔符,所以/something/q;p当你匹配某些东西时说退出,否则打印 总而言之,sed -n '/'`uname -r`'/q;p'打印这些行,直到它与当前内核名称匹配。 如果您是偏执狂(像我一样),您可以制作最后一部分xargs echo sudo apt-get -y purge,以便打印清除旧内核的命令,然后您可以在运行之前检查是否包含任何意外内容。 删除标题的修改版本: dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge dpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge 注意:sed调用已修改。"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"仅提取版本(例如“3.2.0-44”),没有“-generic”或类似的uname -r 删除图像和标题的多合一版本(结合上述两个版本): echo $(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p') $(dpkg --list | grep linux-headers | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p') | xargs sudo apt-get -y purge bmaupin 2015-05-15T07:20:21+08:002015-05-15T07:20:21+08:00 Ubuntu 16.04+: $ sudo apt autoremove ... The following packages will be REMOVED: linux-headers-4.4.0-57 linux-headers-4.4.0-57-generic linux-image-4.4.0-57-generic linux-image-extra-4.4.0-57-generic linux-tools-4.4.0-57 linux-tools-4.4.0-57-generic Ubuntu 15.10 及以下版本: 我发现这是最简单和最快的方法。它保留了最新的内核以及另外两个: sudo apt-get install bikeshed sudo purge-old-kernels 要更改保留的其他内核的数量: sudo purge-old-kernels --keep 3 karthick87 2010-11-29T22:09:39+08:002010-11-29T22:09:39+08:00 从 Grub 2 中删除条目 应该通过编辑或删除 /etc/grub.d 文件夹中的文件来删除条目。/boot/grub/grub.cfg 文件是只读的,通常不需要编辑。 内核太多? 如果您不确定当前使用的内核,请在终端输入uname -r。 通过 APT(Synaptic、“apt-get remove”等)删除的内核将自动更新 grub.cfg,无需用户操作。 删除内核(和菜单项)的一个很好的工具是 Ubuntu-Tweak,一个安全且易于使用的 GUI 应用程序。 安装 ubuntu 调整 Ubuntu-Tweak 将在 Applications > System Tools 下可用。 删除较旧的内核条目 选择左侧的“Package Cleaner”和右侧面板的“Clean Kernel”。 按右下角的“解锁”按钮,输入您的密码。 从显示的列表中选择要删除的内核映像和标头。未列出正在使用的内核。 按右下角的“清理”按钮删除选定的内核映像和标头。 从 Grub 菜单中删除操作系统 一旦“update-grub”以 root 身份运行,其他已从计算机中删除的操作系统也将从菜单中删除。 菜单项由脚本放置在 Grub2 菜单上。如果您不想在菜单中输入其他操作系统,请禁用 /etc/grub.d/30_osprober 运行此命令以停止脚本运行 sudo chmod -x /etc/grub.d/30_os-prober /etc/default/grub 中的 DISABLE_30_OS-PROBER='true' 从 Grub 菜单中删除 Memtest86+ sudo chmod -x /etc/grub.d/20_memtest86+ 运行 update-grub 命令以允许将更改合并到 grub.cfg 资源 注意: 内核更新后,GRUB 菜单中会添加一个新条目。您可以根据需要删除旧条目。但是,大多数有经验的用户会建议您至少保留一个备用条目,以防升级出现问题而您需要启动较旧的内核版本以进行故障排除。 删除内核条目的替代方法(10.04 之前) 对于 GRUB 不是 GRUB2 启动经理 您可以在系统>>管理>>下找到它。 您在第二个屏幕截图中看到您可以选择显示多少个内核?我通常只是将它保持在 1,但是当我获得内核升级时,我总是在重新启动之前将其更改为 2,这样如果新内核对我的硬件有问题,我可以选择旧内核。一旦我知道新内核运行良好,我就把它改回 1。 Kees Cook 2010-09-18T08:35:05+08:002010-09-18T08:35:05+08:00 纯粹是命令行,这将删除除当前和第二大电流之外的所有内容(通过下面 head 命令中的“-2”): OLD=$(ls -tr /boot/vmlinuz-* | head -n -2 | cut -d- -f2- | awk '{print "linux-image-" $0 " linux-headers-" $0}' ) if [ -n "$OLD" ]; then apt-get -qy remove --purge $OLD fi apt-get -qy autoremove --purge jarno 2015-01-09T06:36:33+08:002015-01-09T06:36:33+08:00 更新:如今purge-old-kernels已弃用。 即使在棘手的条件下,我也制作了一个脚本来清除内核。它被称为linux-purge,你可以在这里找到它。 如果您只想清除比当前使用的内核更旧的内核(和相关软件包),当系统没有损坏时,您可以使用此脚本。 还有一个关于删除旧内核的 Ubuntu 文档页面。 Qwerty 2012-02-16T01:30:51+08:002012-02-16T01:30:51+08:00 您可以按照 Ubuntu Wiki 上自动安全更新文章的使用“无人值守升级”包部分来执行此操作。 您需要在/etc/apt/apt.conf.d/50unattended-upgrades文件中更改以下行; //Unattended-Upgrade::Remove-Unused-Dependencies "false"; 和 Unattended-Upgrade::Remove-Unused-Dependencies "true"; 自动删除旧包,包括内核。 同时删除或评论该行 "^linux-image.*"; 在文件/etc/apt/apt.conf.d/01autoremove 的“NeverAutoRemove”部分中。 Luis Alvarado 2013-04-08T17:13:29+08:002013-04-08T17:13:29+08:00 Ubuntu 已经附带的最快/更简单的方式(至少从 12.04 开始适用)是apt-get. 如果您希望删除所有未使用的旧内核版本(除了您不使用的前一个内核版本),请执行以下操作。这是为了确保如果当前内核版本以某种方式失败,您有办法回到之前的状态)。请执行下列操作: sudo apt-get autoclean 这将消除您可能拥有的任何旧文件(包括内核版本)。请注意,如果您有许多旧版本,则需要一段时间,因为它必须确保删除内核版本没有问题。对我来说,删除最后 12 个内核版本大约需要 2 分钟。您还可以执行以下操作: sudo apt-get clean 这将消除下载并存储在 apt 缓存文件夹中的所有内容。最后你有: sudo apt-get autoremove 这将检查任何未使用的软件包并在必要时将其删除。这对于那些不再需要安装任何应用程序的库和依赖包来说非常有用。 mikewhatever 2011-10-11T06:25:36+08:002011-10-11T06:25:36+08:00 要弄清楚安装了哪些内核和头文件,请使用 dpkg -l | grep linux-image dpkg -l | grep linux-headers 然后,您可以一个一个或一起删除它们,只需确保保留最新的。 还有一些方便的命令和脚本可以自动删除。 http://ubuntuforums.org/showthread.php?t=1658648 以下声称删除所有未使用的内核和标头: dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | grep -v hwe | xargs sudo apt-get purge (apt-get -y毫无疑问地用于删除) 以下是在 18.04.1 上运行时发生的情况: ~$ dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9] \+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | xargs sudo apt-get -y purge Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be REMOVED: linux-headers-4.15.0-33* linux-headers-4.15.0-33-generic* linux-headers-4.15.0-34* linux-headers-4.15.0-34-generic* linux-image-4.15.0-33-generic* linux-image-4.15.0-34-generic* linux-modules-4.15.0-33-generic* linux-modules-4.15.0-34-generic* linux-modules-extra-4.15.0-33-generic* linux-modules-extra-4.15.0-34-generic* 0 upgraded, 0 newly installed, 10 to remove and 1 not upgraded. After this operation, 671 MB disk space will be freed. (Reading database ... 227403 files and directories currently installed.) Removing linux-headers-4.15.0-33-generic (4.15.0-33.36) ... Removing linux-headers-4.15.0-33 (4.15.0-33.36) ... Removing linux-headers-4.15.0-34-generic (4.15.0-34.37) ... Removing linux-headers-4.15.0-34 (4.15.0-34.37) ... Removing linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ... Removing linux-image-4.15.0-33-generic (4.15.0-33.36) ... /etc/kernel/postrm.d/initramfs-tools: update-initramfs: Deleting /boot/initrd.img-4.15.0-33-generic /etc/kernel/postrm.d/zz-update-grub: Generating grub configuration file ... Found linux image: /boot/vmlinuz-4.15.0-36-generic Found initrd image: /boot/initrd.img-4.15.0-36-generic Found linux image: /boot/vmlinuz-4.15.0-34-generic Found initrd image: /boot/initrd.img-4.15.0-34-generic Adding boot menu entry for EFI firmware configuration done Removing linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ... Removing linux-image-4.15.0-34-generic (4.15.0-34.37) ... I: /vmlinuz.old is now a symlink to boot/vmlinuz-4.15.0-36-generic I: /initrd.img.old is now a symlink to boot/initrd.img-4.15.0-36-generic /etc/kernel/postrm.d/initramfs-tools: update-initramfs: Deleting /boot/initrd.img-4.15.0-34-generic /etc/kernel/postrm.d/zz-update-grub: Generating grub configuration file ... Found linux image: /boot/vmlinuz-4.15.0-36-generic Found initrd image: /boot/initrd.img-4.15.0-36-generic Adding boot menu entry for EFI firmware configuration done Removing linux-modules-4.15.0-33-generic (4.15.0-33.36) ... Removing linux-modules-4.15.0-34-generic (4.15.0-34.37) ... (Reading database ... 156180 files and directories currently installed.) Purging configuration files for linux-image-4.15.0-34-generic (4.15.0-34.37) ... Purging configuration files for linux-modules-4.15.0-33-generic (4.15.0-33.36) ... dpkg: warning: while removing linux-modules-4.15.0-33-generic, directory '/lib/modules/4.15.0-33-generic' not empty so not removed Purging configuration files for linux-modules-4.15.0-34-generic (4.15.0-34.37) ... Purging configuration files for linux-image-4.15.0-33-generic (4.15.0-33.36) ... Purging configuration files for linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ... Purging configuration files for linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ... ~$ uname -r 4.15.0-36-generic
16.04 和更新版本的 Ubuntu
此命令删除为解决依赖关系而自动安装但现在不再依赖的软件包。这包括旧版本的
linux-headers-*
和linux-image-*
。(这个过程也很聪明,留下一个备用的内核版本作为后备!)11.10 和更新版本的 Ubuntu
GRUB2 及其所有内核的显示
安装在Ubuntu中的最新版本的Grub2会自动显示最新的内核并隐藏您可能已经安装的旧内核。
如果您没有看到您的grub - 请记住Shift在启动时按。
如您所见,仅显示最新的内核。
如果您选择显示的选项(按Enter),那么所有旧内核都将变为可见并可从中引导。
如何永久删除旧内核
首次使用最新的可用内核启动。
有多种方法可以删除旧内核。就我个人而言,我不会碰Computer Janitor,因为它的建议会破坏您的计算机。
突触
另一种选择是Synaptic (
sudo apt install synaptic
)搜索linux-image,右键单击内核并选择完全删除,最后单击应用按钮删除内核。
重复搜索,但这次是linux-header - 您可以删除之前选择的内核映像的相关标头。
虽然Synaptic不会尝试验证您要删除的内容...您可能会无意中删除最新的内核 - 甚至通过此工具删除所有内核,从而使您的Ubuntu无法启动!
请记住检查您使用的内核类型:
结果将类似于:
记住结果和数字 - 确保不要删除相应的图像或标题。
推荐
我的建议是保留至少两个或最好三个内核,包括最新的内核。建议的原因是,如果由于某种原因您无法使用最新内核启动或引入了退化的功能(例如无线损坏),您将至少有一个/两个其他内核可供启动。
首先,重新启动您的系统以确保它使用的是最新的内核。然后打开终端并检查您当前的内核:
不要删除这个内核!
接下来,键入以下命令以查看/列出系统上所有已安装的内核。
查找所有低于当前内核的内核。当您知道要删除哪个内核时,请继续下面将其删除。运行以下命令以删除您选择的内核。
最后,运行下面的命令来更新 grub2
重新启动系统。
我的单线删除旧内核(这也释放了磁盘空间)
解释(记住,
|
使用上一个命令的输出作为下一个命令的输入)dpkg --list
列出所有已安装的软件包grep linux-image
查找已安装的 linux 映像awk '{ print $2 }'
只输出第二列(这是包名)sort -V
按版本号排列项目sed -n '/'`uname -r`'/q;p'
打印当前内核之前的行xargs sudo apt-get -y purge
清除找到的内核展开
sed
调用:-n
说sed
要安静`uname -r`
输出当前安装的内核版本 - 我们将它包含在反引号中,以便输出包含在命令的一部分中(您也可能将其视为$(uname -r)
/something/q
说当你匹配 'something' 时停止(在这种情况下,something 是 的输出uname -r
) -/
包围一个正则表达式p
是打印;
是命令分隔符,所以/something/q;p
当你匹配某些东西时说退出,否则打印总而言之,
sed -n '/'`uname -r`'/q;p'
打印这些行,直到它与当前内核名称匹配。如果您是偏执狂(像我一样),您可以制作最后一部分
xargs echo sudo apt-get -y purge
,以便打印清除旧内核的命令,然后您可以在运行之前检查是否包含任何意外内容。删除标题的修改版本:
注意:
sed
调用已修改。"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"
仅提取版本(例如“3.2.0-44”),没有“-generic”或类似的uname -r
删除图像和标题的多合一版本(结合上述两个版本):
Ubuntu 16.04+:
Ubuntu 15.10 及以下版本:
我发现这是最简单和最快的方法。它保留了最新的内核以及另外两个:
要更改保留的其他内核的数量:
从 Grub 2 中删除条目 应该通过编辑或删除 /etc/grub.d 文件夹中的文件来删除条目。/boot/grub/grub.cfg 文件是只读的,通常不需要编辑。
内核太多?
如果您不确定当前使用的内核,请在终端输入uname -r。
通过 APT(Synaptic、“apt-get remove”等)删除的内核将自动更新 grub.cfg,无需用户操作。
删除内核(和菜单项)的一个很好的工具是 Ubuntu-Tweak,一个安全且易于使用的 GUI 应用程序。
安装 ubuntu 调整
Ubuntu-Tweak 将在 Applications > System Tools 下可用。
删除较旧的内核条目
选择左侧的“Package Cleaner”和右侧面板的“Clean Kernel”。
按右下角的“解锁”按钮,输入您的密码。
从显示的列表中选择要删除的内核映像和标头。未列出正在使用的内核。
按右下角的“清理”按钮删除选定的内核映像和标头。
从 Grub 菜单中删除操作系统
一旦“update-grub”以 root 身份运行,其他已从计算机中删除的操作系统也将从菜单中删除。
菜单项由脚本放置在 Grub2 菜单上。如果您不想在菜单中输入其他操作系统,请禁用 /etc/grub.d/30_osprober
运行此命令以停止脚本运行
sudo chmod -x /etc/grub.d/30_os-prober
/etc/default/grub 中的 DISABLE_30_OS-PROBER='true'
从 Grub 菜单中删除 Memtest86+
sudo chmod -x /etc/grub.d/20_memtest86+
资源
注意: 内核更新后,GRUB 菜单中会添加一个新条目。您可以根据需要删除旧条目。但是,大多数有经验的用户会建议您至少保留一个备用条目,以防升级出现问题而您需要启动较旧的内核版本以进行故障排除。
删除内核条目的替代方法(10.04 之前)
对于 GRUB 不是 GRUB2
启动经理
您可以在系统>>管理>>下找到它。
您在第二个屏幕截图中看到您可以选择显示多少个内核?我通常只是将它保持在 1,但是当我获得内核升级时,我总是在重新启动之前将其更改为 2,这样如果新内核对我的硬件有问题,我可以选择旧内核。一旦我知道新内核运行良好,我就把它改回 1。
纯粹是命令行,这将删除除当前和第二大电流之外的所有内容(通过下面 head 命令中的“-2”):
更新:如今
purge-old-kernels
已弃用。即使在棘手的条件下,我也制作了一个脚本来清除内核。它被称为
linux-purge
,你可以在这里找到它。如果您只想清除比当前使用的内核更旧的内核(和相关软件包),当系统没有损坏时,您可以使用此脚本。
还有一个关于删除旧内核的 Ubuntu 文档页面。
您可以按照 Ubuntu Wiki 上自动安全更新文章的使用“无人值守升级”包部分来执行此操作。
您需要在/etc/apt/apt.conf.d/50unattended-upgrades文件中更改以下行;
和
自动删除旧包,包括内核。
同时删除或评论该行
在文件/etc/apt/apt.conf.d/01autoremove 的“NeverAutoRemove”部分中。
Ubuntu 已经附带的最快/更简单的方式(至少从 12.04 开始适用)是
apt-get
. 如果您希望删除所有未使用的旧内核版本(除了您不使用的前一个内核版本),请执行以下操作。这是为了确保如果当前内核版本以某种方式失败,您有办法回到之前的状态)。请执行下列操作:这将消除您可能拥有的任何旧文件(包括内核版本)。请注意,如果您有许多旧版本,则需要一段时间,因为它必须确保删除内核版本没有问题。对我来说,删除最后 12 个内核版本大约需要 2 分钟。您还可以执行以下操作:
这将消除下载并存储在 apt 缓存文件夹中的所有内容。最后你有:
这将检查任何未使用的软件包并在必要时将其删除。这对于那些不再需要安装任何应用程序的库和依赖包来说非常有用。
要弄清楚安装了哪些内核和头文件,请使用
然后,您可以一个一个或一起删除它们,只需确保保留最新的。
还有一些方便的命令和脚本可以自动删除。
http://ubuntuforums.org/showthread.php?t=1658648
以下声称删除所有未使用的内核和标头:
(
apt-get -y
毫无疑问地用于删除)以下是在 18.04.1 上运行时发生的情况: