क्या GRUB के "मेन्युएंट्रीज़" शीर्षक की सूची प्राप्त करने का एक तरीका है?
मुझे एक प्रारूप में परिणामों की आवश्यकता है जो grub-set-default
स्वीकार करेंगे। जैसे।
"Ubuntu"
"Memory test (memtest86+)"
etc.
क्या GRUB के "मेन्युएंट्रीज़" शीर्षक की सूची प्राप्त करने का एक तरीका है?
मुझे एक प्रारूप में परिणामों की आवश्यकता है जो grub-set-default
स्वीकार करेंगे। जैसे।
"Ubuntu"
"Memory test (memtest86+)"
etc.
जवाबों:
का उपयोग करते हुए awk
awk -F\' '/menuentry / {print $2}' /boot/grub/grub.cfg
आपको सभी मेनू प्रविष्टियों की पूरी सूची देता है grub.cfg
।
awk -F\' '/menuentry / {print $2}' /boot/grub/grub.cfg
awk
। : \
awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg
लिए उपयोग करने के लिएgrub-set-default
माउस स्क्रॉल उपयोग पहिया, Home, End, PgUp, PgDn, ↑और ↓कुंजी मेनू नेविगेट करने के लिए।
मेनू प्रदर्शित करने के whiptail
बजाय बैश स्क्रिप्ट का उपयोग करता है dialog
। एक फायदा यह है कि आप टर्मिनल इमेज को क्लिपबोर्ड पर टेक्स्ट के रूप में कॉपी कर सकते हैं
और इस वेबसाइट को टेक्स्ट के रूप में पेस्ट कर सकते हैं। अन्य लाभों में शामिल हैं:
dialog
उबंटू सर्वर या लुबंटू में डिफ़ॉल्ट रूप से स्थापित नहीं है। 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> │
│ │
└──────────────────────────────────────────────────────────────────────────┘
एक विकल्प को हाइलाइट करने के लिए नेविगेशन कुंजियों का उपयोग करें और 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
grub-menu.sh
बैश स्क्रिप्टgrub-menu.sh
केवल एक विकल्प ट्विक करने का है:
# Default for hide duplicate and triplicate options with (upstart) and (recovery mode)?
HideUpstartRecovery=false
मान को true
(अतिरिक्त प्रविष्टियों को छिपाने के लिए) सेट करें या false
(सभी प्रविष्टियों को सूचीबद्ध करें)।
स्क्रिप्ट का उपयोग करते समय डिफ़ॉल्ट प्रारूप को ओवरराइड किया जा सकता है:
grub-menu.sh short
या:
grub-menu.sh long
#!/bin/bash
# NAME: grub-menu.sh
# PATH: $HOME/bin
# DESC: Written for AU Q&A: /ubuntu//q/1019213/307523
# DATE: Apr 5, 2018. Modified: July 27, 2019
# UPDT: Scroll bar was outside of dialog box. Move windo border line.
# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
notify-send --urgency=critical "$0 cannot be run from GUI without TERM environment variable."
exit 1
fi
# Send output to secondary terminal such that previous history isn't cleared on exit
tput smcup
AllMenusArr=() # All menu options.
# Default for hide duplicate and triplicate options with (upstart) and (recovery mode)?
HideUpstartRecovery=false
if [[ $1 == short ]] ; then
HideUpstartRecovery=true # override default with first passed parameter "short"
elif [[ $1 == long ]] ; then
HideUpstartRecovery=false # override default with first passed parameter "long"
fi
SkippedMenuEntry=false # Don't change this value, automatically maintained
InSubMenu=false # Within a line beginning with `submenu`?
InMenuEntry=false # Within a line beginning with `menuentry` and ending in `{`?
NextMenuEntryNo=0 # Next grub internal menu entry number to assign
# Major / Minor internal grub submenu numbers, ie `1>0`, `1>1`, `1>2`, etc.
ThisSubMenuMajorNo=0
NextSubMenuMinorNo=0
CurrTag="" # Current grub internal menu number, zero based
CurrText="" # Current grub menu option text, ie "Ubuntu", "Windows...", etc.
SubMenuList="" # Only supports 10 submenus! Numbered 0 to 9. Future use.
while read -r line; do
# Example: " }"
BlackLine="${line//[[:blank:]]/}" # Remove all whitespace
if [[ $BlackLine == "}" ]] ; then
# Add menu option in buffer
if [[ $SkippedMenuEntry == true ]] ; then
NextSubMenuMinorNo=$(( $NextSubMenuMinorNo + 1 ))
SkippedMenuEntry=false
continue
fi
if [[ $InMenuEntry == true ]] ; then
InMenuEntry=false
if [[ $InSubMenu == true ]] ; then
NextSubMenuMinorNo=$(( $NextSubMenuMinorNo + 1 ))
else
NextMenuEntryNo=$(( $NextMenuEntryNo + 1 ))
fi
elif [[ $InSubMenu == true ]] ; then
InSubMenu=false
NextMenuEntryNo=$(( $NextMenuEntryNo + 1 ))
else
continue # Future error message?
fi
# Set maximum CurrText size to 68 characters.
CurrText="${CurrText:0:67}"
AllMenusArr+=($CurrTag "$CurrText")
fi
# Example: "menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu" ...
# "submenu 'Advanced options for Ubuntu' $menuentry_id_option" ...
if [[ $line == submenu* ]] ; then
# line starts with `submenu`
InSubMenu=true
ThisSubMenuMajorNo=$NextMenuEntryNo
NextSubMenuMinorNo=0
SubMenuList=$SubMenuList$ThisSubMenuMajorNo
CurrTag=$NextMenuEntryNo
CurrText="${line#*\'}"
CurrText="${CurrText%%\'*}"
AllMenusArr+=($CurrTag "$CurrText") # ie "1 Advanced options for Ubuntu"
elif [[ $line == menuentry* ]] && [[ $line == *"{"* ]] ; then
# line starts with `menuentry` and ends with `{`
if [[ $HideUpstartRecovery == true ]] ; then
if [[ $line == *"(upstart)"* ]] || [[ $line == *"(recovery mode)"* ]] ; then
SkippedMenuEntry=true
continue
fi
fi
InMenuEntry=true
if [[ $InSubMenu == true ]] ; then
: # In a submenu, increment minor instead of major which is "sticky" now.
CurrTag=$ThisSubMenuMajorNo">"$NextSubMenuMinorNo
else
CurrTag=$NextMenuEntryNo
fi
CurrText="${line#*\'}"
CurrText="${CurrText%%\'*}"
else
continue # Other stuff - Ignore it.
fi
done < /boot/grub/grub.cfg
LongVersion=$(grub-install --version)
ShortVersion=$(echo "${LongVersion:20}")
DefaultItem=0
if [[ $HideUpstartRecovery == true ]] ; then
MenuText="Menu No. ----------- Menu Name -----------"
else
MenuText="Menu No. --------------- Menu Name ---------------"
fi
while true ; do
Choice=$(whiptail --clear \
--title "Use arrow, page, home & end keys. Tab toggle option" \
--backtitle "Grub Version: $ShortVersion" \
--ok-button "Display Grub Boot" \
--cancel-button "Exit" \
--default-item "$DefaultItem" \
--menu "$MenuText" 24 80 16 \
"${AllMenusArr[@]}" \
2>&1 >/dev/tty)
clear
if [[ $Choice == "" ]]; then break ; fi
DefaultItem=$Choice
for (( i=0; i < ${#AllMenusArr[@]}; i=i+2 )) ; do
if [[ "${AllMenusArr[i]}" == $Choice ]] ; then
i=$i+1
MenuEntry="menuentry '"${AllMenusArr[i]}"'"
break
fi
done
TheGameIsAfoot=false
while read -r line ; do
if [[ $line = *"$MenuEntry"* ]]; then TheGameIsAfoot=true ; fi
if [[ $TheGameIsAfoot == true ]]; then
echo $line
if [[ $line = *"}"* ]]; then break ; fi
fi
done < /boot/grub/grub.cfg
read -p "Press <Enter> to continue"
done
# Restore output to primary terminal
tput rmcup
exit 0
वास्तव में यह मुझे एक साल से परेशान कर रहा है - इसलिए मैंने इसे करने के लिए एक त्वरित और गंदी स्क्रिप्ट की। आशा है कि यह दूसरों की मदद करता है?
यह एक धक्का / पॉप कतार में नामों को ढेर करता है, लेकिन मेनू अनुक्रमण नहीं है इसलिए यह बेहतर हो सकता है लेकिन मैं जहां तक गया हूं मुझे परेशान किया जा सकता है।
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
यहां आप मेरे बॉक्स से एक स्क्रीन को पकड़ते हुए दिखा सकते हैं
जैसा कि 2019/8 से एक टिप्पणी में कहा गया है, मैंने "टेम्प बूट" करने का उल्लेख किया है। यह विचार मूल रूप से मेरी स्क्रिप्ट को शुरू किया गया था, और अस्थायी बूट विधि एक और पोस्ट से आई थी और यह कुछ इस तरह से जाती है
# vi /etc/default/grub
# sudo update-grub
# sudo grub-set-default 0
# sudo grub-reboot 4
push
और pop
आदेश। इससे पहले कि मैं अपना जवाब लिखता, काश मैं उन्हें जानता होता।
test
1. GRUB_DEFAULT को GRUB_DEFAULT = सहेजे (/ etc / default / grub) पर सेट करें। 2. बूट / grudo अपडेट में grub कॉन्फिगर को अपडेट करें-ग्रब 3. डिफ़ॉल्ट OS को लोड करने के लिए सेट करें (यह हर बार जब आप रिबेट मशीन को लोड करेंगे) # sudo grub -सेट-डिफॉल्ट 0 4. जब दूसरे ओएस को लोड करने की जरूरत हो (नंबर / OS के मेन्यू नंबर है जैसा कि /boot/grub/grub.cfg में, यह अगले रिबूट के दौरान केवल एक बार अन्य ओएस को लोड करेगा - मैन्युअल रूप से शुरू करने के लिए रिबूट): सुडो ग्रब-रिबूट 4
यह सही "स्ट्रिंग" होना चाहिए ...
awk -F\' '/^menuentry / {print $2}' /boot/grub/grub.cfg|cat -n|awk '{print $1-1,$1="",$0}'
अंतिम पाइप प्रत्येक पंक्ति की शुरुआत में सफेद स्थान को हटाता है और ग्रुब नंबर प्रविष्टि के अनुसार संख्या अनुक्रम को सही करता है। नमूना उत्पादन:
0 Ubuntu
1 Memory test (memtest86+)
2 Memory test (memtest86+, serial console 115200)
3 Windows 10 (su /dev/sdc1)
यदि आप सभी प्रविष्टियों को देखना चाहते हैं, तो उन्नत भी, आप उपयोग कर सकते हैं
awk -F\' '/(^|| )nuentry / {print $2}' /boot/grub/grub.cfg|cat -n|awk '{print $1-1,$1="",$0}'
लेकिन संख्या अनुक्रम ग्रब-सेट-डिफॉल्ट के साथ उपयोग के लिए उपयुक्त नहीं है।
मैं बस पता चला है कि आप बस स्वत: पूर्ण (दबाने उपयोग कर सकते हैं tab
की तरह आदेश पर दो बार) grub-reboot
या grub-set-default
और यह आपको उपलब्ध बूट मेनू प्रविष्टियों की एक सूची दे देंगे। तब आप केवल उस शीर्षक की प्रतिलिपि बना सकते हैं जिसे आप सचमुच चाहते हैं, आपको किसी संख्या का उपयोग करने की आवश्यकता नहीं है।
दुर्भाग्य से, किसी कारण से मेरी विंडोज 7 स्थापना उस तरह से दिखाई नहीं देती है।
OpenSuSE में grub2- एक बार मेनू आईडी प्रदान करता है जिसे आप फिर अन्य कमांड में उपयोग कर सकते हैं। हालांकि उबंटू उपयोगकर्ताओं के लिए ज्यादा मदद नहीं।
# grub2-once --list
0 openSUSE Leap 42.3
1 Advanced options for openSUSE Leap 42.3>openSUSE Leap 42.3, with Linux 4.4.172-86-default
2 Advanced options for openSUSE Leap 42.3>openSUSE Leap 42.3, with Linux 4.4.172-86-default (recovery mode)
3 Advanced options for openSUSE Leap 42.3>openSUSE Leap 42.3, with Linux 4.4.165-81-default
4 Advanced options for openSUSE Leap 42.3>openSUSE Leap 42.3, with Linux 4.4.165-81-default (recovery mode)
5 Advanced options for openSUSE Leap 42.3>openSUSE Leap 42.3, with Linux 4.4.159-73-default
6 Advanced options for openSUSE Leap 42.3>openSUSE Leap 42.3, with Linux 4.4.159-73-default (recovery mode)
7 openSUSE 42.1 (x86_64) (on /dev/sda8)
8 Advanced options for openSUSE 42.1 (x86_64) (on /dev/sda8)>openSUSE Leap 42.1 (on /dev/sda8)
9 Advanced options for openSUSE 42.1 (x86_64) (on /dev/sda8)>openSUSE Leap 42.1, with Linux 4.1.39-56-default (on /dev/sda8)
10 Advanced options for openSUSE 42.1 (x86_64) (on /dev/sda8)>openSUSE Leap 42.1, with Linux 4.1.39-53-default (on /dev/sda8)
11 Advanced options for openSUSE 42.1 (x86_64) (on /dev/sda8)>Install 42.3 (on /dev/sda8)