理想情况下,我想同时获得主要和次要版本,例如RHEL 4.0或RHEL 5.1等。
#1 楼
您可以在各种Linux发行版上使用lsb_release
命令:lsb_release -i -r
这将告诉您发行版和版本,并且比访问可能或可能会访问的文件更准确。尚未被管理员或软件包修改。以及跨多个发行版进行操作。
对于RHEL,您应使用:
cat /etc/redhat-release
#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
评论
在我的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