Редактирование ОС называет в/etc/default/grub - где имя ОС читается из?

Где делает запись

GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian

взять имена от?

Вот то, почему это не дубликат, "Как безопасно изменить имя ОС в меню начальной загрузки личинки?":

Я уже знаю, что имена, присвоенные OSs в меню начальной загрузки GRUB, могут измениться путем комментария

GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian

и замена записи

GRUB_DISTRIBUTOR="Some other name"

(в кавычках).

Все объяснения, которые я нашел просто, говорят:

GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian -

"Эта строка просто получает имя в записи меню". Достаточно ярмарка! Но я хотел бы знать: Откуда эта команда получает подлинное имя? Имена должны содержаться в некотором файле в простом тексте!

4
задан 10 September 2016 в 03:00

2 ответа

Если я strace команда lsb_release -i -s...

strace -o strace.out lsb_release -i -s

Я нахожу (от выходного файла strace.out) то, что это читает /etc/lsb-release

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"

Вывод lsb_release -i -s Ubuntu

Перенаправление 2> /dev/null отправляет любые ошибки от команды до забвения данных

Оператор || средства, если (и только если) первая команда перестала работать, делают второй:

first command || second command

Итак, если lsb_release -i -s ошибки, ошибки переходят в /dev/null и команда echo Debian выполняется. Вывод этого Debian

Таким образом подводить итог:

Если lsb_release -s -i может дать нам название существующей системы, затем использовать это и отобразить вывод. В противном случае просто назовите это "Debian"

Файл /etc/default/grub используется для генерации файла конфигурации, прочитанного GRUB (/boot/grub/grub.cfg) когда update-grub назван, таким образом, это читается, когда реальная корневая файловая система смонтирована.

Необходимо работать sudo update-grub после редактирования файла для любых изменений для вступления в силу.

10
ответ дан 23 November 2019 в 11:41

lsb_release является внутренней командой для получения Дистрибутива Linux и версии (номер выпуска). То, как команда работает и где она получает информацию от, может быть дублировано Вами.

В терминальном типе cat /proc/version:

Linux version 4.7.3-040703-generic (kernel@tangerine) (gcc version 6.2.0 20160901 (Ubuntu 6.2.0-3ubuntu11) ) #201609070334 SMP Wed Sep 7 07:36:45 UTC 2016

Ubuntu появляется в/proc/version, но не способе, которым это появляется в меню личинки. Таким образом, мы идем дальше....

Теперь тип cat /etc/issue:

Ubuntu 16.04.1 LTS \n \l

Это - то, где lsb_release, вероятно, получает Дистрибутив Linux, потому что Ubuntu 16.04.1 LTS - то, что появляется в моем меню личинки.

Прежде косвенно влиять на переменную $GRUB_DISTRIBUTOR (ссылаемый в Вашем вопросе) путем принуждения /etc/issue к другой константе, рассмотрите этот код в /etc/grub.d/05_debian_theme:

set_default_theme(){
    case $GRUB_DISTRIBUTOR in
        Tanglu|Ubuntu|Kubuntu)
            # Set a monochromatic theme for Tanglu/Ubuntu.
            echo "${1}set menu_color_normal=white/black"
            echo "${1}set menu_color_highlight=black/light-gray"

Изменение Ubuntu к Мой Прохладный Linux мог бы появиться в меню хорошо, но внутренний код личинки для тем и окраски будет взломан выше. Не говоря уже обо всех других "вещах", которые могли бы повредить внутреннюю личинку плюс внешняя сторона в Ваших других приложениях и ОС.

Редактирование 1:

, Поскольку я учился этим утром в command-to-show-linux-version и затем обнаружил, что @Zanna уже дал превосходный ответ выше, команда lsb_release получает текст от /etc/lsb-release.

2
ответ дан 23 November 2019 в 11:41

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

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