【问题标题】:Find name of linux distro from java从 java 中查找 linux 发行版的名称
【发布时间】:2011-05-19 01:53:00
【问题描述】:

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

System.getProperty("os.name");

返回“Linux”(我们也收集)但我们正在寻找一种方法来获取例如“Ubuntu”也是如此。我们在 java 中需要这个解决方案,并且不想做一些 /etc/release 解析

【问题讨论】:

  • 您知道任何可以提供该信息的 API(我的意思是非 Java)吗?
  • 嗯,不是真的。从我的谷歌搜索看来,做一些 cat /etc/*release 会给你一些信息,但不是很可靠。我真的希望你们中的一些人以前遇到过这个问题并解决了它......
  • 这是特定于发行版的;我根本没有 /etc/*release (在 Debian 上,即使安装了 lsb* )。我查看了 lsb_release src(它只是一个 python 脚本),它解析了来自 apt 的大部分分发信息。比寻找 /etc/debian_version 更简单的方法(特定于 debian)(uname -a 也不可靠)
  • “我们正在用 java 编写一个小型库,需要从底层系统收集信息。” 我对这样的需求的最初反应是问“为什么是这种您的任何业务的信息?”。
  • @Stephen:这听起来有点居高临下,但你确实提出了一个很好的观点:询问原始问题,而不是该问题的感知解决方案!

标签: java linux linux-distro


【解决方案1】:

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

【讨论】:

  • +1 在我的 debian 系统上,这会返回“Distributor ID: Debian”,所以这看起来确实很有前途!
  • @Arafangion: 仅当安装了 lsb* 软件包时:) 否则它将无法工作
  • 其实lsb_release -d也给了我很好的信息,你应该先试试这个。
【解决方案2】:

要可靠且准确地做到这一点是不可能的,我能建议的最好办法是获取 'uname -a' 的输出并使用它。

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

【讨论】:

  • 您可以在 /etc 中窥探并根据例如推断事物。你知道 Fedora 安装了哪些文件,Ubuntu 安装了哪些文件,但是你的程序中需要规则,它们可能会破坏。更好地测试实际功能。
  • @Thorbjørn Ravn Andersen:当然。 (随意编辑答案)
【解决方案3】:

我通常使用以下命令:

猫 /etc/问题

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

【讨论】:

    猜你喜欢
    • 2011-02-14
    • 2015-06-17
    • 2012-10-17
    • 2011-09-13
    • 2015-01-07
    • 2013-02-07
    • 2015-12-16
    • 2012-05-03
    相关资源
    最近更新 更多