从java检测linux发行版
是否有一种(最好是高效的,即不执行二进制文件并解析其输出)方法来检测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
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
。