Какую версию RHEL я использую?

151

Как из оболочки и без привилегий root как определить, какую версию Red Hat Enterprise Linux я использую?

В идеале я хотел бы получить как основную, так и вспомогательную версию, например, RHEL 4.0 или RHEL 5.1 и т. Д.

Артур Ульфельдт
источник

Ответы:

154

Вы можете использовать lsb_releaseкоманду в различных дистрибутивах Linux:

lsb_release -i -r 

Это скажет вам Распространение и версию и будет немного более точным, чем доступ к файлам, которые могли или не могли быть изменены администратором или пакетом программного обеспечения. А также работает в нескольких дистрибутивах.

Для RHEL вы должны использовать:

cat /etc/redhat-release
Zypher
источник
5
команда не найдена в моем окне CentOS 5.4 :(
gbjbaanb
@gbjbaanb: Странно, я протестировал его на свежей минимальной установке 5.4, и он работал просто отлично ...
Zypher
26
lsb_release -i -r-bash: lsb_release: команда не найдена. Тем не менее, cat /etc/redhat-releaseRed Hat Enterprise Linux Server версии 5.6 (Tikanga)
Том
7
Просто для записи: не работает на RHEL 6.5 минимальная установка. Команду lsb_release нигде не найти.
сборный
4
lsb_release не является легким пакетом, он использует CUPS для предоставления '/ usr / bin / lp', который включает некоторый цикл перевода PDF, который включает некоторые библиотеки рендеринга ...
Jens Timmerman
142

Вы можете посмотреть содержимое / etc / redhat-release, которое будет выглядеть примерно так:

$ cat /etc/redhat-release 
CentOS release 5.4 (Final)

Содержание отличается для реальной системы RHEL. Этот метод работает со всеми производными RedHat, включая CentOS, Fedora и другие.

larsks
источник
14
Это наиболее подходящий ответ на вопрос.
fsoppelsa
lsb_releaseэто первое, что нужно попробовать, но так как это может быть не установлено, просмотр файлов - это хороший план Б.
цыплята
1
@chicks Учитывая, что вопрос требует теста для систем Redhat, а lsb_release не устанавливается по умолчанию в системах redhat и / etc / redhat-release, то lsb_release, очевидно, не первое, что нужно попробовать!
пока
@bye Это первое, что нужно попробовать (по крайней мере, на мой взгляд), сначала вы всегда пробуете то, что должно быть общим для всех дистрибутивов, затем только вы переключаетесь на решения для конкретного дистрибутива.
Деннис Нольте
25

Я предпочитаю использовать файл / etc / issue.

$ cat /etc/issue

Я видел много ситуаций, когда / etc / redhat-release был изменен для соответствия требованиям совместимости программного обеспечения (например, Dell или агенты управления HP).

ewwhite
источник
1
/etc/issueтакже работает на других ОС, таких как Debian и Ubuntu, и работает с ОС Linux, которые не соответствуют базе стандартов Linux, и с облегченными ОС, в которых не установлены утилиты lsb *.
Стефан Ласевски,
5
Это не надежно. Очевидно /etc/issue, предназначается для разбора agetty , которое заменяет escape-последовательности правильной информацией. Если вы только catэто, результат может быть не в восторге. На Fedora каждый получает Fedora release 20 (Heisenbug) Kernel \r on an \m (\l), что говорит вам кое-что, но на RHEL7 он просто получает \S Kernel \r on an \m.
Дэвид Тонхофер
Обратите внимание, что /etc/issueможет быть заменен локальным администратором и, следовательно, не является надежным источником информации.
Жаворонки
13

Самый надежный способ, когда lsb_release он не установлен :

# rpm -q --queryformat '%{VERSION}' redhat-release-server
6Server

# rpm -q --queryformat '%{RELEASE}' redhat-release-server
6.4.0.4.el6

На минимальных установках lsb_releaseотсутствует.

Чтобы это работало также с клонами Red Hat (ссылка на комментарии):

# rpm -q --queryformat '%{VERSION}' $(rpm -qa '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)')

Или, как одна команда (а не два выполняемых rpm):

# rpm -qa --queryformat '%{VERSION}\n' '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)'

Используйте sed/ cutи другие текстовые инструменты UNIX, чтобы получить то, что вы хотите.

lzap
источник
2
Кажется, это работает, в более общем плане: rpm -qa '(oraclelinux|sl|redhat|centos)-release(|-server)' sl для Scientific Linux; если вы знаете правильное название для других перестроений RHEL, возможно, прокомментируйте ниже. Предупреждение - не всесторонне проверено.
Дэн Приттс
1
Да, спасибо, одно замечание: не работает с RHEL Worstation.
lzap
Одно замечание - это работает намного медленнее, чем парсинг / etc / foo-release.
Дэн Притц
1
или rpm -qa | grep releaseеще проще
Уоррен
6

Предполагая, что это действительно релиз Red Hat (не Centos):

rpm -q redhat-release

Или просто запустите:

uname -r

И отобразить вывод. Ядра 2.6.9 - это RHEL4, ядра 2.6.18 - это RHEL5. При необходимости вы можете сопоставить полную версию с конкретными выпусками обновлений от Red Hat (т.е. 2.6.9-89 - это RHEL5 U4).

TCampbell
источник
1
rpm -q redhat-releaseпросто возвращается package redhat-release is not installedза мной и uname -rпросто говорит мне о выпуске ядра.
Марк Бут
Ой ! И теперь, когда это время прошло, что будет RHEL6? RHEL7? Хм ... Вот ответы: access.redhat.com/articles/3078#RHEL7
Мика
3

Я предпочитаю hostnamectl:

$ hostnamectl
   Static hostname: xxxxxx.xxx.xxx
         Icon name: computer-server
           Chassis: server
        Machine ID: 3e3038756eaf4c5c954ec3d24f35b13f
           Boot ID: 958452e0088b4191a4ea676ebc90403b
  Operating System: Red Hat Enterprise Linux Server 7.5 (Maipo)
       CPE OS Name: cpe:/o:redhat:enterprise_linux:7.5:GA:server
            Kernel: Linux 3.10.0-862.3.3.el7.x86_64
      Architecture: x86-64
Вернфрид Домшайт
источник
2

Мне очень нравится использовать /etc/os-releaseфайл, который есть в выпуске RPM:

# yum whatprovides /etc/os-release 
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
 * base: dl.za.jsdaav.net
 * extras: dl.za.jsdaav.net
 * updates: dl.za.jsdaav.net
centos-release-7-4.1708.el7.centos.x86_64 : CentOS Linux release file
Repo        : base
Matched from:
Filename    : /etc/os-release

centos-release-7-4.1708.el7.centos.x86_64 : CentOS Linux release file
Repo        : @anaconda
Matched from:
Filename    : /etc/os-release

Этот файл может быть получен в сценариях, например:

$ source /etc/os-release
$ echo $NAME
CentOS Linux
$ echo $VERSION
7 (Core)
Андрей
источник
Интересно, полезно. К сожалению, на данный момент RHEL6 не имеет столь ограниченного значения.
Дэн Притц
1

Если вы хотите просто получить номера версий, то следующее будет максимально коротким и простым.

Протестировано на rhel 6.7, rhel 7.2, debian 8.3 и ubuntu 14.04:

lsb_release -s -r | cut -d '.' -f 1

В качестве практического примера скажем, что вы хотите протестировать мажорную и минорную версию дистрибутива и сделать что-то на этой основе:

#!/bin/bash

major=$(lsb_release -s -r | cut -d '.' -f 1)
minor=$(lsb_release -s -r | cut -d '.' -f 2)

if (( "$major" >= 7 ))
then
  echo "Do stuff, OS major version is $major"
  echo "OS minor version is $minor"
else
  echo "Do other things"
  echo "Your version is $major.$minor"
fi
aseq
источник
1

Позднее прибытие к этому, но я весело провел время, пытаясь выяснить версию RHEL на нескольких удаленных узлах. Итак, если у вас есть группа серверов, которые используют один и тот же пароль (я знаю, я знаю ...), вот быстрый и грязный способ проверить версию RedHat:

Создать сценарий ожидания

vim server-version.sh

Ожидайте скрипт для проверки основной версии RedHat на нескольких удаленных хостах

#!/usr/bin/expect
log_user 0
spawn ssh -l root [lindex $argv 0]
expect "assword:"
send "sUp3rS3cr3tP4ssW0rd^\r"
expect "# "
log_user 1
send "cat /etc/redhat-release\r"
expect "*#"
log_user 0
send "exit\n"

Запустите скрипт для всех ваших узлов

[root@home ~]#
for server in server1 server2 server3 server4 server5; do echo -e "$server: \c"; /root/server-version.sh $server; echo; echo; done;

Выход

server1: cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
[root@server1 ~]#

server2: cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
[root@server2 ~]#

...
Левша Г Балог
источник
Если вы собираетесь выполнять удаленную работу на многих компьютерах, я настоятельно рекомендую использовать Ansible, а не сценарии bash, созданные вручную.
Нил Мэйхью
Я также рекомендую не включать root-вход через ssh
Нил Мэйхью