Программы
Все способы узнать версию дистрибутива 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 и версию ядра — поделитесь ими в комментах. Самые интересные, естественно, добавлю в этот список.

Также может быть вам интересно:

Canonical оптимизирует себя

Видимо, ребята из Canonical решили не повторять ошибки Sun и, скрепя сердцем (коего нет у корпораций => скрепя калькулятором), таки задумались над целесообразностью проектов, не несущих прибыль.

Читать »

OMG! На MacOS есть Wine!

Есть у меня пара десятков грешков, которые «мешают мне быть действительно эффективным». И это не послеобеденный сон, там я обхожусь одной песней и ночной маской. Ситуация куда страшнее — я играю в Heroes of Might and Magic III.

Читать »
Фото Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Исследователи сумели пройти code-review с реквестами в ядро Linux, заведомо содержащими добавление уязвимостей.

Фото Маленькая книга о Go (golang)

Маленькая книга о Go (golang)

Маленькая книга о Go распространяется под лицензией Attribution-NonCommercial-ShareAlike 4.0 International license. Вы не должны платить за эту книгу.

Фото Microsoft открывает исходники, а её IDE супер-популярна

Microsoft открывает исходники, а её IDE супер-популярна

Решил сложить пару фактов и немного над этим поразмыслить. Реально ли Microsoft "переобулись"?

Фото Пример своей консольной команды в Django проекте

Пример своей консольной команды в Django проекте

Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать свои команды для управления проектом.

Фото Из Golang уберут термины whitelist/blacklist и master/slave

Из Golang уберут термины whitelist/blacklist и master/slave

На самом деле, это заметят только разработчики языка и встроенных инструментов, но почему бы об этом не написать?

Фото Зачем писать "hello world"?

Зачем писать "hello world"?

Немного размышлений об одной из самых известных программ для обучения программированию.

Фото Как на Bash получить файлы, изменённые за сегодняшний день

Как на Bash получить файлы, изменённые за сегодняшний день

Bash имеет огромные возможности по программированию/скриптованию и администрированию операционной системы. Не важно: Linux это, FreeBSD, или MacOS – на Bash можно сделать многое.

Фото Как установить часовой пояс в Linux

Как установить часовой пояс в Linux

В рамках первичной настройки Операционной Системы важно установить и по какому времени вы живёте, ведь при следующем обновлении времени через Интернет ваше время слетит.