我正在使用哪个版本的RHEL?


151

从外壳程序中,没有root特权,如何确定正在运行的Red Hat Enterprise Linux版本?

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

Answers:


154

您可以lsb_release在各种Linux发行版上使用该命令:

lsb_release -i -r 

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

对于RHEL,您应该使用:

cat /etc/redhat-release

5
在我的CentOS 5.4盒上找不到命令:(
gbjbaanb,2009年

@gbjbaanb:奇怪的是,我在全新的5.4最小安装中对其进行了测试,并且效果很好...
Zypher

26
lsb_release -i -r-bash:lsb_release:找不到命令。但是, cat /etc/redhat-releaseRed Hat Enterprise Linux Server 5.6(Tikanga)
Tom

7
仅作记录:在RHEL 6.5最小安装中不起作用。找不到lsb_release命令。
sborsky 2014年

4
lsb_release不是轻量级的软件包,它引入CUPS以提供“ / usr / bin / lp”,从而引入一些pdf翻译规范,从而引入一些渲染库...
Jens Timmerman 2014年

142

您可以查看/ etc / redhat-release的内容,该内容类似于以下内容:

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

对于实际的RHEL系统,内容是不同的。该技术适用于所有RedHat衍生产品,包括CentOS,Fedora和其他产品。


14
这是对该问题最合适的答案。
fsoppelsa 2014年

lsb_release是第一件事,但是由于未安装该文件,所以计划B是一项好计划
小鸡

1
@chicks鉴于该问题要求对Redhat系统进行测试,并且默认情况下未在Redhat系统上安装lsb_release,而/ etc / redhat-release是默认安装的,因此lsb_release显然不是尝试的第一件事!
再见

@bye尝试第一件事(至少在我看来是这样),您总是首先尝试在所有发行版中都应该通用的东西,然后才切换到特定于发行版的解决方案。
丹尼斯·诺尔特

25

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

$ cat /etc/issue

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


1
/etc/issue它还可以在其他操作系统(例如Debian和Ubuntu)上运行,并且可以与不符合Linux Standards Base的Linux操作系统以及未安装lsb *实用程序的轻量级操作系统一起使用。
Stefan Lasiewski 2014年

5
这是不可靠的。显然,它/etc/issue是由agetty解析的,它用适当的信息替换了转义序列。如果只是cat这样,结果可能会令人难以理解。在Fedora上,有人得到了Fedora release 20 (Heisenbug) Kernel \r on an \m (\l),它告诉了您什么,但是在RHEL7上,有人得到了\S Kernel \r on an \m
David Tonhofer 2015年

请注意,它/etc/issue可能由本地管理员代替,因此不是可靠的信息来源。
larsk's

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工具的文本来获取所需的内容。


2
这似乎更通用一些: rpm -qa '(oraclelinux|sl|redhat|centos)-release(|-server)' sl用于Scientific Linux;如果您知道其他RHEL重建的正确名称,请在下面评论。警告-未经广泛测试。
丹·普里兹

1
是的,谢谢,请注意:不适用于RHEL Worstation。
lzap 2014年

一个注意事项-它的运行速度比解析/ etc / foo-release慢得多。
丹·普里兹

1
或者rpm -qa | grep release是更容易
沃伦

6

假设它确实是Red Hat版本(不是Centos):

rpm -q redhat-release

或者只是运行:

uname -r

并映射输出。RHEL4是2.6.9内核,RHEL5是2.6.18内核。如有必要,您可以将完整版本映射到Red Hat的特定更新版本(即2.6.9-89是RHEL5 U4)。


1
rpm -q redhat-release只是package redhat-release is not installed为我返回,并uname -r告诉我内核版本。
Mark Booth 2014年

哦!现在已经过去了,RHEL6是什么?RHEL7?嗯...这是答案:access.redhat.com/articles/3078#RHEL7
mika

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-releaseRPM版本中的文件:

# 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,Rel 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

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脚本。
尼尔·梅休'18

我还建议不要通过ssh启用root登录
Neil Mayhew '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.