Где делает запись
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 -
"Эта строка просто получает имя в записи меню". Достаточно ярмарка! Но я хотел бы знать: Откуда эта команда получает подлинное имя? Имена должны содержаться в некотором файле в простом тексте!
Если я 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
после редактирования файла для любых изменений для вступления в силу.
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
.