Как из оболочки и без привилегий root как определить, какую версию Red Hat Enterprise Linux я использую?
В идеале я хотел бы получить как основную, так и вспомогательную версию, например, RHEL 4.0 или RHEL 5.1 и т. Д.
Как из оболочки и без привилегий root как определить, какую версию Red Hat Enterprise Linux я использую?
В идеале я хотел бы получить как основную, так и вспомогательную версию, например, RHEL 4.0 или RHEL 5.1 и т. Д.
Ответы:
Вы можете использовать lsb_release
команду в различных дистрибутивах Linux:
lsb_release -i -r
Это скажет вам Распространение и версию и будет немного более точным, чем доступ к файлам, которые могли или не могли быть изменены администратором или пакетом программного обеспечения. А также работает в нескольких дистрибутивах.
Для RHEL вы должны использовать:
cat /etc/redhat-release
lsb_release -i -r
-bash: lsb_release: команда не найдена. Тем не менее, cat /etc/redhat-release
Red Hat Enterprise Linux Server версии 5.6 (Tikanga)
Вы можете посмотреть содержимое / etc / redhat-release, которое будет выглядеть примерно так:
$ cat /etc/redhat-release
CentOS release 5.4 (Final)
Содержание отличается для реальной системы RHEL. Этот метод работает со всеми производными RedHat, включая CentOS, Fedora и другие.
lsb_release
это первое, что нужно попробовать, но так как это может быть не установлено, просмотр файлов - это хороший план Б.
Я предпочитаю использовать файл / etc / issue.
$ cat /etc/issue
Я видел много ситуаций, когда / etc / redhat-release был изменен для соответствия требованиям совместимости программного обеспечения (например, Dell или агенты управления HP).
/etc/issue
также работает на других ОС, таких как Debian и Ubuntu, и работает с ОС Linux, которые не соответствуют базе стандартов Linux, и с облегченными ОС, в которых не установлены утилиты lsb *.
/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
может быть заменен локальным администратором и, следовательно, не является надежным источником информации.
Самый надежный способ, когда 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, чтобы получить то, что вы хотите.
rpm -qa '(oraclelinux|sl|redhat|centos)-release(|-server)'
sl для Scientific Linux; если вы знаете правильное название для других перестроений RHEL, возможно, прокомментируйте ниже. Предупреждение - не всесторонне проверено.
rpm -qa | grep release
еще проще
Предполагая, что это действительно релиз 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).
rpm -q redhat-release
просто возвращается package redhat-release is not installed
за мной и uname -r
просто говорит мне о выпуске ядра.
Я предпочитаю 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
Мне очень нравится использовать /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)
Если вы хотите просто получить номера версий, то следующее будет максимально коротким и простым.
Протестировано на 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
Позднее прибытие к этому, но я весело провел время, пытаясь выяснить версию 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 ~]#
...