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