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

549
Jarmund

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

3
[Как получить имя дистрибутива и номер версии в простом сценарии оболочки?] (Http://unix.stackexchange.com/q/6345) DavidPostill 8 лет назад 2
Ответы, касающиеся версии ядра (например, `uname -a` и` cat / proc / version`, не верны, поскольку концепция «дистрибутива» чужды ядру Linux. Обратите внимание, что система Linux может быть не из это вообще дистрибутив, то есть это может быть ядро, созданное на заказ, и rootfs. sawdust 8 лет назад 0
@DavidPostill Было бы замечательно, если бы `/ etc / lsb-release` был более фактическим - он присутствовал только в 1 из 4, которые я попробовал ниже. Paul 8 лет назад 0
lsb-release обычно * необязательный * Thomas Dickey 8 лет назад 0
Cat / etc / * release * Alec Istomin 8 лет назад 0

4 ответа на вопрос

3
MariusMatutiae

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

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.

2
Paul

Это может быть небезопасно, но /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 
Как рекламируется, не надежно, но намного проще, чем мой метод проверки менеджера пакетов. `/ proc / version` на Mint Ubuntu, но это достаточно близко. Jarmund 8 лет назад 0
0
KenWeiLL
uname -a 

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

cat /etc/lsb-release 

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

Нет, он показывает только имя хоста, ядро ​​и платформу, а не дистрибутив. Jarmund 8 лет назад 0
Хорошо. Я обновил свой ответ. Это должно отобразить имя дистрибутива и версию. Или, по крайней мере, на моем Linux Mint. KenWeiLL 8 лет назад 0
0
mattdm

В современных 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) 

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

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

Похожие вопросы