从Java中确定Linux版本

7

我想知道有没有一种方法可以在JVM内部确定我正在运行哪个版本的Linux(即区分RHEL4、RHEL5)。我只是寻找一种区分操作系统及其版本的一致性方法。

6个回答

9
JVM通过以下方式为您提供操作系统的基本信息:
System.getProperty()

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

据我所知,它不提供特定于发行版的信息。至少对于 Debian 发行版,这些信息存储在名为 /etc/issue 的文件中。因此,阅读不同发行版存储此信息的任何文件可能会有所帮助。

4

我认为没有任何系统属性可以提供这些信息。您可以执行cat /proc/version命令并解析输出来获取相关信息。


1

你正在运行哪个版本的发行版或内核版本?我知道Red Hat曾经将他们的版本号保存在一个名为/etc/redhat-release的文件中。对于其他发行版,我不确定。您可以通过对“uname -r”进行系统调用来获取内核版本。


1

/prov/version 是一个不错的起点。 /etc/issue 也可能会有所帮助。


1
如果 System.getProperty(x) 中的 x 是 "os.name"、"os.arch" 或 "os.version" 无法满足您的需求,那么您可能需要采用运行本地进程的方法,如建议的 (cat /proc/version, 或 lsb_release 等)。

0

您也可以查看lsb_release

lsb_release -a

会给你类似这样的东西:

cyril@merlin:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 8.10
Release:    8.10
Codename:   intrepid

问题说“从JVM内部”,而这个答案给出了在Linux shell上运行的命令。 - dm76
1
我使用jdk的进程api运行命令,并读取约3个月的输入。但由于java.lang.Process不是为与脚本一起使用而设计的,特别是进程缓冲区不够大,导致出现了问题。症状是在某些虚拟机上会得到一个空字符串结果,而在其他一些虚拟机上则没有出现这种情况。因此,我更新了我的方法,通过启动/bin/bash作为进程来解决问题。然后,我向进程的输出流写入"/usr/bin/lsb_release -a\n"并从输入流中读取。工作效果更加稳定。 - Raymond Kroeker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接