Есть ли способ определить, какая версия Linux (версия дистрибутива и ядра, я полагаю) работает (из командной строки), которая работает в любой системе Linux?
Есть ли способ определить, какая версия Linux (версия дистрибутива и ядра, я полагаю) работает (из командной строки), которая работает в любой системе Linux?
Ответы:
Ядро универсально определяется с помощью uname
:
$ uname -or
2.6.18-128.el5 GNU/Linux
На самом деле нет способа перекрестного распространения, чтобы определить, какой дистрибутив и версию вы используете. Были попытки сделать это непротиворечивым, но, в конце концов, оно меняется, к сожалению. Инструменты LSB предоставляют эту информацию, но по иронии судьбы не устанавливаются по умолчанию везде. Пример в системе Ubuntu 9.04 с lsb-release
установленным пакетом:
$ lsb_release -irc
Distributor ID: Ubuntu
Release: 9.04
Codename: jaunty
В противном случае ближайший широко доступный метод - проверка файлов. Они существуют на большинстве распространенных платформ и их производных (например, Red Hat и CentOS)./etc/something-release
Вот несколько примеров.
Ubuntu имеет /etc/lsb-release
:
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=9.04
DISTRIB_CODENAME=jaunty
DISTRIB_DESCRIPTION="Ubuntu 9.04"
Но у Debian есть /etc/debian_version
:
$ cat /etc/debian_version
5.0.2
Fedora, Red Hat и CentOS имеют:
Fedora: $ cat /etc/fedora-release
Fedora release 10 (Cambridge)
Red Hat/older CentOS: $ cat /etc/redhat-release
CentOS release 5.3 (Final)
newer CentOS: $ cat /etc/centos-release
CentOS Linux release 7.1.1503 (Core)
Gentoo:
$ cat /etc/gentoo-release
Gentoo Base System release 1.12.11.1
В данный момент у меня нет системы SUSE, но я верю, что это так /etc/SuSE-release
.
Slackware имеет /etc/slackware-release
и / или /etc/slackware-version
.
Мандрива имеет /etc/mandriva-release
.
Тогда для большинства популярных дистрибутивов
$ cat /etc/*{release,version}
будет чаще всего работать. Урезанные и пустые «серверные» установки могут не иметь установленного пакета «release» для дистрибутива.
Кроме того, два 3 - й программы партии , которые можно использовать , чтобы автоматически получить эту информацию в Ohai и Facter .
Обратите внимание, что во многих дистрибутивах такая информация содержится в /etc/issue
или /etc/motd
, но некоторые политики безопасности и лучшие практики указывают, что эти файлы должны содержать баннеры уведомлений о доступе.
Связанный: Как узнать версию программного пакета, установленного на узле? , Кукольный .
Вы также можете попробовать:
$ cat /etc/issue
Обычно (хотя и не всегда) вам сообщают, какой дистрибутив вы используете. /etc/issue
это файл, используемый для экрана входа в систему.
\S[newline]Kernel \r on an \m
Ядро: uname -a
cat /etc/os-release
как минимум для Ubuntu, Fedora и OpenSUSE.
Не работает для OS X по крайней мере до 10.9 (Mavericks). Вместо этого используйте sw_vers .
OpenSUSE имел cat / etc / SuSE-release до 13.1, но не рекомендуется в пользу os-release.
В Redhat 6.1 есть cat / etc / redhat-release
cat /proc/version
нашел мне Red Hat на общем VPS.
Ядро: uname -r
дистрибутив: lsb_release -a
Они будут работать на большинстве систем Linux
Эта проблема также может быть решена с помощью Python с platform
модулем :
Используя platform()
функцию:
python -c 'import platform; print platform.platform()'
# Linux-4.9.0-8-amd64-x86_64-with-debian-9.6
Приведенная выше команда возвращает одну строку, идентифицирующую базовую платформу, с максимально возможным количеством полезной информации.
Или используя uname()
функцию:
python -c 'import platform; print platform.uname()'
# ('Linux', 'debian', '4.9.0-8-amd64', '#1 SMP Debian 4.9.130-2 (2018-10-27)', 'x86_64', '')
Эта команда возвращает набор , namedtuple()
содержащий шесть атрибутов: system
, node
, release
, version
, machine
, и processor
.
Или используя dist()
функцию:
python -c 'import platform; print platform.dist()'
# ('debian', '9.6', '')
Последняя команда пытается определить имя дистрибутива ОС Linux , но она устарела с Python 3.5 и будет удалена в Python 3.8 .