From the shell and without root privileges, how can I determine what Red Hat Enterprise Linux version I'm running?
Ideally, I'd like to get both the major and minor release version, for example RHEL 4.0 or RHEL 5.1, etc.
From the shell and without root privileges, how can I determine what Red Hat Enterprise Linux version I'm running?
Ideally, I'd like to get both the major and minor release version, for example RHEL 4.0 or RHEL 5.1, etc.
You can use the lsb_release
command on various Linux distributions:
lsb_release -i -r
This will tell you the Distribution and Version and is a little bit more accurate than accessing files that may or may not have been modified by the admin or a software package. As well as working across multiple distros.
For RHEL, you should use:
cat /etc/redhat-release
You can look at the contents of /etc/redhat-release, which will look something like this:
$ cat /etc/redhat-release
CentOS release 5.4 (Final)
The contents are different for an actual RHEL system. This technique works on all RedHat derivatives, including CentOS, Fedora, and others.
I prefer to use the /etc/issue file.
$ cat /etc/issue
I've seen many situations where /etc/redhat-release has been modified to meet software compatibility requirements (Dell or HP's management agents, for instance).
The most reliable way when lsb_release
is not installed is:
# rpm -q --queryformat '%{VERSION}' redhat-release-server
6Server
# rpm -q --queryformat '%{RELEASE}' redhat-release-server
6.4.0.4.el6
On minimal installs, lsb_release
is missing.
To get this working also with Red Hat clones (credit goes to comments):
# rpm -q --queryformat '%{VERSION}' $(rpm -qa '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)')
Or, as a single command (rather than two "rpm"'s being executed):
# rpm -qa --queryformat '%{VERSION}\n' '(redhat|sl|slf|centos|oraclelinux)-release(|-server|-workstation|-client|-computenode)'
Use sed
/cut
and other text manipulating UNIX tools to get what you want.
Assuming it truly is a Red Hat release (not Centos):
rpm -q redhat-release
Or just run:
uname -r
And map the output. 2.6.9 kernels are RHEL4, 2.6.18 kernels are RHEL5. If necessary, you can map the full version to the specific update releases from Red Hat (i.e. 2.6.9-89 is RHEL5 U4).
I prefer 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
I quite like using the /etc/os-release
file, which is in the 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
This file can be sourced in scripts, like:
$ source /etc/os-release
$ echo $NAME
CentOS Linux
$ echo $VERSION
7 (Core)
If you want to just get the version numbers the following is about as short and simple as I can get it.
Tested on rhel 6.7, rhel 7.2, debian 8.3 and ubuntu 14.04:
lsb_release -s -r | cut -d '.' -f 1
For a practical example, say you want to test for the distribution major and minor version and do things based on that:
#!/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
A late arrival to this, but I had fun trying to figure out the RHEL version on several remote nodes. So, if you have a batch of servers that use the same password (I know, I know...) here is a quick and dirty to check the RedHat version:
Create an expect script
vim server-version.sh
Expect script to check major RedHat version on multiple remote hosts
#!/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"
Run the script for all your nodes
[root@home ~]#
for server in server1 server2 server3 server4 server5; do echo -e "$server: \c"; /root/server-version.sh $server; echo; echo; done;
Output
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 ~]#
...