真正稳妥、而且能长期生效的做法,是直接修改 /etc/default/grub 里的 GRUB_TIMEOUT,然后执行 grub2-mkconfig -o /boot/grub2/grub.cfg(Legacy)或 /boot/efi/EFI/centos/grub.cfg(UEFI);否则,前面的修改实际上不会生效。

直接改 /etc/default/grub 里的 GRUB_TIMEOUT,再运行 grub2-mkconfig 生效 —— 这是唯一可靠、持久的方式。
修改 /etc/default/grub 中的 GRUB_TIMEOUT
这是唯一推荐的修改入口。CentOS 7 使用 GRUB2,所有用户级配置都应通过这个文件管理,而不是直接动生成的 cfg 文件。
GRUB_TIMEOUT=5是默认值,单位为秒;改成GRUB_TIMEOUT=30就是 30 秒等待- 设为
0表示不显示菜单、直接启动默认项(注意:此时按住Shift或Esc可临时唤出菜单) - 若想隐藏菜单但保留手动唤出能力,可加一行:
GRUB_TIMEOUT_STYLE="hidden" - 修改前务必备份:
cp /etc/default/grub /etc/default/grub.bak
必须运行 grub2-mkconfig 才能生效
改完 /etc/default/grub 后,grub.cfg 不会自动更新 —— 它只是模板生成的结果,不重生成就等于没改。
- Legacy BIOS 系统执行:
grub2-mkconfig -o /boot/grub2/grub.cfg - UEFI 系统通常要指定 EFI 路径:
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg(路径可能因厂商或安装方式不同为redhat或fedora) - 执行后建议检查输出里有没有
done或Generating grub configuration file字样,避免静默失败 - 别跳过这步去直接改
/boot/grub2/grub.cfg—— 下次内核升级或yum update会把它覆盖掉
验证是否生效 & 常见失效原因
重启后没看到新 timeout?大概率是以下某个环节出了问题。
- 没执行
grub2-mkconfig,或者命令里写错了输出路径(比如漏了-o参数) - UEFI 系统改了
/boot/grub2/grub.cfg却没动/boot/efi/EFI/centos/grub.cfg,而实际加载的是后者 GRUB_TIMEOUT_STYLE设为hidden时,timeout 仍会倒计时,但菜单不可见 —— 这不是 bug,是设计行为- 某些 OEM 预装系统(如戴尔、HP)可能在
/etc/grub.d/下有自定义脚本覆盖GRUB_TIMEOUT,需检查/etc/grub.d/00_header或类似文件
很多人最容易忽视的,其实是这一点:GRUB2 的 timeout 行为,本质上取决于终端有没有正常的输出能力。要是 GRUB_TERMINAL_OUTPUT="console" 已经设上了,但实际硬件并不支持 console 输出——比如某些虚拟机里串口配置本身就有异常——那 timeout 就可能出现卡住,或者被直接跳过的情况。碰到这种现象,不能只盯着一处看,还得把 GRUB_TERMINAL="console" 一起核对,这才更容易定位问题。