mad*_*eon 39 command-line grub2
有没有办法检索 GRUB 的“menuentries”标题列表?
我需要一个grub-set-default可以接受的格式的结果。例如。
"Ubuntu"
"Memory test (memtest86+)"
etc.
Run Code Online (Sandbox Code Playgroud)
A.B*_*.B. 50
使用 awk
awk -F\' '/menuentry / {print $2}' /boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)
为您提供了所有菜单项的完整列表grub.cfg。
Win*_*nix 14
使用鼠标滚轮,Home,End,PgUp,PgDn,?和?键导航菜单。
bash 脚本使用whiptail而不是dialog显示菜单。一个优点是您可以将终端图像作为文本复制到剪贴板,然后将其作为
文本粘贴到本网站中。其他优势包括:
dialog默认情况下,Ubuntu Server 或 Lubuntu 中未安装。whiptail默认包括在内。这是一个文本屏幕截图:
Grub Version: 2.02~beta2-36ubuntu3.15
??????????? Use arrow, page, home & end keys. Tab toggle option ????????????
? Menu No. --------------- Menu Name --------------- ?
? ?
? 0 Ubuntu ? ?
? 1 Advanced options for Ubuntu ? ?
? 1>0 Ubuntu, with Linux 4.14.31-041431-generic ? ?
? 1>1 Ubuntu, with Linux 4.14.31-041431-generic (upstart) ? ?
? 1>2 Ubuntu, with Linux 4.14.31-041431-generic (recovery mode) ? ?
? 1>3 Ubuntu, with Linux 4.14.30-041430-generic ? ?
? 1>4 Ubuntu, with Linux 4.14.30-041430-generic (upstart) ? ?
? 1>5 Ubuntu, with Linux 4.14.30-041430-generic (recovery mode) ? ?
? 1>6 Ubuntu, with Linux 4.14.27-041427-generic ? ?
? 1>7 Ubuntu, with Linux 4.14.27-041427-generic (upstart) ? ?
? 1>8 Ubuntu, with Linux 4.14.27-041427-generic (recovery mode) ? ?
? 1>9 Ubuntu, with Linux 4.14.24-041424-generic ? ?
? 1>10 Ubuntu, with Linux 4.14.24-041424-generic (upstart) ? ?
? 1>11 Ubuntu, with Linux 4.14.24-041424-generic (recovery mode) ? ?
? 1>12 Ubuntu, with Linux 4.14.23-041423-generic ? ?
? 1>13 Ubuntu, with Linux 4.14.23-041423-generic (upstart) ? ?
? ?
? ?
? <Display Grub Boot> <Exit> ?
? ?
????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
使用导航键突出显示一个选项,然后按下Enter以查看grub引导grub内核时加载的预内核驱动程序和传递给内核的引导参数:
menuentry 'Ubuntu, with Linux 4.14.27-041427-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.27-041427-generic-advanced-f3f8e7bc-b337-4194-88b8-3a513f6be55b' {
recordfail
savedefault
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root f3f8e7bc-b337-4194-88b8-3a513f6be55b
else
search --no-floppy --fs-uuid --set=root f3f8e7bc-b337-4194-88b8-3a513f6be55b
fi
echo 'Loading Linux 4.14.27-041427-generic ...'
linux /boot/vmlinuz-4.14.27-041427-generic root=UUID=f3f8e7bc-b337-4194-88b8-3a513f6be55b ro quiet splash loglevel=0 vga=current udev.log-priority=3 fastboot kaslr acpiphp.disable=1 crashkernel=384M-2G:128M,2G-:256M $vt_handoff
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-4.14.27-041427-generic
}
Press <Enter> to continue
Run Code Online (Sandbox Code Playgroud)
grub-menu.sh bash 脚本grub-menu.sh 只有一个选项可以调整:
Grub Version: 2.02~beta2-36ubuntu3.15
??????????? Use arrow, page, home & end keys. Tab toggle option ????????????
? Menu No. --------------- Menu Name --------------- ?
? ?
? 0 Ubuntu ? ?
? 1 Advanced options for Ubuntu ? ?
? 1>0 Ubuntu, with Linux 4.14.31-041431-generic ? ?
? 1>1 Ubuntu, with Linux 4.14.31-041431-generic (upstart) ? ?
? 1>2 Ubuntu, with Linux 4.14.31-041431-generic (recovery mode) ? ?
? 1>3 Ubuntu, with Linux 4.14.30-041430-generic ? ?
? 1>4 Ubuntu, with Linux 4.14.30-041430-generic (upstart) ? ?
? 1>5 Ubuntu, with Linux 4.14.30-041430-generic (recovery mode) ? ?
? 1>6 Ubuntu, with Linux 4.14.27-041427-generic ? ?
? 1>7 Ubuntu, with Linux 4.14.27-041427-generic (upstart) ? ?
? 1>8 Ubuntu, with Linux 4.14.27-041427-generic (recovery mode) ? ?
? 1>9 Ubuntu, with Linux 4.14.24-041424-generic ? ?
? 1>10 Ubuntu, with Linux 4.14.24-041424-generic (upstart) ? ?
? 1>11 Ubuntu, with Linux 4.14.24-041424-generic (recovery mode) ? ?
? 1>12 Ubuntu, with Linux 4.14.23-041423-generic ? ?
? 1>13 Ubuntu, with Linux 4.14.23-041423-generic (upstart) ? ?
? ?
? ?
? <Display Grub Boot> <Exit> ?
? ?
????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
将该值设置为true(隐藏额外条目)或false(列出所有条目)。
使用以下方法调用脚本时可以覆盖默认格式:
menuentry 'Ubuntu, with Linux 4.14.27-041427-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.14.27-041427-generic-advanced-f3f8e7bc-b337-4194-88b8-3a513f6be55b' {
recordfail
savedefault
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root f3f8e7bc-b337-4194-88b8-3a513f6be55b
else
search --no-floppy --fs-uuid --set=root f3f8e7bc-b337-4194-88b8-3a513f6be55b
fi
echo 'Loading Linux 4.14.27-041427-generic ...'
linux /boot/vmlinuz-4.14.27-041427-generic root=UUID=f3f8e7bc-b337-4194-88b8-3a513f6be55b ro quiet splash loglevel=0 vga=current udev.log-priority=3 fastboot kaslr acpiphp.disable=1 crashkernel=384M-2G:128M,2G-:256M $vt_handoff
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-4.14.27-041427-generic
}
Press <Enter> to continue
Run Code Online (Sandbox Code Playgroud)
或者:
# Default for hide duplicate and triplicate options with (upstart) and (recovery mode)?
HideUpstartRecovery=false
Run Code Online (Sandbox Code Playgroud)
grub-menu.sh short
Run Code Online (Sandbox Code Playgroud)
Luc*_*tts 11
正是这让我烦恼了一年多 - 所以我做了一个快速而肮脏的脚本来做到这一点。希望这对其他人有帮助?
这将名称堆叠在推送/弹出队列中,但不是菜单索引,因此它可能会更好,但我已经尽可能地打扰了。
gawk 'BEGIN {
l=0
menuindex= 0
stack[t=0] = 0
}
function push(x) { stack[t++] = x }
function pop() { if (t > 0) { return stack[--t] } else { return "" } }
{
if( $0 ~ /.*menu.*{.*/ )
{
push( $0 )
l++;
} else if( $0 ~ /.*{.*/ )
{
push( $0 )
} else if( $0 ~ /.*}.*/ )
{
X = pop()
if( X ~ /.*menu.*{.*/ )
{
l--;
match( X, /^[^'\'']*'\''([^'\'']*)'\''.*$/, arr )
if( l == 0 )
{
print menuindex ": " arr[1]
menuindex++
submenu=0
} else
{
print " " (menuindex-1) ">" submenu " " arr[1]
submenu++
}
}
}
}' /boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)
正如我在 2019/8 年的评论中所要求的那样,我在上面提到了“临时启动”。这个想法最初是我的脚本开始的,临时启动方法来自另一篇文章,它是这样的
# vi /etc/default/grub# sudo update-grub# sudo grub-set-default 0# sudo grub-reboot 4参考:https : //ubuntuforums.org/showthread.php? t =1310463
我刚刚发现你可以tab在像grub-rebootorgrub-set-default这样的命令上使用自动完成(按两次),它会给你一个可用启动菜单条目的列表。然后你可以直接复制你想要的标题,你不需要使用数字。
不幸的是,由于某种原因,我的 Windows 7 安装没有以这种方式显示。
小智 6
这应该是正确的“字符串”...
awk -F\' '/^menuentry / {print $2}' /boot/grub/grub.cfg|cat -n|awk '{print $1-1,$1="",$0}'
Run Code Online (Sandbox Code Playgroud)
最后一个管道删除每行开头的空格,并根据 grub 编号条目更正编号顺序。示例输出:
0 Ubuntu
1 Memory test (memtest86+)
2 Memory test (memtest86+, serial console 115200)
3 Windows 10 (su /dev/sdc1)
Run Code Online (Sandbox Code Playgroud)
如果您想查看所有条目,以及高级条目,您可以使用
awk -F\' '/(^|| )nuentry / {print $2}' /boot/grub/grub.cfg|cat -n|awk '{print $1-1,$1="",$0}'
Run Code Online (Sandbox Code Playgroud)
但数字序列不适合与 grub-set-default 一起使用。
另一个处理子菜单的 awk one-liner:
awk -F\' '$1=="menuentry " || $1=="submenu " {print i++ " : " $2}; /\tmenuentry / {print "\t" i-1">"j++ " : " $2};' /boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)
这可能是错误的想法,因为 \t 用于标识子菜单条目。