是否有一種檢測Java中Linux發行版的方法(最好是有效的,即不執行二進制文件並解析它們的輸出)?據我所知,System
規定os.name
,os.arch
和os.version
,這似乎沒有幫助。對於典型的Ubuntu安裝他們獲取這些值:從java中檢測linux發行版
os.name
:AMD64
os.arch
:Linux的
os.version
:3.19.0-28泛型
我需要的是是否它是基於Debian的,Redhat家族或其他人。
是否有一種檢測Java中Linux發行版的方法(最好是有效的,即不執行二進制文件並解析它們的輸出)?據我所知,System
規定os.name
,os.arch
和os.version
,這似乎沒有幫助。對於典型的Ubuntu安裝他們獲取這些值:從java中檢測linux發行版
os.name
:AMD64
os.arch
:Linux的
os.version
:3.19.0-28泛型
我需要的是是否它是基於Debian的,Redhat家族或其他人。
我覺得解析文件爲 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_LIKE
變量,它會給你你需要的確切信息(我不能保證,但我認爲它將永遠在每個Linux發行版的第8行)。
你應該閱讀這些文件之一:
/etc/release
/etc/lsb-release
在更近的分佈,你還會發現:
/etc/os-release
似乎發行版和lsb-release文件並不常見,redhat衍生版不包含它。由於我只對最近的發行版感興趣,也許os-release會做。正如@reachus提到的那樣,ID_LIKE是要檢查的變量。 –
我一直希望有一個更標準的方法,因爲這個文件沒有被強制執行,並且可能不存在。但因爲我只對重要的傷口感興趣,所以這可能是好的。然而,正確的處理方式有點不同:手冊頁說'/ etc/os-release優先於/ usr/lib/os-release。 .../etc/os-release應該是/ usr/lib/os-release的相對符號鏈接,以提供與僅查看/ etc的應用程序的兼容性。相對符號鏈接而不是絕對符號鏈接是必要的,以避免在chroot或initrd環境(如dracut)中斷開鏈接。' –
最後兩條評論:不保證第8行,所以需要逐行解析:)並且值是一個空格分隔的列表,像'rhel fedora'。 –