2009-08-26 70 views
6

我想知道是否有办法从JVM中确定我正在运行的Linux版本(即区分RHEL4,RHEL5)。我只是寻找一种区分操作系统和版本的一致方式。从java确定linux版本

回答

0

您还可以在lsb_release

lsb_release -a 

看看会给你这样的:

[email protected]:~$ lsb_release -a 
No LSB modules are available. 
Distributor ID: Ubuntu 
Description: Ubuntu 8.10 
Release: 8.10 
Codename: intrepid 
+0

将使用此。非常感激。 – 2009-08-26 21:25:00

+0

这个问题说“从JVM内部”,这个答案是给出一个命令在linux shell上运行 – dm76 2010-03-09 14:58:45

+1

我用jdk的进程api来运行问题命令,读取约3个月的输入。我最终遇到了问题,因为java.lang.Process不能用于脚本,特别是进程缓冲区不够大,无法读取结果。 症状是,在某些虚拟机上,我得到一个空字符串结果,而有些我没有。 所以我更新了我的方法来启动/ bin/bash作为一个过程。然后,我将“/ usr/bin/lsb_release -a \ n”写入进程输出流并从输入流中读取。 工作更一致。 – 2010-06-18 00:42:10

4

我不相信有任何系统属性,你可以看看会给你的信息。如何执行cat /proc/version并解析输出。

+0

打我吧! :) – javamonkey79 2009-08-26 20:43:49

1

您正在运行哪个版本的发行版或哪个版本的内核?我知道红帽曾经将他们的版本号保存在一个名为/ etc/redhat-release的文件中。我不确定其他发行版。您可以通过“使用uname -r”

7

的JVM使您可以通过

System.getProperty() 

"os.name" // OS name 
"os.arch" // OS architecture 
"os.version" // OS version 

有关操作系统的一些基本信息,据我知道这并不报价做一个系统调用获得内核版本分发特定信息。 至少在Debian发行此信息存储在一个名为

的/ etc /问题

所以它可以帮助阅读的任何文件,其中不同的发行版存储这些信息的。

+0

终于有人真的读到了这个问题! – dm76 2010-03-09 14:59:41

1

/prov/version是一个好的开始。 /etc/issue可能也有帮助。

1

如果System.getProperty(x)其中x是“os.name”,“os.arch”,“os.version”不适用于您,那么您可能不得不求助于将本机进程作为建议(执行cat/proc /版本,或lsb_release等)