Чи є спосіб визначити, яка версія (дистрибутив і версія ядра, я думаю) працює під управлінням 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}
найчастіше буде працювати. У витягнутих і боребоневих "серверних" установках може не встановити пакет "випуск" для дистрибутива.
Крім того, дві сторонні програми, які ви можете використовувати для автоматичного отримання цієї інформації, - 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-реліз до 13.1, але застаріло на користь OS-релізу.
Redhat 6.1 має cat / etc / redhat-release
Ядро: uname -r
Distro: 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 OS , але воно застаріле з Python 3.5 і буде видалено в Python 3.8 .