从java获取Linux Distro

时间:2013-02-22 06:49:57

标签: java operating-system linux-distro

从java开始,我得到了Iam工作的名字。见下面的代码:

System.out.println(System.getProperty("os.name"));

在Windows XP中,它打印如下:Windows XP

但是在ubuntu / fedora中,它只显示Linux

任何人都可以帮我找到使用java代码的Iam使用的linux版本(比如ubuntu或fedora)吗?是否可以从java中找到linux发行版?

4 个答案:

答案 0 :(得分:4)

此代码可以帮助您:

String[] cmd = {
"/bin/sh", "-c", "cat /etc/*-release" };

try {
    Process p = Runtime.getRuntime().exec(cmd);
    BufferedReader bri = new BufferedReader(new InputStreamReader(
            p.getInputStream()));

    String line = "";
    while ((line = bri.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {

    e.printStackTrace();
}

<强>更新

如果你只需要使用uname -a

的版本试试

<强>更新

某些Linux发行版包含/ proc / version文件中的发行版。这是一个从java中打印所有内容而不调用任何SO命令的示例

//lists all the files ending with -release in the etc folder
File dir = new File("/etc/");
File fileList[] = new File[0];
if(dir.exists()){
    fileList =  dir.listFiles(new FilenameFilter() {
        public boolean accept(File dir, String filename) {
            return filename.endsWith("-release");
        }
    });
}
//looks for the version file (not all linux distros)
File fileVersion = new File("/proc/version");
if(fileVersion.exists()){
    fileList = Arrays.copyOf(fileList,fileList.length+1);
    fileList[fileList.length-1] = fileVersion;
}       
//prints all the version-related files
for (File f : fileList) {
    try {
        BufferedReader myReader = new BufferedReader(new FileReader(f));
        String strLine = null;
        while ((strLine = myReader.readLine()) != null) {
            System.out.println(strLine);
        }
        myReader.close();
    } catch (Exception e) {
        System.err.println("Error: " + e.getMessage());
    }
}

答案 1 :(得分:4)

从这开始,我扩展代码以包含不同的回退场景,以便在多个平台上获得操作系统版本

  • Windows足够具有描述性,您可以从'os.name'系统属性中获取信息
  • Mac OS:您需要根据版本保留版本名称列表
  • Linux:这是最复杂的,这里是后备列表:
       - 如果发行版符合LSB,则从LSB发布文件中获取信息    - 从/ etc / system-release获取信息(如果存在)    - 从/ etc /
    中的'-release'结尾的任何文件中获取信息    - 从/ etc /中的任何以'_version'结尾的文件中获取信息(主要用于Debian)
       - 从/ etc / issue获取信息(如果存在)    - 最糟糕的情况,从/ proc / version获得什么信息

  • 您可以在这里获得实用程序类:
    https://github.com/aurbroszniowski/os-platform-finder

    答案 2 :(得分:0)

    获取Linux发行版名称的一种特殊方式是阅读/etc/*-release文件的内容。它会给你CentOS release 6.3 (Final)之类的东西。

    从Java读取该文件的内容是直截了当的。

    可能不是最好的方法,但它会完成工作,也只能在* nix框上工作而不能在Windows上工作。

    答案 3 :(得分:0)

    您可以使用java运行uname -r,并获得结果;这通常会揭示发行版,除非它是由他的地下室的一些来源编辑的。对于我的机器:

    mao@korhal ~ $ uname -r
    3.4.9-gentoo
    

    并运行它:

    Process p = Runtime.getRuntime().exec("uname -r");  
    BufferedReader in = new BufferedReader(  
                        new InputStreamReader(p.getInputStream()));  
    String distro = in.readLine();  
    
    // Do something with distro and close reader
    

    修改:或许uname -a一般可以更好地发布发行版。或者查看/etc/*-release文件,这些文件似乎通常在大多数将军身上定义。