我用GRUB v2作为我的启动管理器。
每当我想要重新启动到另一个操作系统(或菜单项,如MemTest
),我使用命令:
# grub-reboot n
其中n
是编号(从 0 开始)所需的菜单项。
例如:
因此,在上面的示例中,如果我想重新启动,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
结果(与之前的图形示例不同,抱歉):
我的首选方法是将其添加为别名或函数。例如,作为 中的函数~/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
命令仅保留对应于的行真实的菜单条目:menuentry
和submenu
。 - 命令
nl
数数每行(当然是从 0 开始)。 - 有一个加法
grep
命令,不是严格需要的,它只是添加颜色结果;-) .
欢迎提供有关优化的建议。
已在 Ubuntu Desktop、Server、v12、v14、Kali 和 BackTrack 上运行的 GRUB v2.02~beta2-9ubuntu1 上进行测试。鼓励对另一个 Linux 中的行为提供反馈(我会将它们添加到这篇文章中)。