如何找出我使用的RHEL版本?


14

我在一个环境中工作,我们正在缓慢地将机器从Red Hat Enterprise Linux 5迁移到RHEL 6。

我需要一些脚本来使RHEL6机器上的操作与当前在RHEL5机器上进行的操作有所不同。

务实的解决方案是在运行时检查并在RHEL5上运行某些命令,在RHEL6上运行其他命令,并在两者上运行。

一个实际的例子是,我们正在使用环境模块,并且.bashrc其中包含module load git一行,但是在RHEL6计算机上,此命令错误:

RHEL6 system, git should be installed - not loading module

在modulefile中查找以下代码:

set redhatrelease [eval exec "cat /etc/redhat-release"]
if { [regexp -nocase {release 6} $redhatrelease] } {
  puts stderr "\n\t RHEL6 system, git should be installed - not loading module\n"
} else {
  ...
}

这似乎可以满足我的要求,但我希望可以做些更短的事情。

那么,在bash脚本中从RHEL6告诉RHEL5的最简单方法是什么?

理想情况下,它应该在不同的主要版本中均具有较强的鲁棒性,但可以容忍次要发行版本中的变化。


lsb_release工作?(-r应该只给您数字;也-a请尝试查看所有可用的信息)。如果是这样,那也是交叉销售商。
derobert

测试功能,而不是平台。今天,您的平台测试将在RHEL7出现时中断,并且可能在RHEL 6.next出现时之前中断,这可能是因为他们将EL5功能转发到6.x以使人们抱怨删除该功能。因此,如果您的脚本需要gitBash模块,则在调用它之前检查它是否存在。当/如果稍后出现,您的检查结果会更改,因此突然之间,该功能开始工作,而无需任何额外的努力。
沃伦·杨

@WarrenYoung-谢谢,但我不是sysasmin,仅是集中管理的RHEL部署的用户。我们所有的RHEL5机器本质上都是相同的映像,与所有RHEL6机器相同,因此对我而言,知道主要修订版本就足够了。考虑到我们现在仅处于计划迁移到RHEL6的阶段,我认为要担心RHEL7还需要一段时间。* 8')
Mark Booth

@derobert-不,RHEL5和6上lsb_release -r还包含其他文本,例如Release: 5.8。正如Dennis Kaarsemaker解释的那样,如果您lsb_release -rs改用它,您只会得到数字。
Mark Booth 2012年

另请参阅serverfault.com/questions/89654/what-version-of-rhel-am-i-using-有关未安装lsb时使用RPM进行操作的提示。
丹·普里兹

Answers:


10

您也可以使用该lsb_release命令。如果您已经确定是RHEL,则获取主要版本号为:

majversion=$(lsb_release -rs | cut -f1 -d.)

在Centos和Redhat上正常工作,在Redhat的Oracle Linux版本上失败。找不到lsb_release。
user959690 '16

现在这个答案似乎已经过时了。我只lsb_release在我的RHEL / CentOS 5计算机上找到。它无处可在6或7中
戴尔·安德森

您可能需要安装redhat-lsb-core软件包。
Dennis Kaarsemaker '17

15
if grep -q -i "release 6" /etc/redhat-release
then
  echo "running RHEL 6.x"
fi

这是我能想到的最简单的方法。


作品在CentOS和RHEL的每一个变化我经历了7具有从5我的库存,不像lsb_release它似乎只工作5
戴尔·安德森

4

采用 rpm -q |grep redhat-release-server

/etc/redhat-release文件可能已被管理员编辑,希望安装第三方软件而不执行实际的OS升级。


1
您是rpm -qa不是要说rpm -q?单独使用-q需要一个查询参数。
戴尔·安德森

@戴尔·安德森(Dale Anderson),谢谢,这是唯一为我工作的7.4版本,7.4直到我与-qa
布莱恩·托马斯

2

您可以使用/etc/issue文件而不是/etc/redhat-releasefile 扩展到多个Linux发行版。


2
major_version=$(rpm -q --queryformat '%{RELEASE}' rpm | grep -o [[:digit:]]*\$)

rpm -q --queryformat '%{RELEASE}' rpm打印类似的东西25.el7。然后,只需取最后一位数字即可。在RHEL 5,6,7和Fedora 24上进行了测试。

正如其他人指出的那样,lsb-version可能未安装。此外,至少有一个RHEL5系统未安装该redhat-release-server软件包。


谢谢,应该对此表示赞同,因为它始终有效,并且可以精确返回所需的数字。
phiphi

1

这是获得此结果的另一种更精确的方法。RHEL中的内核软件包包含字符串'elN',其中N代表操作系统的主要版本。因此,可以运行以下命令来标识RHEL的版本:

# uname -r | sed 's/^.*\(el[0-9]\+\).*$/\1/'

这将返回字符串“ el5”,“ el6”或“ el7”,具体取决于给定主机上的匹配字符串。


我混合使用了CentOS和RedHat(版本5-7),答案实际上适用于所有版本:uname -r | sed's /^.*(el [0-9] \ +)。* $ / \ 1 /'
WallStProg '18

0

我最终使用了jordanm的答案,但是增加了我自己的想法

因为我不想将所有的rhel6命令和所有的rhel5命令放在一起,而是将它们交织在各自的部分中,并且我不想每次想要切换时都必须复制此代码,所以我做过这个:

if   grep -q -i "release 6" /etc/redhat-release ; then
  rhel6only=1
elif grep -q -i "release 5" /etc/redhat-release ; then
  rhel5only=1
else
  echo "Running neither RHEL6.x nor RHEL 5.x !"
fi

这样,我可以做类似的事情:

# JDK
[ $rhel5only ] && module load java/6
[ $rhel6only ] && module load java/7

# Eclipse
module load eclipse

# Python
[ $rhel5only ] && module load python/2
[ $rhel6only ] && module load python/3

等等



0

这里提到的所有方法都依赖于文本文件,因此可能会产生误导。拥有正确访问权限的某人可能会更改/ etc / redhat-release,/ etc / issue等的内容,甚至只是混淆了此信息。一种更可靠的方法将涉及了解通常由Red Hat在每个RHEL版本上提供的内核版本:

  • RHEL4使用内核2.6.9-X
  • RHEL5使用内核2.6.18-X
  • RHEL6使用内核2.6.32-X
  • RHEL7使用内核3.10.0-X

直到现在,您始终可以通过运行来查找正在运行的内核发行版uname -r。您可以通过以下方式运行一些东西,从而获得更高的想象力:

uname -r | awk -F- '{print $1}'

如上表所示,这将提供有关内核的特定信息。如果其他发行版始终使用内核发行版,则您可能能够并行运行。


2
-1。管理员可以决定轻松地更新内核。
奥利弗·冈萨(OliverGondža),2015年

0

RHEL 6已添加/ etc / system-release-cpe文件。它包含一个- :分隔的字符串,可能看起来像

# cat /etc/system-release-cpe
cpe:/o:redhat:enterprise_linux:6computenode:ga:computenode

现在只需拉出字段$ 5和$ 7即可获得RHEL版本和RHEL变体。

# will be 7 or 6, does not work for 5 as file is missing there
RHEL_VERSION_MAJOR=$(cat /etc/system-release-cpe | awk -F: '{ print $5 }' | grep -o ^[0-9]*)
RHEL_VARIANT=$(cat /etc/system-release-cpe | awk -F: '{ print $7 }')

0

从RHEL 6开始,最简洁的方法是:

cat /etc/system-release-cpe | cut -d ':' -f5

如果要做到“最简洁”,则应cut -d: -f5 /etc/system-release-cpu避免使用UUOC。但是,问题是关于从RHEL 5过渡到6的问题。如果仅从RHEL 6开始有效,这是否不能满足问题要求?
roaima
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.