Как узнать, какую версию Linux я использую?

209

Есть ли способ определить, какая версия Linux (версия дистрибутива и ядра, я полагаю) работает (из командной строки), которая работает в любой системе Linux?

Дэрил Спитцер
источник

Ответы:

267

Ядро универсально определяется с помощью 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, но некоторые политики безопасности и лучшие практики указывают, что эти файлы должны содержать баннеры уведомлений о доступе.

Связанный: Как узнать версию программного пакета, установленного на узле? , .

jtimberman
источник
3
Lol здесь я думал, чтобы предложить: искать О!
Иво Флипс
2
Slackware имеет / etc / slackware-версию
Кен Кинан
Спасибо, Кен, у меня нет системы Slackware.
jtimberman
4
IOW: ls / etc / * {release, version} и изучите все, что вернется ...
freiheit
1
У большинства также есть / etc / issue
Дрю Стивенс
41

Вы также можете попробовать:

$ cat /etc/issue

Обычно (хотя и не всегда) вам сообщают, какой дистрибутив вы используете. /etc/issueэто файл, используемый для экрана входа в систему.

Пабло Санта Круз
источник
2
Это единственный, который прибил его для меня на общем сервере Media Temple. Спасибо!!
TryTryAgain
2
Ха, на RedHat, это просто\S[newline]Kernel \r on an \m
Ruffin
20

Ядро: uname -a

raspi
источник
+1. Для подобных систем, таких как MinGW , «-a» требуется для получения информации о версии, например, «MINGW32_NT-5.1 LAP065 1.0.17 (0.48 / 3/2) 2011-04-24 23:39 i686 Msys».
Питер Мортенсен
15
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

sweetfa
источник
14

lsb_release -a, когда доступно, полезно.

CesarB
источник
12

cat /proc/version нашел мне Red Hat на общем VPS.

ионосферные
источник
6

Ядро: uname -r

дистрибутив: lsb_release -a

Они будут работать на большинстве систем Linux

Альберт З.
источник
5

Один лайнер

lsb_release -a && uname -r
Серж Строобандт
источник
1
Это может быть более уместным в качестве комментария к ответу Альберта З.
fixer1234
1
могучий ответ, чтобы заключить все ответы! Я должен поддержать голос за усилие :)
B.Kocis
1

Эта проблема также может быть решена с помощью 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 .

simhumileco
источник