Как узнать, какую версию Linux я использую?
Есть ли способ определить, какая версия (дистрибутив и версия ядра, я полагаю) 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
Иначе ближайший широкодоступный метод - проверка /etc/something-release
файлов. Они существуют на большинстве распространённых платформ, а также на их производных (т.е, Red Hat и CentOS).
Приведем несколько примеров.
В 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
.
Mandriva имеет /etc/mandriva-release
.
Для большинства популярных дистрибутивов,
$ cat /etc/*{release,version}
будет работать чаще всего. В установках с полосками и пустыми “серверами” может не быть установлен пакет ‘release’ для дистрибутива.
Кроме того, две программы сторонних производителей, которые вы можете использовать для автоматического получения этой информации: Ohai и Facter .
Обратите внимание, что многие дистрибутивы имеют такую информацию в /etc/issue
или /etc/motd
, но некоторые политики безопасности и лучшие практики указывают, что эти файлы должны содержать баннеры уведомления о доступе.
Связанные Как узнать версию программного пакета, установленного на узле? марионетка .
Вы также можете попробовать:
$ cat /etc/issue
Обычно (не всегда, однако) он скажет вам, какой дистрибутив вы используете. /etc/issue
- это файл, используемый для экрана входа в систему.
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.
lsb_release -a && uname -r
Это издание также может быть решена с помощью * 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()
. _
Или использование функции &007:
python -c 'import platform; print platform.dist()'
# ('debian', '9.6', '')
Последняя команда _ пытается определить имя дистрибутива Linux OS name, но оно **deprecated, так как на Python 3.5_** и _будет удалено на Python 3.8 _.