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

入口在哪里

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

取名字?

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

我已经知道,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 - 

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

如果我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用于在调用update-grub时生成GRUB( /boot/grub/grub.cfg )读取的配置文件,因此在挂载实际根文件系统时会读取该文件。

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

lsb_release是获取Linux Distro和版本(版本号)的内部命令。 命令如何工作以及从何处获取信息可以由您复制。

在终端类型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中,但不是它出现在grub菜单上的方式。 所以我们继续……

现在输入cat /etc/issue

 Ubuntu 16.04.1 LTS \n \l 

这是lsb_release可能获得Linux Distro的地方,因为Ubuntu 16.04.1 LTS出现在我的grub菜单上。

通过强制/ etc / issue到另一个常量来间接影响变量$ GRUB_DISTRIBUTOR (在您的问题中引用)之前,请考虑/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更改为My Cool Linux可能会出现在菜单上,但主题和着色的内部grub代码将在上面打破。 更不用说在你的其他应用程序和操作系统中可能会破坏grub内外的所有其他“事物”。

编辑1:

正如我今天早上在command-to-show-linux-version上学到的 ,然后发现@Zanna已经给出了一个很好的答案,命令lsb_release/etc/lsb-release检索文本。