Определить версию linux из java

Мне интересно, есть ли способ определить, какую версию Linux я использую (т.е. различать RHEL4, RHEL5) из JVM. Я просто ищу последовательный способ различать операционные системы и их версии.


person Raymond Kroeker    schedule 26.08.2009    source источник


Ответы (6)


Вы также можете ознакомиться с 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
person ccheneson    schedule 26.08.2009
comment
вопрос задан внутри JVM, и этот ответ дает команду для запуска в оболочке Linux - person dm76; 09.03.2010
comment
Я использовал API-интерфейс jdk для запуска команды, читал ввод около 3 месяцев. В итоге у меня возникли проблемы, потому что java.lang.Process не предназначен для работы со сценариями, в частности, буферы процессов были недостаточно большими, чтобы я мог прочитать результат. Симптом заключался в том, что на некоторых виртуальных машинах я получал пустую строку, а на некоторых - нет. Поэтому я обновил свой подход к запуску /bin/bash как процесса. Затем я пишу /usr/bin/lsb_release -a\n в поток вывода процесса и читаю из потока ввода. Работает намного стабильнее. - person Raymond Kroeker; 18.06.2010

JVM дает вам некоторую базовую информацию об операционной системе через

System.getProperty()

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

Насколько я знаю, он не предлагает конкретной информации о распространении. По крайней мере, для дистрибутивов Debian эта информация хранится в файле с именем

/и т.д./вопрос

Так что это может помочь прочитать любой из файлов, в которых разные дистрибутивы хранят эту информацию.

person Daff    schedule 26.08.2009

Я не верю, что есть какие-то системные свойства, на которые вы можете посмотреть, что даст вам эту информацию. Как насчет того, чтобы просто выполнить cat /proc/version и проанализировать вывод.

person Rob Di Marco    schedule 26.08.2009

Какую версию дистрибутива вы используете или какую версию ядра? Я знаю, что Red Hat хранила номер своей версии в файле с именем /etc/redhat-release. Я не уверен в другом дистрибутиве. Вы можете получить версию ядра, выполнив системный вызов «uname -r».

person MattC    schedule 26.08.2009

/prov/version - хорошее начало. /etc/issue тоже может быть полезно.

person anthony    schedule 26.08.2009

Если System.getProperty(x), где x — это «os.name», «os.arch», «os.version», у вас не работает, вам, возможно, придется прибегнуть к запуску собственного процесса, как было предложено (cat / proc/версия или lsb_release и т. д.)

person Glenn    schedule 26.08.2009