Answers:
您可以lsb_release
在各种Linux发行版上使用该命令:
lsb_release -i -r
这将告诉您发行版和版本,并且比访问管理员或软件包可能修改或未修改的文件更准确。以及跨多个发行版工作。
对于RHEL,您应该使用:
cat /etc/redhat-release
lsb_release -i -r
-bash:lsb_release:找不到命令。但是, cat /etc/redhat-release
Red Hat Enterprise Linux Server 5.6(Tikanga)
您可以查看/ etc / redhat-release的内容,该内容类似于以下内容:
$ cat /etc/redhat-release
CentOS release 5.4 (Final)
对于实际的RHEL系统,内容是不同的。该技术适用于所有RedHat衍生产品,包括CentOS,Fedora和其他产品。
lsb_release
是第一件事,但是由于未安装该文件,所以计划B是一项好计划
我更喜欢使用/ etc / issue文件。
$ cat /etc/issue
我见过许多情况,其中/ etc / redhat-release已被修改以满足软件兼容性要求(例如,戴尔或HP的管理代理)。
/etc/issue
它还可以在其他操作系统(例如Debian和Ubuntu)上运行,并且可以与不符合Linux Standards Base的Linux操作系统以及未安装lsb *实用程序的轻量级操作系统一起使用。
/etc/issue
是由agetty解析的,它用适当的信息替换了转义序列。如果只是cat
这样,结果可能会令人难以理解。在Fedora上,有人得到了Fedora release 20 (Heisenbug) Kernel \r on an \m (\l)
,它告诉了您什么,但是在RHEL7上,有人得到了\S Kernel \r on an \m
。
/etc/issue
可能由本地管理员代替,因此不是可靠的信息来源。
未安装时 最可靠的方法是: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重建的正确名称,请在下面评论。警告-未经广泛测试。
rpm -qa | grep release
是更容易
假设它确实是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
只是package redhat-release is not installed
为我返回,并uname -r
告诉我内核版本。
我更喜欢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
我非常喜欢使用/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)
如果您只想获取版本号,则以下内容将尽可能简短。
在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
迟到了,但是尝试在几个远程节点上找出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 ~]#
...