Як я можу визначити, з якою версією Red Hat Enterprise Linux я працюю, з оболонки та без привілеїв root?
В ідеалі я хотів би отримати як основну, так і другорядну версію, наприклад RHEL 4.0 або RHEL 5.1 тощо.
Як я можу визначити, з якою версією Red Hat Enterprise Linux я працюю, з оболонки та без привілеїв root?
В ідеалі я хотів би отримати як основну, так і другорядну версію, наприклад 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
це перше, що потрібно спробувати, але оскільки це може бути не встановлено, дивлячись на файли, це гарний план B.
Я вважаю за краще використовувати файл / etc / issue.
$ cat /etc/issue
Я бачив багато ситуацій, коли / etc / redhat-release було змінено на відповідність вимогам сумісності програмного забезпечення (наприклад, агенти управління Dell або HP).
/etc/issue
також працює і на інших ОС, таких як Debian & Ubuntu, і працює з ОС Linux, які не відповідають базі стандартів Linux, і легких ОС, на яких не встановлені утиліти lsb *.
/etc/issue
, мається на увазі проаналізувати agetty , який замінює послідовності втечі належною інформацією. Якщо ви просто 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 ~]#
...