216

Is there a way to determine what version (distribution & kernel version, I suppose) of Linux is running (from the command-line), that works on any Linux system?

1
  • I'd just like to point out for the record how stupid it is that this is a question which needs asking. This is really quite an indictment on the state of every linux distro.
    – iono
    Jul 3, 2023 at 12:43

9 Answers 9

272

The kernel is universally detected with uname:

$ uname -or
2.6.18-128.el5 GNU/Linux

There really isn't a cross-distribution way to determine what distribution and version you're on. There have been attempts to make this consistent, but ultimately it varies, unfortunately. LSB tools provide this information, but ironically aren't installed by default everywhere. Example on an Ubuntu 9.04 system with the lsb-release package installed:

$ lsb_release -irc
Distributor ID: Ubuntu
Release:        9.04
Codename:       jaunty

Otherwise, the closest widely-available method is checking /etc/something-release files. These exist on most of the common platforms, and on their derivatives (i.e., Red Hat and CentOS).

Here are some examples.

Ubuntu has /etc/lsb-release:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=9.04
DISTRIB_CODENAME=jaunty
DISTRIB_DESCRIPTION="Ubuntu 9.04"

But Debian has /etc/debian_version:

$ cat /etc/debian_version
5.0.2

Fedora, Red Hat and CentOS have:

Fedora: $ cat /etc/fedora-release
Fedora release 10 (Cambridge)

Red Hat/older CentOS: $ cat /etc/redhat-release
CentOS release 5.3 (Final)

newer CentOS: $ cat /etc/centos-release
CentOS Linux release 7.1.1503 (Core)

Gentoo:

$ cat /etc/gentoo-release
Gentoo Base System release 1.12.11.1

I don't have a SUSE system available at the moment, but I believe it is /etc/SuSE-release.

Slackware has /etc/slackware-release and/or /etc/slackware-version.

Mandriva has /etc/mandriva-release.

For most of the popular distributions then,

$ cat /etc/*{release,version}

will most often work. Stripped down and barebones "server" installations might not have the 'release' package for the distribution installed.

Additionally, two 3rd party programs you can use to automatically get this information are Ohai and Facter.

Note that many distributions have this kind of information in /etc/issue or /etc/motd, but some security policies and best practices indicate that these files should contain access notification banners.

Related: How to find out version of software package installed on the node?, .

9
  • 3
    Lol here I was thinking to suggest: look for About!
    – Ivo Flipse
    Jul 22, 2009 at 19:40
  • 2
    Slackware has /etc/slackware-version
    – Ken Keenan
    Jul 22, 2009 at 19:45
  • Thanks Ken, I don't have a slackware system either.
    – jtimberman
    Jul 22, 2009 at 19:56
  • 4
    IOW: ls /etc/*{release,version} and examine whatever comes back...
    – freiheit
    Jul 22, 2009 at 20:11
  • 2
    Most also have /etc/issue Jul 23, 2009 at 6:42
45

You could also try:

$ cat /etc/issue

It usually (not always, though) will tell you what distribution you are using. /etc/issue is the file used for the login screen.

3
  • 2
    This is the only one that nailed it for me on a shared Media Temple server. Thanks!! Feb 8, 2013 at 18:03
  • 2
    Ha, on RedHat, that's just \S[newline]Kernel \r on an \m
    – ruffin
    Feb 2, 2015 at 20:21
  • For example for Linux Mint Dec 11, 2020 at 23:02
20

Kernel: uname -a

1
  • +1. For similar systems, like MinGW, the "-a" is required to get the version information, for example, "MINGW32_NT-5.1 LAP065 1.0.17(0.48/3/2) 2011-04-24 23:39 i686 Msys". May 2, 2012 at 8:39
17
cat /etc/os-release

at a minimum for Ubuntu, Fedora and OpenSUSE.

Does not work for OS X at least until 10.9 (Mavericks). Use sw_vers instead.

OpenSUSE had cat /etc/SuSE-release up until 13.1 but is deprecated in favour of os-release.

Redhat 6.1 has cat /etc/redhat-release

1
14

lsb_release -a, when available, is useful.

13

cat /proc/version found me Red Hat on a shared VPS.

6

Kernel: uname -r

Distro: lsb_release -a

These will run on most Linux systems

5

One-liner

lsb_release -a && uname -r
2
  • 1
    This might be more appropriate as a comment on Albert Z's answer.
    – fixer1234
    Jan 29, 2018 at 21:52
  • 1
    mighty answer to conclude all answers! I must upvote for the effort :)
    – B.Kocis
    Mar 27, 2018 at 13:17
3

This issue can also be solved using Python with the platform module:

Using platform() function:

python3 -c 'import platform; print(platform.platform())'
# Linux-6.1.0-9-amd64-x86_64-with-glibc2.36

The above command returns a single string identifying the underlying platform with as much useful information as possible.

Or using uname() function:

python3 -c 'import platform; print(platform.uname())'
# uname_result(system='Linux', node='debian', release='6.1.0-9-amd64', version='#1 SMP PREEMPT_DYNAMIC Debian 6.1.27-1 (2023-05-08)', machine='x86_64')

The above command returns a namedtuple() containing five attributes: system, node, release, version and machine.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .