Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java检测linux发行版_Java_Linux - Fatal编程技术网

从java检测linux发行版

从java检测linux发行版,java,linux,Java,Linux,是否有一种(最好是高效的,即不执行二进制文件并解析其输出)方法来检测Java中的Linux发行版?据我所知,System提供了os.name、os.arch和os.version,这些似乎没有什么帮助。对于典型的Ubuntu安装,他们会得到以下值: os.name:amd64 os.arch:Linux os.version:3.19.0-28-generic 我需要的是它是基于debian的redhat系列还是其他系列。您应该阅读以下文件之一: /etc/release /etc/lsb-re

是否有一种(最好是高效的,即不执行二进制文件并解析其输出)方法来检测Java中的Linux发行版?据我所知,
System
提供了
os.name
os.arch
os.version
,这些似乎没有什么帮助。对于典型的Ubuntu安装,他们会得到以下值:

os.name
:amd64

os.arch
:Linux

os.version
:3.19.0-28-generic


我需要的是它是基于debian的redhat系列还是其他系列。

您应该阅读以下文件之一:

/etc/release
/etc/lsb-release
在最近的发行版中,您还将发现:

/etc/os-release
我认为解析文件是Linux下的一种方式。你当然只能做一次

在Linux上查找此类信息的正确文件应该是
/etc/*-release
,它在我的机器上提供以下输出:

$ cat /etc/*-release                                                                                        
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"
NAME="Ubuntu"
VERSION="14.04.3 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.3 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

然后,您可以解析
ID\u LIKE
变量,该变量将为您提供所需的确切信息(我不能保证这一点,但我认为它将始终位于每个Linux发行版的第8行)。

似乎发行版和lsb发行版文件并不常见,redhat衍生产品不包括它。因为我只对最近的发行版感兴趣,也许os发行版就可以了。正如@reachus提到的,ID_LIKE是要检查的变量。我一直希望有一个更标准的方法,因为这个文件没有强制执行,并且可能不存在。但既然我只对主要地区感兴趣,那可能没关系。然而,正确的处理方法有点不同:手册页上说,
/etc/os版本优先于/usr/lib/os版本/etc/os发行版应该是/usr/lib/os发行版的相对符号链接,以提供与仅查看/etc的应用程序的兼容性。必须使用相对符号链接而不是绝对符号链接,以避免在chroot或initrd环境(如dracut)中断开链接。
最后两条评论:不保证第8行,因此需要逐行解析:),值是一个空格分隔的列表,如
rhel-fedora