在 /etc/default/grub 中编辑操作系统名称 - 操作系统名称是从哪里读取的?

use*_*506 4 grub2 dual-boot

入口在哪里

GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian
Run Code Online (Sandbox Code Playgroud)

取名字来自?

这就是为什么这不是“如何安全地在 grub 启动菜单中更改操作系统名称?”的原因:

我已经知道在 GRUB 启动菜单中分配给操作系统的名称可以通过注释来更改

GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian
Run Code Online (Sandbox Code Playgroud)

并替换条目

GRUB_DISTRIBUTOR="Some other name"
Run Code Online (Sandbox Code Playgroud)

(在引号中)。

我找到的所有解释都只是说:

GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian -
Run Code Online (Sandbox Code Playgroud)

“这一行只是检索菜单项中的名称。” 很公平!但我想知道:这个命令从哪里检索实际名称?名称必须以纯文本形式包含在某个文件中!

Zan*_*nna 10

如果我strace命令lsb_release -i -s...

strace -o strace.out lsb_release -i -s
Run Code Online (Sandbox Code Playgroud)

我发现(从输出文件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"
Run Code Online (Sandbox Code Playgroud)

的输出lsb_release -i -sUbuntu

重定向2> /dev/null将命令中的任何错误发送到数据遗忘

运算符的||意思是当(且仅当)第一个命令失败时,执行第二个命令:

first command || second command
Run Code Online (Sandbox Code Playgroud)

因此,如果lsb_release -i -s出现错误,错误将转到/dev/nullecho Debian执行命令。它的输出是Debian

所以总结一下:

如果lsb_release -s -i可以给我们当前系统的名称,然后使用它并显示输出。如果没有,就叫它“Debian”

该文件/etc/default/grub用于生成调用/boot/grub/grub.cfg时由GRUB( )读取的配置文件update-grub,因此在挂载真正的根文件系统时读取。

您必须sudo update-grub在编辑文件后运行才能使任何更改生效。