Отображать меню grub и опции без перезагрузки?

Я хотел бы отобразить меню grub из командной строки. Также выберите параметр меню загрузки grub и нажмите «Ввод», чтобы узнать, какие загружаемые драйверы перед загрузкой ядра и параметры загрузки загружаются при загрузке ядра.

Причины этого сделать из командной строки:

Перезагрузка для просмотра меню grub требует времени. Нехорошо делать снимок меню grub и размещать изображение на веб-сайтах. Легче захватить снимок экрана, когда Ubuntu запущен и работает. В edit параметр меню grub с e и сделать снимок часто затруднен, потому что экран трудно читать. С помощью этой функции вы можете копировать и вставлять. Может быть проще использовать эту функцию, чтобы показать все версии ядра, а не apt list --installed | grep linux-image или ls /boot/vml*. Для быстрого просмотра номера меню grub полезно для команд grub-reboot и grub-set-default.

Как я могу нарисовать меню grub из командной строки, посмотреть внутренние номера меню grub и отобразить параметры загрузки для данной опции?

13
задан 6 April 2018 в 06:30

2 ответа

Обновлено 7 мая 2018 года

Разработка скрипта: сценарий Bash для клонирования Ubuntu для нового раздела для тестирования обновления 18.04 LTS. Я обнаружил, что вы получаете некоторые смехотворные варианты меню, которые заставляют меню злодействовать:

4>8 Ubuntu, with Linux 4.14.30-041430-generic (recovery mode) (on /dev/nvme0n1p8)

Это было исправлено сегодня, обрезая строки длиной более 68 символов.

Обновлено 5 апреля 2018 года

Это обновление представляет grub-menu.sh намного лучшую версию предыдущий ответ (по-прежнему доступен ниже). Новые функции меню grub:

Отображает номера записей меню grub 2. т.е. 0, 1, 1>0, 1>1 ... 2, 3 Можно установить короткую версию по умолчанию без параметров подменю (upstart) и (recover mode). Параметр 1 может быть передан как short или long для переопределения значения по умолчанию. столбцы, динамически отформатированные на основе настроек short или long.

Цветной снимок экрана (короткая версия)

Сценарий Bash для клонирования Ubuntu для нового раздела для тестирования 18.04 LTS upgrade

Текстовый экран

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> │ │ │ └──────────────────────────────────────────────────────────────────────────┘

grub-menu.sh bash script

В предыдущих версиях grub-display.sh и grub-display-lite.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: https://askubuntu.com/q/1019213/307523 # DATE: Apr 5, 2018. Modified: May 7, 2018. # $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 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 \ --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 76 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 exit 0

Предыдущие версии (не рекомендуется) [ ! d24]

Ниже приведен оригинальный ответ, в котором номера номеров меню следуют за формами grub 1.

grub-display.sh отображает параметры и параметры меню grub

Не полагаясь на сторонние приложения вы можете использовать скрипт bash для отображения меню grub и параметров загрузки для любой данной опции. Параметры загрузки больше, чем только значения cat /proc/cmdline.

grub-display.sh bash script

Вот полный список программ, которые вы можете скопировать и вставить:

#!/bin/bash # NAME: grub-display.sh # PATH: $HOME/bin # DESC: Written for AU Q&A: https://askubuntu.com/q/1019213/307523 # DATE: Mar 24, 2018. Modified: Mar 26, 2018. # $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 # Must have the dialog package. On Servers, not installed by default command -v dialog >/dev/null 2>&1 || { echo >&2 "dialog package required but it is not installed. Aborting."; exit 99; } # Version without upstart and recovery options displayed #awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \ # | grep -v upstart | grep -v recovery > ~/.grub-display-menu # Version with upstart and recovery options displayed awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \ > ~/.grub-display-menu MenuArr=() while read -r line; do MenuNmbr=${line%% *} MenuName=${line#* } MenuArr+=($MenuNmbr "$MenuName") done < ~/.grub-display-menu rm ~/.grub-display-menu LongVersion=$(grub-install --version) ShortVersion=$(echo "${LongVersion:20}") DefaultItem=0 while true ; do Choice=$(dialog \ --title "Use arrow, page, home & end keys. Tab toggle option" \ --backtitle "Grub Version: $ShortVersion" \ --ok-label "Display Grub Boot" \ --cancel-label "Exit" \ --default-item "$DefaultItem" \ --menu "Menu Number ----------- Menu Name ----------" 24 76 16 \ "${MenuArr[@]}" \ >/dev/tty) clear if [[ $Choice == "" ]]; then break ; fi DefaultItem=$Choice for (( i=0; i < ${#MenuArr[@]}; i=i+2 )) ; do if [[ "${MenuArr[i]}" == $Choice ]] ; then i=$i+1 MenuEntry="menuentry '"${MenuArr[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 exit 0

Примечание для пользователей Ubuntu Server

Этот сценарий bash был разработан для Ubuntu Desktop. Для Ubuntu Server и других дистрибутивов Linux, у которых нет установленного пакета dialog, ниже приведен скрипт под названием grub-display-lite.sh. Эта версия использует whiptail вместо dialog.

Уменьшение размера меню на 66%

Чтобы сократить отображаемый список параметров меню grub, вы можете удалить (upstart) и (recovery). Для этого раскомментируйте следующие строки:

# Version without upstart and recovery options displayed awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \ | grep -v upstart | grep -v recovery > ~/.grub-display-menu

Затем примените комментарии к этим строкам:

# Version with upstart and recovery options displayed #awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \ # > ~/.grub-display-menu

Скриншоты

Вот как это выглядит при вызове из командной строки. К сожалению, я не смог скопировать и вставить меню и должен был использовать Print Screen:

Отключить поддержку мыши для копирования и amp; paste

Grub Version: 2.02~beta2-36ubuntu3.15 ────────────────────────────────────────────────────────────────────────────────────────── ┌──────────Use arrow, page, home & end keys. Tab toggle option─────────────┐ │ Menu Number ----------- Menu Name ---------- │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │ │ 0 Ubuntu │ │ │ │ 1 Ubuntu, with Linux 4.14.30-041430-generic │ │ │ │ 2 Ubuntu, with Linux 4.14.30-041430-generic (upstart) │ │ │ │ 3 Ubuntu, with Linux 4.14.30-041430-generic (recovery mode) │ │ │ │ 4 Ubuntu, with Linux 4.14.27-041427-generic │ │ │ │ 5 Ubuntu, with Linux 4.14.27-041427-generic (upstart) │ │ │ │ 6 Ubuntu, with Linux 4.14.27-041427-generic (recovery mode) │ │ │ │ 7 Ubuntu, with Linux 4.14.24-041424-generic │ │ │ │ 8 Ubuntu, with Linux 4.14.24-041424-generic (upstart) │ │ │ │ 9 Ubuntu, with Linux 4.14.24-041424-generic (recovery mode) │ │ │ │ 10 Ubuntu, with Linux 4.14.23-041423-generic │ │ │ │ 11 Ubuntu, with Linux 4.14.23-041423-generic (upstart) │ │ │ │ 12 Ubuntu, with Linux 4.14.23-041423-generic (recovery mode) │ │ │ │ 13 Ubuntu, with Linux 4.14.21-041421-generic │ │ │ │ 14 Ubuntu, with Linux 4.14.21-041421-generic (upstart) │ │ │ │ 15 Ubuntu, with Linux 4.14.21-041421-generic (recovery mode) │ │ │ └────↓(+)──────────────────────────────────────────────────────16%─────┘ │ │ │ ├──────────────────────────────────────────────────────────────────────────┤ │ <Display Grub Boot> < Exit > │ └──────────────────────────────────────────────────────────────────────────┘

Когда включена поддержка мыши по умолчанию, вы не можете скопировать экран в буфер обмена, но для графического снимка экрана необходимо использовать экран Print []. Для поддержки копирования & amp; вам нужно отключить поддержку мыши, выполнив поиск этих строк:

--default-item "$DefaultItem" \ --no-mouse \ --menu "Menu Number ----------- Menu Name ----------" 24 76 16 \

Аргумент --no-mouse был вставлен ниже --default-item. Это означает, что вы свободнее поддерживаете мышь, но получаете лучшее разрешение и копируете в буфер обмена, выделяя текст и нажимая Ctrl + C.

Отображать параметры загрузки grub

Используйте клавиши навигации, чтобы выделить опцию и нажмите Ctrl , чтобы увидеть параметры загрузки для него:

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 # 94

menuentry 'Windows Boot Manager (on /dev/nvme0n1p2)' --class windows --class os $menuentry_id_option 'osprober-efi-D656-F2A8' { savedefault insmod part_gpt insmod fat if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root D656-F2A8 else search --no-floppy --fs-uuid --set=root D656-F2A8 fi chainloader /EFI/Microsoft/Boot/bootmgfw.efi } Press <Enter> to continue

Запись меню Grub # 96

menuentry 'System setup' $menuentry_id_option 'uefi-firmware' { fwsetup } Press <Enter> to continue

grub-display-lite.sh для Ubuntu Server

У Ubuntu Server и Lubuntu нет пакета dialog, установленного по умолчанию, как у Ubuntu Desktop. Для этих пользователей была написана другая версия на основе пакета whiptail, который по умолчанию включен в большинстве дистрибутивов Linux.

Недостаток whiptail - это меньше функций, но они не используются в этом дело. Другим недостатком, по-видимому, является меньшее количество цветов, но это может облегчить чтение некоторых людей. Есть преимущества whiptail по сравнению с dialog, такие как копирование в буфер обмена, поддержка колесика мыши и, возможно, более быстрая обработка.

grub-display-lite.sh bash script

#!/bin/bash # NAME: grub-display-lite.sh # PATH: $HOME/bin # DESC: Written for AU Q&A: https://askubuntu.com/q/1019213/307523 # DATE: Mar 26, 2018. # NOTE: "lite" version written for Ubuntu Server and Lubuntu which do # not have `dialog` installed by default. `whiptail` is used # instead. Nice consequences are better resolution, mouse scroll # wheel and copy to clipboard support. # $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 # Version without upstart and recovery options displayed awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \ | grep -v upstart | grep -v recovery > ~/.grub-display-menu # Version with upstart and recovery options displayed #awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \ # > ~/.grub-display-menu MenuArr=() while read -r line; do MenuNmbr=${line%% *} MenuName=${line#* } MenuArr+=($MenuNmbr "$MenuName") done < ~/.grub-display-menu rm ~/.grub-display-menu LongVersion=$(grub-install --version) ShortVersion=$(echo "${LongVersion:20}") DefaultItem=0 while true ; do Choice=$(whiptail \ --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 "Menu Number ----------- Menu Name ----------" 24 76 16 \ "${MenuArr[@]}" \ >/dev/tty) clear if [[ $Choice == "" ]]; then break ; fi DefaultItem=$Choice for (( i=0; i < ${#MenuArr[@]}; i=i+2 )) ; do if [[ "${MenuArr[i]}" == $Choice ]] ; then i=$i+1 MenuEntry="menuentry '"${MenuArr[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 exit 0

f57] bash в основном совпадает с grub-display.sh, за исключением сообщения об ошибке, если dialog не установлен. Кроме того, некоторые whiptail аргументы имеют разные имена.

grub-display-lite.sh screenshots

Цветной экран кажется более легким для чтения, чем grub-display, который использует пакет dialog:

Вот текстовое изображение, которое не нуждается в модификациях для копирования в буфер обмена:

Grub Version: 2.02~beta2-36ubuntu3.15 ┌─────────┤ Use arrow, page, home & end keys. Tab toggle option ├──────────┐ │ Menu Number ----------- Menu Name ---------- │ │ │ │ 55 Ubuntu, with Linux 4.13.9-041309-generic ↑ │ │ 58 Ubuntu, with Linux 4.10.0-42-generic ▒ │ │ 61 Ubuntu, with Linux 4.10.0-40-generic ▒ │ │ 64 Ubuntu, with Linux 4.10.0-38-generic ▒ │ │ 67 Ubuntu, with Linux 4.10.0-37-generic ▒ │ │ 70 Ubuntu, with Linux 4.10.0-28-generic ▒ │ │ 73 Ubuntu, with Linux 4.9.77-040977-generic ▒ │ │ 76 Ubuntu, with Linux 4.9.76-040976-generic ▒ │ │ 79 Ubuntu, with Linux 4.4.0-104-generic ▒ │ │ 82 Ubuntu, with Linux 4.4.0-103-generic ▒ │ │ 85 Ubuntu, with Linux 4.4.0-101-generic ▒ │ │ 88 Ubuntu, with Linux 4.4.0-98-generic ▒ │ │ 91 Ubuntu, with Linux 3.16.53-031653-generic ▒ │ │ 94 Windows Boot Manager (on /dev/nvme0n1p2) ▮ │ │ 95 Windows Boot Manager (on /dev/sda1) ▒ │ │ 96 System setup ↓ │ │ │ │ │ │ <Display Grub Boot> <Exit> │ │ │ └──────────────────────────────────────────────────────────────────────────┘

Как уже упоминалось выше, вы можете уменьшить размер меню grub отображается на 66% при удалении опций меню (upstart) и (recovery). Таков тот случай, но, как следствие, линии детализации становятся более узкими, а заголовки не выстраиваются идеально. Вы можете настроить заголовки столбцов, изменив эту строку:

--menu "Menu Number ----------- Menu Name ----------" 24 76 16 \

на что-то вроде этого:

--menu " Menu Number ----------- Menu Name ----------" 24 76 16 \
10
ответ дан 17 July 2018 в 18:06

Обновлено 7 мая 2018 года

Разработка скрипта: сценарий Bash для клонирования Ubuntu для нового раздела для тестирования обновления 18.04 LTS. Я обнаружил, что вы получаете некоторые смехотворные варианты меню, которые заставляют меню злодействовать:

4>8 Ubuntu, with Linux 4.14.30-041430-generic (recovery mode) (on /dev/nvme0n1p8)

Это было исправлено сегодня, обрезая строки длиной более 68 символов.

Обновлено 5 апреля 2018 года

Это обновление представляет grub-menu.sh намного лучшую версию предыдущий ответ (по-прежнему доступен ниже). Новые функции меню grub:

Отображает номера записей меню grub 2. т.е. 0, 1, 1>0, 1>1 ... 2, 3 Можно установить короткую версию по умолчанию без параметров подменю (upstart) и (recover mode). Параметр 1 может быть передан как short или long для переопределения значения по умолчанию. столбцы, динамически отформатированные на основе настроек short или long.

Цветной снимок экрана (короткая версия)

Сценарий Bash для клонирования Ubuntu для нового раздела для тестирования 18.04 LTS upgrade

Текстовый экран

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> │ │ │ └──────────────────────────────────────────────────────────────────────────┘

grub-menu.sh bash script

В предыдущих версиях grub-display.sh и grub-display-lite.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: https://askubuntu.com/q/1019213/307523 # DATE: Apr 5, 2018. Modified: May 7, 2018. # $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 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 \ --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 76 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 exit 0

Предыдущие версии (не рекомендуется) [ ! d24]

Ниже приведен оригинальный ответ, в котором номера номеров меню следуют за формами grub 1.

grub-display.sh отображает параметры и параметры меню grub

Не полагаясь на сторонние приложения вы можете использовать скрипт bash для отображения меню grub и параметров загрузки для любой данной опции. Параметры загрузки больше, чем только значения cat /proc/cmdline.

grub-display.sh bash script

Вот полный список программ, которые вы можете скопировать и вставить:

#!/bin/bash # NAME: grub-display.sh # PATH: $HOME/bin # DESC: Written for AU Q&A: https://askubuntu.com/q/1019213/307523 # DATE: Mar 24, 2018. Modified: Mar 26, 2018. # $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 # Must have the dialog package. On Servers, not installed by default command -v dialog >/dev/null 2>&1 || { echo >&2 "dialog package required but it is not installed. Aborting."; exit 99; } # Version without upstart and recovery options displayed #awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \ # | grep -v upstart | grep -v recovery > ~/.grub-display-menu # Version with upstart and recovery options displayed awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \ > ~/.grub-display-menu MenuArr=() while read -r line; do MenuNmbr=${line%% *} MenuName=${line#* } MenuArr+=($MenuNmbr "$MenuName") done < ~/.grub-display-menu rm ~/.grub-display-menu LongVersion=$(grub-install --version) ShortVersion=$(echo "${LongVersion:20}") DefaultItem=0 while true ; do Choice=$(dialog \ --title "Use arrow, page, home & end keys. Tab toggle option" \ --backtitle "Grub Version: $ShortVersion" \ --ok-label "Display Grub Boot" \ --cancel-label "Exit" \ --default-item "$DefaultItem" \ --menu "Menu Number ----------- Menu Name ----------" 24 76 16 \ "${MenuArr[@]}" \ >/dev/tty) clear if [[ $Choice == "" ]]; then break ; fi DefaultItem=$Choice for (( i=0; i < ${#MenuArr[@]}; i=i+2 )) ; do if [[ "${MenuArr[i]}" == $Choice ]] ; then i=$i+1 MenuEntry="menuentry '"${MenuArr[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 exit 0

Примечание для пользователей Ubuntu Server

Этот сценарий bash был разработан для Ubuntu Desktop. Для Ubuntu Server и других дистрибутивов Linux, у которых нет установленного пакета dialog, ниже приведен скрипт под названием grub-display-lite.sh. Эта версия использует whiptail вместо dialog.

Уменьшение размера меню на 66%

Чтобы сократить отображаемый список параметров меню grub, вы можете удалить (upstart) и (recovery). Для этого раскомментируйте следующие строки:

# Version without upstart and recovery options displayed awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \ | grep -v upstart | grep -v recovery > ~/.grub-display-menu

Затем примените комментарии к этим строкам:

# Version with upstart and recovery options displayed #awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \ # > ~/.grub-display-menu

Скриншоты

Вот как это выглядит при вызове из командной строки. К сожалению, я не смог скопировать и вставить меню и должен был использовать Print Screen:

Отключить поддержку мыши для копирования и amp; paste

Grub Version: 2.02~beta2-36ubuntu3.15 ────────────────────────────────────────────────────────────────────────────────────────── ┌──────────Use arrow, page, home & end keys. Tab toggle option─────────────┐ │ Menu Number ----------- Menu Name ---------- │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │ │ 0 Ubuntu │ │ │ │ 1 Ubuntu, with Linux 4.14.30-041430-generic │ │ │ │ 2 Ubuntu, with Linux 4.14.30-041430-generic (upstart) │ │ │ │ 3 Ubuntu, with Linux 4.14.30-041430-generic (recovery mode) │ │ │ │ 4 Ubuntu, with Linux 4.14.27-041427-generic │ │ │ │ 5 Ubuntu, with Linux 4.14.27-041427-generic (upstart) │ │ │ │ 6 Ubuntu, with Linux 4.14.27-041427-generic (recovery mode) │ │ │ │ 7 Ubuntu, with Linux 4.14.24-041424-generic │ │ │ │ 8 Ubuntu, with Linux 4.14.24-041424-generic (upstart) │ │ │ │ 9 Ubuntu, with Linux 4.14.24-041424-generic (recovery mode) │ │ │ │ 10 Ubuntu, with Linux 4.14.23-041423-generic │ │ │ │ 11 Ubuntu, with Linux 4.14.23-041423-generic (upstart) │ │ │ │ 12 Ubuntu, with Linux 4.14.23-041423-generic (recovery mode) │ │ │ │ 13 Ubuntu, with Linux 4.14.21-041421-generic │ │ │ │ 14 Ubuntu, with Linux 4.14.21-041421-generic (upstart) │ │ │ │ 15 Ubuntu, with Linux 4.14.21-041421-generic (recovery mode) │ │ │ └────↓(+)──────────────────────────────────────────────────────16%─────┘ │ │ │ ├──────────────────────────────────────────────────────────────────────────┤ │ <Display Grub Boot> < Exit > │ └──────────────────────────────────────────────────────────────────────────┘

Когда включена поддержка мыши по умолчанию, вы не можете скопировать экран в буфер обмена, но для графического снимка экрана необходимо использовать экран Print []. Для поддержки копирования & amp; вам нужно отключить поддержку мыши, выполнив поиск этих строк:

--default-item "$DefaultItem" \ --no-mouse \ --menu "Menu Number ----------- Menu Name ----------" 24 76 16 \

Аргумент --no-mouse был вставлен ниже --default-item. Это означает, что вы свободнее поддерживаете мышь, но получаете лучшее разрешение и копируете в буфер обмена, выделяя текст и нажимая Ctrl + C.

Отображать параметры загрузки grub

Используйте клавиши навигации, чтобы выделить опцию и нажмите Ctrl , чтобы увидеть параметры загрузки для него:

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 # 94

menuentry 'Windows Boot Manager (on /dev/nvme0n1p2)' --class windows --class os $menuentry_id_option 'osprober-efi-D656-F2A8' { savedefault insmod part_gpt insmod fat if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root D656-F2A8 else search --no-floppy --fs-uuid --set=root D656-F2A8 fi chainloader /EFI/Microsoft/Boot/bootmgfw.efi } Press <Enter> to continue

Запись меню Grub # 96

menuentry 'System setup' $menuentry_id_option 'uefi-firmware' { fwsetup } Press <Enter> to continue

grub-display-lite.sh для Ubuntu Server

У Ubuntu Server и Lubuntu нет пакета dialog, установленного по умолчанию, как у Ubuntu Desktop. Для этих пользователей была написана другая версия на основе пакета whiptail, который по умолчанию включен в большинстве дистрибутивов Linux.

Недостаток whiptail - это меньше функций, но они не используются в этом дело. Другим недостатком, по-видимому, является меньшее количество цветов, но это может облегчить чтение некоторых людей. Есть преимущества whiptail по сравнению с dialog, такие как копирование в буфер обмена, поддержка колесика мыши и, возможно, более быстрая обработка.

grub-display-lite.sh bash script

#!/bin/bash # NAME: grub-display-lite.sh # PATH: $HOME/bin # DESC: Written for AU Q&A: https://askubuntu.com/q/1019213/307523 # DATE: Mar 26, 2018. # NOTE: "lite" version written for Ubuntu Server and Lubuntu which do # not have `dialog` installed by default. `whiptail` is used # instead. Nice consequences are better resolution, mouse scroll # wheel and copy to clipboard support. # $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 # Version without upstart and recovery options displayed awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \ | grep -v upstart | grep -v recovery > ~/.grub-display-menu # Version with upstart and recovery options displayed #awk -F\' '/menuentry / { print i++, $2}' /boot/grub/grub.cfg \ # > ~/.grub-display-menu MenuArr=() while read -r line; do MenuNmbr=${line%% *} MenuName=${line#* } MenuArr+=($MenuNmbr "$MenuName") done < ~/.grub-display-menu rm ~/.grub-display-menu LongVersion=$(grub-install --version) ShortVersion=$(echo "${LongVersion:20}") DefaultItem=0 while true ; do Choice=$(whiptail \ --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 "Menu Number ----------- Menu Name ----------" 24 76 16 \ "${MenuArr[@]}" \ >/dev/tty) clear if [[ $Choice == "" ]]; then break ; fi DefaultItem=$Choice for (( i=0; i < ${#MenuArr[@]}; i=i+2 )) ; do if [[ "${MenuArr[i]}" == $Choice ]] ; then i=$i+1 MenuEntry="menuentry '"${MenuArr[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 exit 0

f57] bash в основном совпадает с grub-display.sh, за исключением сообщения об ошибке, если dialog не установлен. Кроме того, некоторые whiptail аргументы имеют разные имена.

grub-display-lite.sh screenshots

Цветной экран кажется более легким для чтения, чем grub-display, который использует пакет dialog:

Вот текстовое изображение, которое не нуждается в модификациях для копирования в буфер обмена:

Grub Version: 2.02~beta2-36ubuntu3.15 ┌─────────┤ Use arrow, page, home & end keys. Tab toggle option ├──────────┐ │ Menu Number ----------- Menu Name ---------- │ │ │ │ 55 Ubuntu, with Linux 4.13.9-041309-generic ↑ │ │ 58 Ubuntu, with Linux 4.10.0-42-generic ▒ │ │ 61 Ubuntu, with Linux 4.10.0-40-generic ▒ │ │ 64 Ubuntu, with Linux 4.10.0-38-generic ▒ │ │ 67 Ubuntu, with Linux 4.10.0-37-generic ▒ │ │ 70 Ubuntu, with Linux 4.10.0-28-generic ▒ │ │ 73 Ubuntu, with Linux 4.9.77-040977-generic ▒ │ │ 76 Ubuntu, with Linux 4.9.76-040976-generic ▒ │ │ 79 Ubuntu, with Linux 4.4.0-104-generic ▒ │ │ 82 Ubuntu, with Linux 4.4.0-103-generic ▒ │ │ 85 Ubuntu, with Linux 4.4.0-101-generic ▒ │ │ 88 Ubuntu, with Linux 4.4.0-98-generic ▒ │ │ 91 Ubuntu, with Linux 3.16.53-031653-generic ▒ │ │ 94 Windows Boot Manager (on /dev/nvme0n1p2) ▮ │ │ 95 Windows Boot Manager (on /dev/sda1) ▒ │ │ 96 System setup ↓ │ │ │ │ │ │ <Display Grub Boot> <Exit> │ │ │ └──────────────────────────────────────────────────────────────────────────┘

Как уже упоминалось выше, вы можете уменьшить размер меню grub отображается на 66% при удалении опций меню (upstart) и (recovery). Таков тот случай, но, как следствие, линии детализации становятся более узкими, а заголовки не выстраиваются идеально. Вы можете настроить заголовки столбцов, изменив эту строку:

--menu "Menu Number ----------- Menu Name ----------" 24 76 16 \

на что-то вроде этого:

--menu " Menu Number ----------- Menu Name ----------" 24 76 16 \
10
ответ дан 23 July 2018 в 18:56
  • 1
    Чтобы увидеть текущую информацию, просто используйте cat /proc/cmdline. Чтобы просмотреть параметры, grub будет использовать следующий раз, когда вы обновите меню grub, используйте grep GRUB_CMDLINE_LINUX /etc/default/grub. Этот второй набор настроек будет использоваться apt или всякий раз, когда выполняется update-grub. Чтобы просмотреть все варианты просто less /boot/grub/grub.cfg или аналогичные. – Panther 26 March 2018 в 07:34
  • 2
    @Panther Я добавил записи меню grub # 94 и # 96 (из моей системы), чтобы показать большую полезность. Другая вещь, которую следует учитывать, - это проще использовать меню, чем для большинства из нас cat и grep. – WinEunuuchs2Unix 26 March 2018 в 07:41
  • 3
    +1. Я согласен с тем, что текстовые меню с использованием dialog могут быть полезны. – sudodus 26 March 2018 в 08:22
  • 4
    Ну, одна сноска к этому удивительному anwser - это некоторые разновидности ubuntu, которые не включают диалог lubuntu 16.04 не по умолчанию. – ianorlin 26 March 2018 в 09:07
  • 5
    @ianorlin гораздо лучшая версия только что была опубликована. – WinEunuuchs2Unix 6 April 2018 в 07:27

Другие вопросы по тегам:

Похожие вопросы: