Determine Linux Version.

Apart from the obvious, uname command, is there anyway to determine which Linux distribution and version of the distribution has been installed?

$ cat /proc/version

There is no standard way.

Catting /proc/version or uname will only show you information that has been set for compile into the kernel. Only the major distributions will put some special marks for identification, in the form such as custom kernel version tag or gcc version string. But this is not necessarily true especially if the kernel is a self compiled kernel.

For example, here is the /proc/version from my Slackware server:

user@live:~$ cat /proc/version 
Linux version 2.4.26-local (root@live) (gcc version 3.3.4) #1 SMP Sat Jan 15 09:44:04 HKT 2005

Nothing indicates it's Slackware. Many distributions put its version information in the form of a file in /etc, so you can use that as a heuristic to find out.

For instance, for a few old machines for which I currently have access:

Slackware: /etc/slackware-version
Mandrake: /etc/mandrake-release
Red Hat: /etc/redhat-release
Fedora: /etc/fedora-release

This seems to be some sort of standard, all the SuSE versions we have, have the following file also.

cat /etc/SuSE-release

Good to see the other distributions have a similar file.

Check this post- which machine. The script in that detects your OS version.

Yet another script I found on the net.

 # Determine the Linux distribution and version that is being run.
   #
   # Check for GNU/Linux distributions
   if [ -f /etc/SuSE-release ]; then
     DISTRIBUTION="suse"
   elif [ -f /etc/UnitedLinux-release ]; then
     DISTRIBUTION="united"
  elif [ -f /etc/debian_version ]; then
    DISTRIBUTION="debian"
  elif [ -f /etc/redhat-release ]; then
    a=`grep -i 'red.*hat.*enterprise.*linux' /etc/redhat-release`
    if test $? = 0; then
      DISTRIBUTION=rhel
    else
      a=`grep -i 'red.*hat.*linux' /etc/redhat-release`
      if test $? = 0; then
        DISTRIBUTION=rh
      else
        a=`grep -i 'cern.*e.*linux' /etc/redhat-release`
        if test $? = 0; then
          DISTRIBUTION=cel
        else
          a=`grep -i 'scientific linux cern' /etc/redhat-release`
          if test $? = 0; then
            DISTRIBUTION=slc
          else
            DISTRIBUTION="unknown"
          fi
        fi
      fi
    fi
  else
    DISTRIBUTION="unknown"
  fi

  ###    VERSION=`rpm -q redhat-release | sed -e 's#redhat[-]release[-]##'`

  case ${DISTRIBUTION} in
  rh|cel|rhel)
      VERSION=`cat /etc/redhat-release | sed -e 's#[^0-9]##g' -e 's#7[0-2]#73#'`
      ;;
  slc)
      VERSION=`cat /etc/redhat-release | sed -e 's#[^0-9]##g' | cut -c1`
      ;;
  debian)
      VERSION=`cat /etc/debian_version`
      if [ ${VERSION} = "testing/unstable" ]; then
          # The debian testing/unstable version must be translated into
          # a numeric version number, but no number makes sense so just
          # remove the version all together.
          VERSION=""
      fi
      ;;
  suse)
      VERSION=`cat /etc/SuSE-release | grep 'VERSION' | sed  -e 's#[^0-9]##g'`
      ;;
  united)
      VERSION=`cat /etc/UnitedLinux-release`
      ;;
  *)
      VERSION='00'
      ;;
  esac;

  echo ${DISTRIBUTION}${VERSION}

Thanks all.

Here is another way from my system (but may not always be effective):

>cat /etc/issue
Red Hat Enterprise Linux AS release 3 (Taroon)
Kernel \r on an \m

This is the banner which is displayed for the login getty.

I would not count on /etc/issue. I would venture to guess that possibly you could apply a major update and /etc/issue never changes. The file /etc/issue is sort of like a message of the day type file. On a SuSe machine I updated from 8.2 to 9.1 a year or so ago, that type of file did not update and the login prompt greeted you with an 8.2 banner despite the machine having been updated.

Just something to think about. The release and version files did update in my case but I would say that there is a chance these could be wrong also. But the /etc/issue would be lowest on my list to check.

Yes, totally agree it is the least reliable source, but still a possibility if all else fails.