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

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

#1 楼

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

lsb_release -i -r 


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

对于RHEL,您应使用:

cat /etc/redhat-release


评论


在我的CentOS 5.4机器上找不到命令:(

– gbjbaanb
09年12月1日在17:04

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

–Zypher
09年12月1日在18:25

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

–汤姆
2011年5月10日12:12



仅作记录:在RHEL 6.5最小安装上不起作用。找不到lsb_release命令。

– Borssky
2014年2月6日在9:18

lsb_release不是轻量级的程序包,它引入CUPS以提供“ / usr / bin / lp”,从而引入一些pdf翻译规范,从而引入一些渲染库...

–詹斯·蒂默曼(Jens Timmerman)
2014年2月21日在8:39

#2 楼

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

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


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

评论


这是对该问题最合适的答案。

–fsoppelsa
2014年2月19日在17:01

首先尝试使用lsb_release,但是由于可能没有安装lsb_release,因此查看文件是一个不错的计划B。

–小鸡
2015年7月8日在16:07

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

–再见
17年6月8日在16:27



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

–丹尼斯·诺尔特
18-10-4在7:52

#3 楼

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

$ cat /etc/issue


我已经看到很多情况下已修改/ etc / redhat-release以满足软件兼容性要求(例如,戴尔或惠普的管理代理)。

评论


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

– Stefan Lasiewski
2014-10-29 21:29



这是不可靠的。显然,/ etc / issue是由agetty解析的,agety用适当的信息替换了转义序列。如果您只是喜欢它,结果可能会令人难以理解。在Fedora上,一个\ m(\ l)上有Fedora版本20(Heisenbug)内核\ r,这告诉了您一些知识,但是在RHEL7上,一个人在\ m上却获得了\ S内核\ r。

– David Tonhofer
15年1月16日在20:30

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

–幼虫
18-10-4在11:42

#4 楼

不安装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重建的正确名称,请在下面评论。警告-未经广泛测试。

–丹·普里兹(Dan Pritts)
13年8月8日在15:47

是的,谢谢,请注意:不适用于RHEL Workstation。

–lzap
2014年2月6日14:15

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

–丹·普里兹(Dan Pritts)
2015年3月11日15:10

或rpm -qa | grep发布更加容易

–沃伦
15年3月16日在18:40

#5 楼

假设它确实是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)。

评论


rpm -q redhat-release仅返回软件包redhat-release没有为我安装,而uname -r仅告诉我内核版本。

– Mark Booth
2014年8月20日下午13:31

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

–米卡
2014年11月12日14:53

#6 楼

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


#7 楼

我非常喜欢使用RPM发行版中的/etc/os-release文件:

# 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上还不存在如此有限的价值。

–丹·普里兹(Dan Pritts)
18年1月24日在2:19

#8 楼

如果您只想获取版本号,则以下内容将尽可能地简短。

在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


#9 楼

迟到了,但是尝试找出几个远程节点上的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脚本。

–尼尔·梅休(Neil Mayhew)
18年1月31日在16:53

我还建议不要通过ssh启用root登录

–尼尔·梅休(Neil Mayhew)
18年1月31日在16:54