题 我使用的是什么版本的RHEL?


从shell和没有root权限,我如何确定我正在运行的Red Hat Enterprise Linux版本?

理想情况下,我想获得主要版本和次要版本,例如RHEL 4.0或RHEL 5.1等。


142
2017-12-01 01:59






答案:


你可以使用 lsb_release 各种Linux发行版上的命令:

lsb_release -i -r 

这将告诉您分发和版本,并且比访问管理员或软件包可能修改或未修改的文件更准确一些。以及跨多个发行版工作。

对于RHEL,您应该使用:

cat /etc/redhat-release

144
2017-12-01 06:47



在我的CentOS 5.4盒子上找不到命令:( - gbjbaanb
@gbjbaanb:这很奇怪我在一个新的5.4最小安装上测试它并且它工作得很好...... - Zypher
lsb_release -i -r -bash:lsb_release:找不到命令。然而, cat /etc/redhat-release 红帽企业Linux服务器5.6版(Tikanga) - Tom
仅供记录:不适用于RHEL 6.5最小安装。命令lsb_release无处可寻。 - sborsky
lsb_release不是一个轻量级的包,它提取CUPS来提供'/ usr / bin / lp',这会引入一些pdf转换goop,它会引入一些渲染库...... - Jens Timmerman


你可以查看/ etc / redhat-release的内容,它们看起来像这样:

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

实际RHEL系统的内容不同。这种技术适用于所有RedHat衍生产品,包括CentOS,Fedora等。


140
2017-12-01 02:13



这是对这个问题最合适的答案。 - fsoppelsa
lsb_release 是第一个尝试,但因为可能没有安装查看文件是一个很好的计划B. - chicks
@chicks鉴于问题要求测试Redhat系统,并且默认情况下没有在redhat系统和/ etc / redhat-release上安装lsb_release,那么lsb_release显然不是第一个尝试的东西! - bye
@bye这是第一个尝试(至少在我看来),你总是首先尝试在所有发行版上应该是常见的东西,然后只有你切换到特定于发行版的解决方案。 - Dennis Nolte


我更喜欢使用/ etc / issue文件。

$ cat /etc/issue

我见过许多情况,其中/ etc / redhat-release已被修改以满足软件兼容性要求(例如戴尔或惠普的管理代理)。


24
2017-12-01 05:35



/etc/issue 也适用于其他操作系统,如Debian和Ubuntu,适用于不符合Linux标准库的Linux操作系统,以及未安装lsb *实用程序的轻量级操作系统。 - Stefan Lasiewski
这不可靠。显然地 /etc/issue 意味着被解析 的agetty,用适当的信息替换转义序列。如果你只是 cat 它,结果可能没有给人留下深刻印象。在Fedora上,人们会得到 Fedora release 20 (Heisenbug) Kernel \r on an \m (\l),它告诉你一些东西,但在RHEL7,一个刚刚得到 \S Kernel \r on an \m。 - David Tonhofer
注意 /etc/issue 可能会被本地管理员取代,因此不是可靠的信息来源。 - larsks


最可靠的方式 什么时候  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工具来获得你想要的。


12
2018-06-05 11:15



这似乎更有效: rpm -qa '(oraclelinux|sl|redhat|centos)-release(|-server)'  sl适用于Scientific Linux;如果您知道其他RHEL重建的正确名称,请在下面发表评论。警告 - 未经过广泛测试。 - Dan Pritts
是的,谢谢,一个注意事项:不适用于RHEL Worstation。 - lzap
一个注意事项 - 这比解析/ etc / foo-release运行速度慢很多。 - Dan Pritts
要么 rpm -qa | grep release 更容易 - warren


假设它真的是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)。


5
2017-12-01 13:36



rpm -q redhat-release 回来 package redhat-release is not installed 对我来说,和 uname -r 只是告诉我内核发布。 - Mark Booth
哦!现在时间过去了,什么是RHEL6? RHEL7?哼......以下是答案: access.redhat.com/articles/3078#RHEL7 - mika


我非常喜欢使用 /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)

1
2018-01-23 20:28



有趣,有用。不幸的是,RHEL6上没有这样的价值,因此目前价值有限。 - Dan Pritts


如果你想获得版本号,下面的内容就像我能得到的一样简短。

在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

0
2018-04-06 00:44





迟到了,但我很高兴试图找出几个远程节点上的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 ~]#

...

0
2017-10-05 12:31



如果你要在很多机器上做远程操作,我强烈建议使用Ansible而不是手动滚动的bash脚本。 - Neil Mayhew
我还建议不要通过ssh启用root登录 - Neil Mayhew


我更喜欢 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

0
2017-10-04 07:14