На яких дистрибутивах Linux я можу покластися на наявність / etc / os-release?


17

Я намагаюся знайти спосіб визначити ім’я дистрибутива та версію Linux, яка б працювала на більшості (або в ідеалі всіх) сучасних дистрибутивах. Я помітив, що /etc/os-releaseмістить потрібну мені інформацію про дистрибуції, які я пробував (CentOS, Debian), але наскільки безпечно розраховувати на її наявність? Такі команди, як uname -aнасправді, не містять однакової інформації, і lsb_release, очевидно, відсутні в, наприклад, мінімальному CentOS.

Чи є швидкий спосіб дізнатися, з якими саме дистрибутивами /etc/os-release? Крім того, буде /etc/os-releaseгарантовано містити NAME, VERSIONі PRETTY_NAMEполе?


1
Ubuntu, Debian, Arch точно. У будь-якому випадку я б пропустив виявлення дистрибутива таким чином. Востаннє, коли мені потрібно розрізняти дистрибутиви, я перевіряв наявність конкретних менеджерів пакунків (тобто pacman -> Arch, apt-get & no pacman -> або Ubuntu або Debian). Це щось складне завдання, і я також хотів би знати, чи є краще рішення.
ddnomad

1
Одне задається питанням, чому вам потрібно знати назву розповсюдження. Це звучить як випадок виявлення браузера, коли ви повинні виконувати пошук функції .
xDaizu

@xDaizu Я запускаю скрипти на віддалених хостах, щоб отримати різні відомості про них.
w128

@ w128, чи не можете ви перевірити, чи існує "функція" (/ etc / os-release), і замість того, щоб покластись у статичний перелік змінних дистрибутивів, де це працює?
xDaizu

1
@xDaizu повернення до "інших методів" може включати додаткову роботу, яка може виявитися непотрібною, якщо я можу гарантувати, що просте рішення, запропоноване в цьому питанні, є надійним у кількох основних дистрибутивах, які мені потрібно підтримати, тому змінений список підтримуваних дистрибутивів чудово в цьому випадку.
w128

Відповіді:


14

Будь-яка система, на якій працює systemd, повинна мати /etc/os-release, яка вказана як частина systemd. У деяких системах без systemd його також може бути ( наприклад, Debian 8, де systemd є необов’язковим, але /etc/os-releaseвстановлений у всіх випадках).

Відповідно до специфікації, усі поля необов’язкові, а деякі мають параметри за замовчуванням ("Linux" для NAMEта PRETTY_NAME).

Ви знайдете більше інформації в /etc/os-releaseоголошенні .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.