views:

545

answers:

7

Moved to http://superuser.com/questions/80251/how-to-know-which-linux-distribution-im-using

How to know which Linux Distribution I'm using?

uname -a gives Linux xxxxxx.net 2.6.9-42.0.3.EL.wh1smp #1 SMP Fri Aug 14 15:48:17 MDT 2009 i686 i686 i386 GNU/Linux How can I know this is Ubuntu/Debian/Fedora or Redhat?

I uses /etc/init.d/serviced restart for restarting serevices, seems it is not Redhat family

Update:

[itflux][~]$ cat /etc/issue
cat: /etc/issue: No such file or directory
[itflux][~]$ cat /etc/issue.net
cat: /etc/issue.net: No such file or directory
[itflux][~]$ lsb_release -a
-sh: lsb_release: command not found
[itflux][~]$ cat /etc/*-release
cat: /etc/*-release: No such file or directory
[itflux][~]$ cat /etc/*-version
cat: /etc/*-version: No such file or directory
[itflux][~]$ cat /etc/*release
cat: /etc/*release: No such file or directory
[itflux][~]$ cat /etc/*_release
cat: /etc/*_release: No such file or directory
[itflux][~]$ cat /etc/*version
cat: /etc/*version: No such file or directory
[itflux][~]$
+4  A: 

Try this:

cat /etc/*-release

You could also try /etc/*-version

Dumb Guy
[itflux][~]$ cat /etc/*-releasecat: /etc/*-release: No such file or directory[itflux][~]$ cat /etc/*-versioncat: /etc/*-version: No such file or directory
Mithun P
+5  A: 

/etc/issue or /etc/issue.net give a good clue. Newer distros provide /etc/lsb-release which make it easier to determine exact strings progmatically, i.e. distro name / major & minor release / web site, etc.

In the absence of /etc/lsb-release, its much more difficult, hence the creation of lsb-release.

As Alok said, it looks like you are on a rather ancient (or extremely sparse) system. I don't think this is a case that you can (reliably) progmatically determine with a few lines of code.

If all else fails, check to see what kind of package manager is in use (apt / rpm / others), check to see if /etc/init.d is a symlink (rpm / RH distros) or a directory (debian based distros) .. and you have a pretty good clue as to what you can expect to be present in the root file system as far as structure.

You can't please everyone :)

Tim Post
Debian and derivatives (Ubuntu) also have /etc/lsb-release. They also have the program lsb_release that will give you specific information (you don't have to parse the text file).
MichaelM
@MichaelM: You're reading a file either way .. either directly opening /etc/lsb-release or scraping the output of lsb_release (either way, you're still reading a file even if its stdout). If doing this progmatically, its best to just parse the file yourself (imho) .. fewer moving parts that may or may not be present :)
Tim Post
[itflux][~]$ cat /etc/issuecat: /etc/issue: No such file or directory[itflux][~]$ cat /etc/issue.netcat: /etc/issue.net: No such file or directory[itflux][~]$ lsb_release -a-sh: lsb_release: command not found
Mithun P
I uses /etc/init.d/serviced restart for restarting serevices, seems it is not Redhat familyBut apt-get and rpm are both giving command not found message
Mithun P
+3  A: 
cat /etc/issue

for Ubuntu

apphacker
[itflux][~]$ cat /etc/issuecat: /etc/issue: No such file or directory[itflux][~]$ cat /etc/issue.netcat: /etc/issue.net: No such file or directory
Mithun P
+6  A: 

If you have lsb_release command,

lsb_release -a

will tell you (or just use lsb_release -i).

lsb_release is in Linux Standard Base Core Specification.

Edit: Looks like you're on a Red Hat system. A google search on your uname output suggests so. This is not programmatic, of course!

Alok
$ lsb_release -a-sh: lsb_release: command not found
Mithun P
Judging from this and your other answers, looks like you have a really old linux system.
Alok
lsb_relase was created to ease the pain of determining the distro easily from within a program. A lot of systems out in the wild and still in use lack this altogether.
Tim Post
You're right. If someone is using that old a distribution, the first step should probably be to upgrade to a more recent version! :-)
Alok
+1  A: 

EL stands for Enterprise Linux in this case, so I think RedHat or a clone (like CentOS). I don't know a good way to programatically find out what distro you're on; there's a few different clues for each one.

cat  /etc/redhat_release
cat /etc/debian_version

is a good start. (Note the Ubuntu doesn't modify /etc/debian_version when they pull changes from Debian, so my Ubuntu Karmic system has squeeze/sid in debian_version.)

Edit: forgot about lsb. Good call, Tim Post and Alok. The whole point of LSB is to give distro-independent ways to do things.

Peter Cordes
[itflux][~]$ cat /etc/redhat_releasecat: /etc/redhat_release: No such file or directory[itflux][~]$ cat /etc/debian_versioncat: /etc/debian_version: No such file
Mithun P
EL could also be SuSE's Enterprise Linux, aka sles. It uses RPM like RedHat. Don't remember how to check for it.
Peter Cordes
Oh yeah, Suse has some commands on top of rpm. If you have yast2 or yum, you're on SuSE. Look in /etc/ for *suse* or *novell*.
Peter Cordes
There is no suse or novell folders under /etc[itflux][~]$ yum-sh: yum: command not found
Mithun P
I googled for your kernel version, and came up with surprisingly few results. http://rpm.pbone.net/index.php3/stat/4/idpl/3331503/com/kernel-2.6.9-42.0.3.EL.i586.rpm.html does indicate that it's RHEL or CentOS. (CentOS = RHEL without the support contract. Same versions of everything. Not sure if they manage to make all their binaries identical, but they try.)
Peter Cordes
+1  A: 

Seems like here's some info:

> cat /etc/issue
Welcome to SUSE LINUX Enterprise Server 9 (i586) - Kernel \r (\l).

> uname -a
Linux boxname 2.6.5-7.244-smp #1 SMP Mon Dec 12 18:32:25 UTC 2005 i686 athlon i386 GNU/Linux

> cat /etc/*-release
SUSE LINUX Enterprise Server 9 (i586)
VERSION = 9
PATCHLEVEL = 3
stefanB
Whohooo someone does not like the answer, let's hear your opinion ... I've quite often tried to figure out what's running on a box, these are some of the things I look at, it tells you the kernel version, sometimes even the distro name ...
stefanB
[itflux][~]$ cat /etc/issuecat: /etc/issue: No such file or directory[itflux][~]$ cat /etc/issue.netcat: /etc/issue.net: No such file or directory[itflux][~]$ lsb_release -a-sh: lsb_release: command not found[itflux][~]$ cat /etc/*-releasecat: /etc/*-release: No such file or directory[itflux][~]$ cat /etc/*-versioncat: /etc/*-version: No such file or directory[itflux][~]$
Mithun P
okay so you have not so standard linux, which is nothing new, but I assume at least `uname -a` give you some response ...
stefanB
+2  A: 

A list the release filenames for the most common distros: Release files

And a function that might help you: Shell script

pcp