在/ 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
检索文本。