- How to find Linux Distribution name using shell script?
- 7 Answers 7
- 5 Linux Commands to Check Distro Name and Version
- 1. lsb_release
- 2. /etc/*-release files
- 3. cat /proc/version
- 4. uname -a
- Portable command
- One Comment
- How to get linux distribution name and version?
- Method 1: Using /etc/os-release file
- How to get Linux distribution name and version using /etc/os-release file
- Method 2: Using lsb_release command
- Method 3: Using /proc/version file
- Method 4: Using hostnamectl command
How to find Linux Distribution name using shell script?
I am writing a shell script in which I need the current operating system name to make it generic. Like:
if [ $Operating_System == "CentOS" ] then echo "CentOS"; # Do this elif [ $Operating_System == "Ubuntu" ] then echo "Ubuntu"; # Do that else echo "Unsupported Operating System"; fi
How will it be possible? Applying regular expression on lsb_release -a command or something else? Thanks..
Yup — lsb-release is definitely the most robust, generic way to do it. EXAMPLE: lsb_release -d|awk ‘
7 Answers 7
$ lsb_release -i Distributor ID: Fedora $ lsb_release -i | cut -f 2- Fedora
You can get the info from lsb_release :
i stands for distributor id.
For ex. It shows Ubuntu instead of Distributor Id: Ubuntu
You can get this information by running lsb_release —help or man lsb_release
EDIT 2: As pointed out by @Jean-Michaël Celerier, some distros prefer to add double quotes.
awk -F'=' '/^ID=/ < gsub("\"","",$2); print tolower($2) >' /etc/*-release 2> /dev/null
(awk -F'=' '/^ID=/ < print tolower($2) >' /etc/*-release | tr -d '"') 2> /dev/null
. can be used to remove them.
EDIT 1: as suggested by @S0AndS0, this is slightly better:
awk -F'=' '/^ID=/ ' /etc/*-release 2> /dev/null
This is almost perfect, no need for the piping between awk though as awk -F’=’ ‘/^ID=/
Small improvement: remove the quotes that some distros like opensuse add: awk -F’=’ ‘/^ID=/ < gsub("\"","",$2); print tolower($2) >‘ /etc/*-release 2> /dev/null
DISTRO=$( cat /etc/*-release | tr [:upper:] [:lower:] | grep -Poi '(debian|ubuntu|red hat|centos|nameyourdistro)' | uniq ) if [ -z $DISTRO ]; then DISTRO='unknown' fi echo "Detected Linux distribution: $DISTRO"
For almost all linux distros, cat /etc/issue will do the trick.
Edit: Obviously, no solution can apply to all distros, as distros are free to do as they please.
Further clarification: This is not guaranteed to work — nothing is — but in my experience, this is the method that most often works. Actually, it’s the only method that works consistently ( lsb_release , which was mentioned here, often produces command not found ).
/etc/issue is not meant for storing information about the operating system and may contain whatever text the admin likes. I would never trust it for detecting operating system or distribution.
Specifically, /etc/issue is a text file displayed by getty at the console login. It is not guaranteed to contain any meaningful information at all about the distribution.
this is not a reliable solution, since these are files for the administrator to put in whatever he wants.
5 Linux Commands to Check 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 distributions.
The command is different across Debian, CentOS and ArchLinux.
So in this post we are listing out some common commands that are used to detect distro specific information on linux. This includes the distro name and version.
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.
/etc/issue /etc/issue.net /etc/lsb-release /etc/os-release
$ cat /etc/issue Ubuntu 13.10 \n \l
$ cat /etc/issue.net Ubuntu 13.10
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=13.10 DISTRIB_CODENAME=saucy DISTRIB_DESCRIPTION="Ubuntu 13.10"
$ cat /etc/os-release NAME="Ubuntu" VERSION="13.10, Saucy Salamander" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 13.10" VERSION_ID="13.10" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
The file os-release contains a whole lot of information about the system.
CentOS/Fedora based systems contain similar files but with different names.
/etc/centos-release /etc/lsb-release /etc/redhat-release /etc/system-release
# cat /etc/centos-release CentOS release 6.4 (Final)
# cat /etc/lsb-release 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
# 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 NAME=Fedora VERSION="18 (Spherical Cow)" ID=fedora VERSION_ID=18 PRETTY_NAME="Fedora 18 (Spherical Cow)" ANSI_COLOR="0;34" CPE_NAME="cpe:/o:fedoraproject:fedora:18"
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]* squeeze/sid DISTRIB_ID=Ubuntu DISTRIB_RELEASE=11.04 DISTRIB_CODENAME=natty DISTRIB_DESCRIPTION="Ubuntu 11.04"
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.
That would print all unique lines from all /etc/*-release files. Works well on most distros.
A Tech Enthusiast, Blogger, Linux Fan and a Software Developer. Writes about Computer hardware, Linux and Open Source software and coding in Python, Php and Javascript. He can be reached at [email protected] .
One Comment
- Tony August 10, 2021 at 10:10 pm Hi, Nice article.
I personaly use this command in one of my scripts: (lsb_release -a 2>/dev/null || cat /etc/redhat-release || cat /etc/*-release || cat /etc/issue) | grep -i “centos\|ubuntu\|red *hat\|fedora\|debian\|slackware\|suse\|arch\|deepin\|kubuntu\|alpine” -o | sort -f | uniq -i -u It’s not getting all the Distributions out there, but enough for my use. Cheers,
Tony
How to get linux distribution name and version?
In a Linux environment, it’s important to know the distribution name and version for various reasons such as compatibility issues with software, managing system updates and upgrades, and troubleshooting. There are various methods to retrieve the Linux distribution name and version, which are discussed below.
Method 1: Using /etc/os-release file
How to get Linux distribution name and version using /etc/os-release file
Here are the steps to get the Linux distribution name and version using the /etc/os-release file:
- Open the terminal and enter the following command to view the contents of the /etc/os-release file:
NAME="Ubuntu" VERSION="20.04.1 LTS (Focal Fossa)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 20.04.1 LTS" VERSION_ID="20.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=focal UBUNTU_CODENAME=focal
- To get the Linux distribution name, use the grep command to filter the output of the /etc/os-release file:
grep '^NAME' /etc/os-release | awk -F= '< print $2 >' | tr -d '"'
grep '^VERSION_ID' /etc/os-release | awk -F= '< print $2 >' | tr -d '"'
That’s it! You now know how to get the Linux distribution name and version using the /etc/os-release file.
Method 2: Using lsb_release command
The lsb_release command is a utility for obtaining information about the Linux distribution you are using. To get the Linux distribution name and version using lsb_release command, follow the steps below:
- Open the terminal on your Linux machine.
- Type the following command:
This command will display all the information about the distribution name, version, codename, and other details.
Distributor ID: Ubuntu Description: Ubuntu 20.04.2 LTS Release: 20.04 Codename: focal
That’s it! You have successfully obtained the Linux distribution name and version using the lsb_release command.
Method 3: Using /proc/version file
To get the name and version of your Linux distribution using the /proc/version file, follow these steps:
- Open your terminal.
- Type the following command to view the contents of the /proc/version file:
Linux version 5.8.0-43-generic (buildd@lgw01-amd64-051) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #49~20.04.1-Ubuntu SMP Fri Feb 5 09:57:56 UTC 2021
- From this output, you can extract the name and version of your Linux distribution using the cut command. For example, to get the distribution name, type:
cat /proc/version | cut -d " " -f1
cat /proc/version | cut -d " " -f3
That’s it! You now know how to get the name and version of your Linux distribution using the /proc/version file.
Method 4: Using hostnamectl command
To get the Linux distribution name and version using the hostnamectl command, follow these steps:
- Open the terminal on your Linux system.
- Type the following command and press Enter:
Operating System: Ubuntu 20.04.2 LTS Kernel: Linux 5.4.0-77-generic Architecture: x86-64
4. In this example, the operating system is Ubuntu 20.04.2 LTS. You can also use the `hostnamectl` command with specific options to get more detailed information about the operating system. For example: - To get only the distribution name, use the `--pretty` option:
- To get only the distribution version, use the `--static` option:
- To get both the distribution name and version, use the `--pretty` and `--static` options together:
hostnamectl —pretty —static
Each of these commands will output the corresponding information about your Linux distribution.