Вопрос или проблема
Я искал какое-то решение, чтобы узнать название и версию дистрибутива Linux, на котором я запускаю свой Java-код, например, Ubuntu 18.04, CentOS 6 и т. д.
Я знаю о файлах, таких как /etc/os-release
или /etc/*release*
(читал другие ответы), которые предназначены для такой информации, но ищу актуальные решения, чтобы не изобретать велосипед и не беспокоиться о списке файлов для проверки и их ключах.
Также я нашел одну библиотеку – github.com/will/oslib, но у нее всего 18 звезд и меньше форков.
С точки зрения продукта, я бы хотел избежать изобретения велосипеда, а также избежать управления списком файлов и именами ключей для проверки информации о дистрибутиве Linux.
Вы уже нашли /etc/os-release
. Я бы прочитал его с библиотекой io.
Это простой текстовый файл, как этот:
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
Поскольку это очень просто, я думаю, что никто не создал открытой библиотеки для этого.
Ответ или решение
Библиотеки для определения информации о дистрибутиве Linux в Java
При разработке приложений на Java для Linux вам может понадобиться узнать информацию о дистрибутиве, на котором выполняется ваш код, например, название и версия дистрибутива (Ubuntu 18.04, CentOS 6 и так далее). Самый распространенный способ извлечения этой информации – использование текста файлов, таких как /etc/os-release
или /etc/*release*
. Однако, чтобы избежать ошибок и сделать код более чистым, вы ищете готовое решение.
Готовые библиотеки
На данный момент существует несколько библиотек и утилит, которые помогут вам получить эту информацию без необходимости вручную обрабатывать текстовые файлы.
-
Apache Commons Lang:
Хотя эта библиотека не предназначена исключительно для определения дистрибутивов Linux, ее классSystemUtils
может быть полезен для получения информации о операционной системе. Например, можно определить, является ли операционная система Linux, и с помощью других методов выяснить, используется ли дистрибутив, основанный на Debian или Red Hat. -
OSHI (Operating System and Hardware Information):
OSHI – это мощная библиотека, написанная на Java, которая предоставляет доступ к информации об операционной системе и аппаратном обеспечении. С ее помощью вы можете легко получить информацию о дистрибутиве и его версии.Пример использования OSHI для получения информации о дистрибутиве:
import oshi.SystemInfo; import oshi.os.OperatingSystemMXBean; public class LinuxDistroInfo { public static void main(String[] args) { SystemInfo systemInfo = new SystemInfo(); OperatingSystemMXBean os = systemInfo.getOperatingSystem(); String distro = os.getFamily() + " " + os.getVersionInfo().getVersion(); System.out.println("Дистрибутив: " + distro); } }
-
JPackage:
Если вы имеете дело с пакетной системой, аналогичной apt или yum, вы также можете рассмотреть возможность использования JPackage, который может помочь в интеграции с системным пакетным менеджером и предоставлять информацию о дистрибутиве через управляющие команды.
Альтернативные подходы
Если использование сторонних библиотек по каким-то причинам нецелесообразно, вы можете написать простой утилитарный метод, который будет считывать содержимое файла /etc/os-release
. Этот файл содержит стандартные ключи и значения, которые дают информацию о дистрибутиве.
Пример простого кода для чтения файла /etc/os-release
:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class DistroReader {
public static void main(String[] args) {
String line;
try (BufferedReader br = new BufferedReader(new FileReader("/etc/os-release"))) {
while ((line = br.readLine()) != null) {
if (line.startsWith("PRETTY_NAME=")) {
String distroName = line.split("=")[1].replace("\"", "");
System.out.println("Дистрибутив: " + distroName);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Заключение
Хотя возможности определения информации о дистрибутиве Linux в Java не так широко распространены, существуют несколько используемых библиотек, как OSHI, которые обеспечивают удобство работы с этой задачей. Если вам нужно более простое или напрямую интегрируемое решение, вы всегда можете прибегнуть к чтению конфигурационных файлов. Используя представленные подходы, вы сможете не только избежать избыточного кода, но и значительно упростить свою работу.