Linux command to check distribution (distro) name and version

When working with an unknown server, the first task of a sys admin is to gather some information about the system, like what OS is it running, what version, what services are running and so on. And there is no single command that can detect distribution specific information consistently across all linux distros.

So in this post we are listing out some common commands that are used to detect distro specific information on linux.

1. lsb_release

The lsb_release command prints out distribution specific information about a linux distro.

On Ubuntu/debian based systems the command is available by default.

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 11.04
Release:        11.04
Codename:       natty

The lsb_release command is also available on CentOS/Fedora based systems, if the lsb core packages are installed.

# lsb_release -a
LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description:    CentOS release 6.4 (Final)
Release:        6.4
Codename:       Final

2. /etc/*-release files

The /etc directory contains a couple of files that contains information about the distribution. The following files are present on Ubuntu/Debian based systems.

$ cat /etc/issue
Ubuntu 13.10 \n \l

$ cat /etc/ 
Ubuntu 13.10

$ cat /etc/lsb-release 

$ cat /etc/os-release 
VERSION="13.10, Saucy Salamander"
PRETTY_NAME="Ubuntu 13.10"

The file os-release contains a whole lot of information about the system.

CentOS/Fedora based systems contain similar files but with different names.

# cat /etc/centos-release 
CentOS release 6.4 (Final)

# cat /etc/lsb-release

# cat /etc/redhat-release 
CentOS release 6.4 (Final)

# cat /etc/system-release
CentOS release 6.4 (Final)

Note that the lsb specific command and files are not present on CentOS by default. The redhat-lsb-core packages have to be installed to make lsb available. The /etc/lsb-release file does not print the distro information in a simple format.

Fedora contains the /etc/os-release file, similar to ubuntu

$ cat /etc/os-release 
VERSION="18 (Spherical Cow)"
PRETTY_NAME="Fedora 18 (Spherical Cow)"

3. cat /proc/version

The /proc/version file contains information about the kernel and some indication about the distro.

On a typical Ubuntu system the contents look like this

$ cat /proc/version
Linux version 2.6.38-13-generic ([email protected]) (gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) ) #52-Ubuntu SMP Tue Nov 8 16:53:51 UTC 2011

On a typical CentOS system the output looks as follows

# cat /proc/version 
Linux version 2.6.32-358.11.1.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Wed Jun 12 03:34:52 UTC 2013

As can be seen above, the version information about the distro is not very clear, although it might be possible to deduce the distro in use.

Output on a RHEL 5 system

#  cat /proc/version
Linux version 2.6.18-028stab070.14 ([email protected]) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Thu Nov 18 16:04:02 MSK 2010

4. uname -a

The uname command can also indicate which linux distro is in use, but gives very little information about it.

On Ubuntu, uname can clearly indicate the distribution name.

$ uname -a
Linux enlightened-desktop 2.6.38-13-generic #52-Ubuntu SMP Tue Nov 8 16:53:51 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

However on CentOS, the exact distro name is not revealed.

# uname -a
Linux dhcppc3 2.6.32-358.11.1.el6.x86_64 #1 SMP Wed Jun 12 03:34:52 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

Instead it reports the base distro name EL (Redhat).

Portable command

The following is an attempt to get a portable command for checking distro info across different linux systems.

$ cat /etc/[A-Za-z]*[_-][rv]e[lr]*

A simpler approach to make a portable command would be like this

$ lsb_release -a || cat /etc/redhat-release || cat /etc/*-release || cat /etc/issue

If one option fails, the command moves to the next one, until one of them works. The above command is not a well tested one and is expected to work fine only on ubuntu/debian and centos/fedora based systems.

Here is another example

$ cat /etc/*-release | uniq -u

That would print all unique lines from all /etc/*-release files. Works well on most distros.

Last Updated On : 30th December 2013

Subscribe to get updates delivered to your inbox

Leave a comment