从java中查找linux发行版的名称

从java中查找linux发行版的名称,java,linux,linux-distro,Java,Linux,Linux Distro,我们正在用java编写一个小型库,需要从底层系统收集信息。我们可以从java中的系统属性中读取大部分内容,但在linux上运行时,我们似乎找不到提取发行版名称的正确方法。电话 System.getProperty("os.name"); 返回“Linux”(我们也收集它),但我们也在寻找一种获得例如“Ubuntu”的方法。我们需要java中的这个解决方案,并且希望不必做一些/etc/release解析要做到这一点,可靠和准确是不可能的,我能建议的最好方法是获取“uname-a”的输出并使用它

我们正在用java编写一个小型库,需要从底层系统收集信息。我们可以从java中的系统属性中读取大部分内容,但在linux上运行时,我们似乎找不到提取发行版名称的正确方法。电话

System.getProperty("os.name");

返回“Linux”(我们也收集它),但我们也在寻找一种获得例如“Ubuntu”的方法。我们需要java中的这个解决方案,并且希望不必做一些/etc/release解析

要做到这一点,可靠和准确是不可能的,我能建议的最好方法是获取“uname-a”的输出并使用它


注意:这不是Java限制-根本没有通用(准确)的方法来识别发行版。

您可以尝试调用
lsb_release-i
,但这并不保证有效。

我通常使用以下命令:

cat /etc/issue cat/etc/问题
用Java读取这个文件应该很容易。问题是这个文件是否在所有(或至少大多数)Linux发行版上。我在任何需要它的地方都能找到它,但并不经常需要它。

你知道有哪种API(我指的是非Java)可以提供这些信息吗?嗯,不是真的。从我的谷歌搜索中,似乎做一些cat/etc/*发布会让你得到一些信息,但并不真正可靠。我真的希望你们中的一些人以前碰到过这个问题并解决了它…这是特定于发行的;我根本没有/etc/*版本(在Debian上,即使安装了lsb*)。我查看了lsb_发行版src(它只是一个python脚本),它从apt解析了大部分分发信息。相比于/etc/debian_版本(uname-a也不可靠),“我们正在用java编写一个小型库,需要从底层系统收集信息。”我对这种要求的最初反应是问“为什么这类信息与您的业务有关?”@Stephen:听起来很傲慢,但您确实提出了一个很好的观点:询问原始问题,而不是对该问题的感知解决方案+1在我的debian系统上,它返回“Distributor ID:debian”,因此看起来确实非常有希望@Arafangion:只有在安装了lsb*软件包的情况下才行:)它不会以其他方式工作实际上
lsb_release-d
也给了我很好的信息,你可能应该先试试这个。你可以在/etc中窥探,根据例如你知道Fedora安装了哪些文件,Ubuntu安装了哪些文件,但是你需要在你的程序中加入规则,它们可能会被打破。最好是测试实际的功能。@Thorbjørn Ravn Andersen:当然。(请随意编辑答案)