2015-09-19 37 views
1

是否有一種檢測Java中Linux發行版的方法(最好是有效的,即不執行二進制文件並解析它們的輸出)?據我所知,System規定os.name,os.archos.version,這似乎沒有幫助。對於典型的Ubuntu安裝他們獲取這些值:從java中檢測linux發行版

os.name:AMD64

os.arch:Linux的

os.version:3.19.0-28泛型

我需要的是是否它是基於Debian的,Redhat家族或其他人。

回答

2

我覺得解析文件 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行)。

+0

我一直希望有一個更標準的方法,因爲這個文件沒有被強制執行,並且可能不存在。但因爲我只對重要的傷口感興趣,所以這可能是好的。然而,正確的處理方式有點不同:手冊頁說'/ etc/os-release優先於/ usr/lib/os-release。 .../etc/os-release應該是/ usr/lib/os-release的相對符號鏈接,以提供與僅查看/ etc的應用程序的兼容性。相對符號鏈接而不是絕對符號鏈接是必要的,以避免在chroot或initrd環境(如dracut)中斷開鏈接。' –

+1

最後兩條評論:不保證第8行,所以需要逐行解析:)並且值是一個空格分隔的列表,像'rhel fedora'。 –

1

你應該閱讀這些文件之一:

/etc/release 
/etc/lsb-release 

在更近的分佈,你還會發現:

/etc/os-release 
+0

似乎發行版和lsb-release文件並不常見,redhat衍生版不包含它。由於我只對最近的發行版感興趣,也許os-release會做。正如@reachus提到的那樣,ID_LIKE是要檢查的變量。 –