我可以依靠/ etc / os-release在哪些Linux发行版上?


17

我试图找到一种方法来确定适用于大多数(或理想情况下)所有现代发行版的Linux发行版名称和版本。我注意到其中/etc/os-release包含我尝试的发行版(CentOS,Debian)所需的信息,但是依靠它的存在有多安全?诸如此类的命令uname -a实际上并没有包含相同的信息,并且lsb_release例如在最少的CentOS上显然不存在。

有没有一种快速找到确切发行版本的方法/etc/os-release?此外,在/etc/os-release保证包含NAMEVERSIONPRETTY_NAME字段?


1
Ubuntu,Debian,Arch当然可以。无论如何,我会以这种方式忽略检测发行版。上一次我需要区分发行版时,我正在检查是否存在特定的软件包管理器(即pacman-> Arch,apt-get&no pacman-> Ubuntu或Debian)。这是一个棘手的任务,我也想知道是否有更好的解决方案。
ddnomad

1
一个人想知道为什么您需要知道发行名称。当您应该进行功能检测时,这听起来像是检测浏览器的情况。
xDaizu

@xDaizu我在远程主机上运行脚本以获取有关它们的各种信息。
w128

@ w128在这种情况下,您是否不能检查“功能”(/ etc / os-release)是否存在(如果不存在,则回退到其他方法),而不是依靠它起作用的静态可变列表?
xDaizu

1
如果我可以保证问题中提出的简单解决方案在我需要支持的几个主要发行版中都是可靠的,那么@xDaizu可能会涉及“其他方法”,这可能会涉及多余的工作,因此可以证明是不可行的。在这种情况下。
w128

Answers:


14

任何运行systemd的系统都应具有/etc/os-release,它被指定为systemd的一部分。一些没有systemd的系统可能也有它(例如 Debian 8,其中systemd是可选的,但/etc/os-release在所有情况下都已安装)。

根据该规范,所有字段都是可选的,有的有默认值(“Linux的”为NAMEPRETTY_NAME)。

您会在/etc/os-release公告中找到更多背景信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.