I just faced an issue I thought should be easy to solve. I wanted to know which Linux distribution a bash script runs on. There exists a proposal of the FSB (Free Standards Group) to implement lsb_release which delivers all the info.Unfortunately it's not implemented by all Linux distributions so I installed various distributions on VMWare to get a clue how to write code to extract the Linux distribution. Finally I wrote a bash script and python script to extract the Linux distribution.


lsb_release would be the easiest way to find out the Linux distribution. According FSG there can exist two files on a Linux distribution:
1) /etc/lsb-release
2) /etc/distribution-release
Unfortunately lsb_release is not available on all distributions and the files in /etc are not following the rules. It seems all naming variations of the config file can be found with 
ls /etc/*[-_]{release,version} 


Finally I wrote following bash script and this python script to use all information available to derive the Linux distribution. It either uses lsb_release to find out the distro or extracts the distro name from the existing /etc/*[-_]{release,version} file by using the string starting after /etc/ and ending with - or _. Example: /etc/fedora-release exists => distro is fedora
The script was tested on a lot of distributions but will also work on most other distributions. Pls let me know if you run it successfully on another Linux distro and I update the following list of tested distros:
# opensuse             openSuSE 11.0 (no lsb_release) and 11.2 (lsb_release)
# fedora                    Fedora 12
# centos                   CentOS 5.4
# kubuntu                 Kubuntu 9.10
# debian                   Debian 5.0.3
# arch                        Arch
# slackware             Slackware
# mandriva               Mandriva 2009.1
# debian                   Knoppix 6.2
# linuxmint               Mint 8
For the most recent list of tested distributions see header comment in source code.
Welche Distribution besitze ich (Which distribution do I have) : List of files in /etc/ directory used by various Linux distributions
lsb_release man page :  Man page of the Free Standards Group
/etc/release equivalents for sundry Linux (and other Unix) distributions : List of files in /etc/ directory used by various Linux distributions
Other implementations:
  • tisu suggested following single liner which is a codesnipet from the alsa-info.sh:
DISTRO=`grep -ihs "buntu\|SUSE\|Fedora\|PCLinuxOS\|MEPIS\|Mandriva\|Debian\|Damn\|Sabayon\|Slackware\|KNOPPIX\|Gentoo\|Zenwalk\|Mint\|Kubuntu\|FreeBSD\|Puppy\|Freespire\|Vector\|Dreamlinux\|CentOS\|Arch\|Xandros\|Elive\|SLAX\|Red\|BSD\|KANOTIX\|Nexenta\|Foresight\|GeeXboX\|Frugalware\|64\|SystemRescue\|Novell\|Solaris\|BackTrack\|KateOS\|Pardus" /etc/{issue,*release,*version}` 
  • inxi contains a function which extracts the distro
Kommentar schreiben
Die eMail ist versteckt und nicht öffentlich sichtbar. Sie wird benutzt um über neue Kommentare zu informieren.

0 #2 framp 2011-12-28 16:18
You are right. But the main purpose of this script is to use a fallback mechanism if there is no lsb_release available. If it's available lsb_release is used. If every distro will install lsb_release per default this script will become obsolete.
0 #1 immarvin 2011-12-28 09:07
actually the lsb_release command has covered ur work.if u look into the lsb_release script, u can find that it get the distribution and version by reading /etc/*-[version|issue|release] file.unfortunately,the lsb is not the default base installation option for some linux distribution.