每次我安装新的 Linux 内核时,它都会留在 grub_config 中,导致每次启动菜单都变得更长。
我知道我可以手动搜索已安装的软件包并将其删除。
Ubuntu 是否提供了更简单的方法来清理它们或防止它们显示在启动列表中?
答案1
Ubuntu 16.04 及更新版本
sudo apt autoremove
此命令会删除那些为了解决依赖关系而自动安装但现在不再依赖的软件包。这包括linux-headers-*
和的旧版本linux-image-*
。(这个过程也很智能,会留下一个内核的备用版本作为后备!)
Ubuntu 11.10 及更新版本
GRUB2 及其所有内核的显示
最新版本Grub2安装在Ubuntu自动显示最新内核并隐藏您可能已安装的旧内核。
如果你没有看到你的蛴螬Shift- 然后记得在启动时按下。
如您所见,只显示最新的内核。
如果您选择显示的选项(按Enter),那么所有旧内核都将变得可见并可供启动。
如何永久删除旧内核
首次使用最新的可用内核启动。
删除旧内核的方法有很多种。我个人不会尝试电脑管理员因为众所周知,其建议会破坏您的计算机。
突触
另一种方法是突触(sudo apt install synaptic
)
搜索Linux 映像,右键单击内核并选择完全删除,最后单击申请按钮删除内核。
重复搜索,但这次linux 头文件- 您可以删除先前选择的内核映像的相关标题。
突触虽然不会尝试验证您要删除的内容...您可能会无意中删除最新的内核 - 甚至通过此工具删除所有内核,导致无法启动Ubuntu!。
请记住检查您正在使用的内核类型:
uname -r
结果类似于:
记住结果和数字 - 确保不要删除相应的图像或标题。
推荐
我的建议是保留至少两个或最好是三个内核,包括最新内核。之所以建议保留,是因为如果出于某种原因,最新内核无法启动或引入了倒退的功能(例如无线中断),那么您将至少有一两个其他内核可供启动。
答案2
首先,重新启动系统以确保它使用的是最新内核。然后打开终端并检查当前内核:
uname -r
请不要删除这个内核!
接下来,输入以下命令来查看/列出系统上所有已安装的内核。
dpkg --list 'linux-image-*'
找到所有低于当前内核的内核。当您知道要删除哪个内核时,请继续下面的操作以将其删除。运行以下命令以删除您选择的内核。
sudo apt-get purge linux-image-x.x.x-x-generic
最后,运行以下命令来更新 grub2
sudo update-grub2
重新启动系统。
答案3
我的一行代码删除了旧内核(这也可以释放磁盘空间)
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
说当你匹配“某物”时停止(在这种情况下,某物是的输出uname -r
) -/
围绕一个正则表达式p
是打印- 是
;
命令分隔符,所以/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
答案4
从 Grub 2 中删除条目 应通过编辑或删除 /etc/grub.d 文件夹中的文件来删除条目。/boot/grub/grub.cfg 文件是只读的,通常不需要编辑。
内核太多了?
如果你不确定当前使用的内核,请在终端类型中uname -r。
通过 APT(Synaptic、“apt-get remove”等)删除的内核将自动更新 grub.cfg,无需用户操作。
Ubuntu-Tweak 是一个用于删除内核(和菜单项)的绝佳工具,它是一款安全且易于使用的 GUI 应用程序。
安装 ubuntu tweak
Ubuntu-Tweak 将在应用程序 > 系统工具下可用。
删除旧的内核条目
在左侧选择“Package Cleaner”,在右侧面板中选择“Clean Kernel”。
按下右下角的“解锁”按钮,输入您的密码。
从显示的列表中选择要删除的内核映像和头文件。正在使用的内核未列出。
按下右下角的“清理”按钮来删除选定的内核映像和头文件。
从 Grub 菜单中删除操作系统
一旦以 root 身份运行“update-grub”,已从计算机中删除的其他操作系统也将从菜单中删除。
菜单项由脚本放置在 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。