用 grub-set-default 和 grub-reboot 可直接修改 grub 默认启动项,无需编辑配置文件或运行 update-grub;先用 grep 查菜单索引、grub-editenv 查当前默认项,再按索引或名称设永久默认(grub-set-default)或仅下一次生效(grub-reboot)。

Linux双系统下,grub 默认启动项不是你想要的系统?别改配置文件猜来猜去——直接用 grub-set-default 和 grub-reboot 就能精准控制,而且改完立刻生效,不用手动更新 grub.cfg。
怎么查当前启动项和所有可选项
先确认 grub 识别到哪些启动项,以及当前默认是哪一个。运行:
sudo grep -i "menuentry" /boot/grub/grub.cfg | cat -n
输出每行前面带编号(从 0 开始),比如第 2 行是 menuentry 'Ubuntu',那它的索引就是 1;第 5 行是 menuentry 'Windows Boot Manager',索引就是 4。注意:这个编号是 grub 内部顺序,不是菜单里肉眼看到的第几个。
再查当前默认项:
sudo grub-editenv list
你会看到类似 saved_entry=0 或 saved_entry=Ubuntu 的输出。如果显示数字,就对应上面的索引;如果显示名称,说明启用了 GRUB_SAVEDEFAULT=true 且上次选过图形名。
永久修改默认启动项(下次及以后都生效)
用 grub-set-default 设置保存的默认项,它会写入 /boot/grub/grubenv,比手动改 /etc/default/grub 安全、快、不依赖 update-grub。
- 按索引设(推荐,稳定):
sudo grub-set-default 2(设为第 3 个菜单项) - 按名称设(需名称完全匹配):
sudo grub-set-default "Windows Boot Manager" - 想恢复成上次手动选择的系统:
sudo grub-set-default saved
设完立刻生效,重启即按新默认项启动。不需要 update-grub,除非你改了 /etc/default/grub 里的其他参数(比如超时时间)。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
只改下一次启动(临时切系统,不扰默认)
开会前要进 Windows,但不想动默认设置?用 grub-reboot:
sudo grub-reboot 4
这会让下一次开机自动进索引为 4 的项,之后自动恢复默认。它只写一次 grubenv 的 next_entry,比 grub-set-default 更轻量。
常见误操作:
- 执行
grub-reboot后没重启,而是进系统又关机——下次还是默认项(next_entry只触发一次) - 在图形界面里点“重启到 Windows”,底层其实调的就是
grub-reboot+reboot,所以它本身是可靠的 - 某些 OEM 机器(如戴尔、联想)启用了 Secure Boot + Fast Startup,可能让
grub-reboot失效,此时需先关掉 Windows 的快速启动
为什么改了 /etc/default/grub 还不生效
很多人把 GRUB_DEFAULT=2 写进 /etc/default/grub,却忘了这只是一个模板。真正起作用的是 /boot/grub/grubenv 里的值——而 grub-set-default 直接改它,update-grub 不会覆盖它。
只有两种情况需要 sudo update-grub:
- 你新增或删了内核,导致
grub.cfg里菜单顺序变了(这时索引失效,得重新查) - 你改了
GRUB_TIMEOUT、GRUB_CMDLINE_LINUX等影响生成逻辑的参数
grubenv 是二进制格式,不能直接编辑;强行用文本编辑器改会损坏它,导致 grub 启动时 fallback 到第一个菜单项——这是最常被忽略的故障点。










