На какие дистрибутивы 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поле?

w128
источник
1
Ubuntu, Debian, Arch точно. Во всяком случае, я бы не стал обнаруживать дистрибутив таким образом. В прошлый раз, когда мне нужно было различить дистрибутивы, я проверял наличие определенных менеджеров пакетов (например, pacman -> Arch, apt-get & no pacman -> либо Ubuntu, либо Debian). Это довольно сложная задача, и я также хотел бы знать, есть ли лучшее решение.
Днемад
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объявлении .

Стивен Китт
источник