Программы
Все способы узнать версию дистрибутива Linux (а также FreeBSD, MacOS и прочих)

Все способы узнать версию дистрибутива Linux (а также FreeBSD, MacOS и прочих)

Учитывая зоопарк дистрибутивов Linux, иной раз, получая доступ к серверу, не понимаешь, где ты находишься. Особенно это больно, если нужно поставить недостающий пакет.

Учитывая зоопарк дистрибутивов Linux, иной раз, получая доступ к серверу, не понимаешь, где ты находишься. Особенно это больно, если нужно поставить недостающий пакет. Руки сами пишут

lsb_release -a

в надежде увидеть

No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04 LTS
Release: 16.04
Codename: xenial

или что-то подобное, но в ответ лишь

lsb_release: команда не найдена

Следующее, что приходит в голову:

$ uname -a
Linux w 4.4.0-66-generic #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Точнее, это как раз (лично мне) первым и вспоминается, но в голове крутится, что есть способ «правильнее». Да, именно тот, который я первым и написал. Также можно сделать через

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"

— «правильный вариант» для людей «всё есть файл».

Вообще, это не единственный «релиз», который у нас есть в /etc.

$ cat /etc/*release*
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
NAME="Ubuntu"
VERSION="16.04 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
UBUNTU_CODENAME=xenial
$ ll /etc/*release*
-rw-r--r-- 1 root root 103 апр 13 2016 /etc/lsb-release
lrwxrwxrwx 1 root root 21 дек 13 17:56 /etc/os-release -> ../usr/lib/os-release

У красноголовых можно встретить redhat-release, например.

Идём дальше по файлам:

$ cat /etc/*version*
stretch/sid

А также

$ cat /etc/*issue*
Ubuntu 16.04 LTS \n \l

Ubuntu 16.04 LTS

(их два на Ubuntu). Ну и

$ cat /proc/version
Linux version 4.4.0-66-generic (buildd@lgw01-28) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017

Ещё неплохой вариант «выцыганить» версию из логов dmesg

$ dmesg | grep "Linux version"
[    0.000000] Linux version 4.4.0-66-generic (buildd@lgw01-28) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017 (Ubuntu 4.4.0-66.87-generic 4.4.44)

Или вообще использовать утилиту inxi (в иных дистрибутивах и она стоит, например Linux Mint):

$ inxi -S
 System: Host: w Kernel: 4.4.0-66-generic x86_64 (64 bit) Desktop: Unity 7.4.0
 Distro: Ubuntu 16.04 xenial

Также можно посмотреть данные по аудио, железу, даже монитору через inxi -F.

A можно глянуть, как ядро Linux запущено:

$ cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-4.4.0-66-generic.efi.signed root=/dev/mapper/ubuntu--vg-root ro quiet splash vt.handoff=7

sysctl также нам поможет:

$ sysctl -a | grep version
 sysctl: permission denied on key 'fs.protected_hardlinks'
 sysctl: permission denied on key 'fs.protected_symlinks'
 sysctl: permission denied on key 'kernel.cad_pid'
 kernel.bootloader_version = 1
 sysctl: permission denied on key 'kernel.unprivileged_userns_apparmor_policy'
 sysctl: permission denied on key 'kernel.usermodehelper.bset'
 sysctl: permission denied on key 'kernel.usermodehelper.inheritable'
 kernel.version = #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017
 ...

Окей, нет у нас этих утилит, файлов, но кто-то оставил gcc…

$ echo 'int main(void){return 0;}' > os.c && gcc os.c -o os && strings os
/lib64/ld-linux-x86-64.so.2
libc.so.6
__libc_start_main
__gmon_start__
GLIBC_2.2.5
UH-0
AWAVA
AUATL
[]A\A]A^A_
;*3$"
GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
...

Ну и вообще можно натравить strings на тот же /bin/ls и получить также много информации. Правда, там так просто не найти нужное (или вообще не найти).

Утилита file также может рассказать многое:

$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=eca98eeadafddff44caf37ae3d4b227132861218, stripped

Если же ничто из этого не помогло, поищите на экране кнопку «Пуск» ⛧

Есть ещё вариант спросить админа… Но он слишком дзенский.

— Максим, — спросил Федор — в чем смысл дзен?
Максим ответил:
— Смысл дзен — это как налить из чекушки четыре полных стакана водки.
— Да, — сказал Федор — из пустой.
— Да, — ответил Максим — и не выпить.
— Да, — сказа Федор — и водку в стаканы не наливать.

Я уверен, это не все возможные способы. Если вы знаете другие «элегантные» способы узнать дистрибутив Linux и версию ядра — поделитесь ими в комментах. Самые интересные, естественно, добавлю в этот список.

Изображение Шпаргалка по командам Linux, FreeBSD и MacOS