GRUB v2:管理数字条目以便与 grub-reboot 一起使用的实用方法

GRUB v2:管理数字条目以便与 grub-reboot 一起使用的实用方法

我用GRUB v2作为我的启动管理器。
每当我想要重新启动到另一个操作系统(或菜单项,如MemTest),我使用命令:

# grub-reboot n

其中n是编号(从 0 开始)所需的菜单项
例如:

GRUB2 菜单示例

因此,在上面的示例中,如果我想重新启动,Squeeze Linux我将输入:

# grub-reboot 4

但是,当拥有多台计算机和/或多台操作系统时,很难记住该条目的编号,我最后需要重新启动到菜单来检查该编号。

我知道条目被存储/boot/grub/grub.cfg名为“submenu”的行上menuentry,但是,只要 GRUB 变得更加复杂(当然也是高级),为了计算条目数,该文件读取起来就会有点困难。

有没有实用的方法知道所有条目的数量GRUB v2 启动菜单?

答案1

我用这个命令行,这只是对 的解析/boot/grub/grub.cfg,以便显示编号条目,每行一个:

sed ':again;$!N;$!b again; :b; s/{[^{}]*}//g; t b' /boot/grub/grub.cfg | cut -c -60 | grep -e "^menuentry" -e "submenu" | nl -v 0 | grep -e "menuentry" -e "submenu" --color

结果(与之前的图形示例不同,抱歉):

GRUB-ListMenu 结果示例

我的首选方法是将其添加为别名或函数。例如,作为 中的函数~/bashrc

# List entries numbers for grub-reboot:
function GRUB-ListMenu() {
        sed ':again;$!N;$!b again; :b; s/{[^{}]*}//g; t b' /boot/grub/grub.cfg | cut -c -60 | grep -e "^menuentry" -e "submenu" | nl -v 0 | grep -e "menuentry" -e "submenu" --color
}

解释:

  • 命令sed删除大括号之间的所有行({}),因为它们对应于下拉子菜单
  • cut命令只保留前 60 个字符,以便得出结果更具可读性对于用户来说。
  • grep命令仅保留对应于的行真实的菜单条目menuentrysubmenu
  • 命令nl数数每行(当然是从 0 开始)。
  • 有一个加法grep命令,不是严格需要的,它只是添加颜色结果;-) .

欢迎提供有关优化的建议。
已在 Ubuntu Desktop、Server、v12、v14、Kali 和 BackTrack 上运行的 GRUB v2.02~beta2-9ubuntu1 上进行测试。鼓励对另一个 Linux 中的行为提供反馈(我会将它们添加到这篇文章中)。

相关内容