Как определить используемый дистрибутив Linux?

Что я обычно делаю, чтобы хотя бы понять, о какой ветке мы говорим, я пытаюсь запустить apt-get, pacman, yum и все другие распространенные менеджеры пакетов, которые я могу вспомнить из головы, но я уверен, что есть лучший способ, так: есть ли простой способ, с помощью только оболочки, определить, в какой дистрибутив Linux вы только что вошли в систему?

4 ответа

Решение

Это зависит от дистрибутива.

Debian и родственники используют

     lsb_release -a
     cat /etc/lsb-release

либо один должен быть в порядке. Но, несмотря на то, что это связано с LSB (Linux Standard Base), оно есть не во всех дистрибутивах. Если вы не получили ответа от вышеуказанных команд, вам следует попробовать

      ls /etc/*release

а затем загляните внутрь того файла, который вы нашли. Вы должны быть осторожны с этим: в то время как RedHat имеет /etc/redhat-release, другие, такие как Arch Linux, имеют пустой файл /etc/arch-release, а тот, который содержит информацию, которую вы ищете, это / etc / ОС-релиз.

Итак, YMMV.

Это не может быть надежным, но /proc/version должен хотя бы дать вам приблизительную оценку:

Redhat производная:

# cat /proc/version 
Linux version 2.6.18-92cp (builder@Lnx30BccCmp5) (gcc version 4.1.1 20061011 (Red Hat 4.1.1-30)) #1 SMP Wed Apr 8 17:12:19 IDT 2015

Ubuntu:

$ cat /proc/version
Linux version 3.13.0-24-generic (buildd@panlong) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014

Debian:

$ cat /proc/version 
Linux version 3.2.0-4-amd64 (debian-kernel@lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Debian 3.2.65-1+deb7u1      

Centos:

# cat /proc/version 
Linux version 2.6.18-400.el5xen (mockbuild@builder17.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-55)) #1 SMP Thu Dec 4 13:29:23 EST 2014

В современных Fedora и Debian (а также в Arch, CentOS, CoreOS, Mageia, openSUSE, Red Hat Enterprise Linux, SUSE Linux Enterprise Server, Ubuntu и других) проще всего взглянуть на /etc/os-release или беги hostnamectl status,

В сценарии вы можете просто сделать

#!/bin/sh
source /etc/os-release
echo $PRETTY_NAME

Например:

$ source /etc/os-release
$ echo $PRETTY_NAME
Fedora 25 (Workstation Edition)

...

$ source /etc/os-release 
$ echo $PRETTY_NAME
Debian GNU/Linux 8 (jessie)

Конечно, если вам нужно идентифицировать старые версии или несистемные дистрибутивы, вы можете просто начать с этого подхода, если /etc/os-release существует, и если это не так, вернемся к поиску lsb_release, /etc/redhat-releaseпытаясь понять это из /proc/versionили какой-то другой эвристический.

См. Определение имени и версии дистрибутива Linux в документации по переполнению стека.

Я использую утилиту сценария для multi-linux-платформы screenfetch:

uname -a

Должен сделать свое дело. Он отобразит системную информацию о дистрибутиве, в который вы вошли.

cat /etc/lsb-release 

Также должны отображаться название и версия дистрибутива.

Другие вопросы по тегам