Is there any way to find out which Linux Distribution is used? - linux

I would like to show the user some help on specific operations in my program of the form:
Please type "apt-get install foobar" to install the foobar feature.
Is there anything to do this or do i have to leave it to the user and offer a dozend choices from Red Hat, Suse, Debian/Ubuntu, Mandriva, Slackware, Gentoo ....

cat /etc/lsb-release
root#pierr-desktop:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.10
DISTRIB_CODENAME=intrepid
DISTRIB_DESCRIPTION="Ubuntu 8.10"

lsb_release -a might help on debian and apparented.

No, there is no generic way to find out which Linux distribution you are running on.
There is the lsb_release command, which is specified in the Linux Standard Base specification. But obviously this command is only present on LSB-compliant distributions, and many smaller or specialized distributions are not LSB-compliant. (For example, the distribution I am running on my FritzBox router is not.)
And if you are assuming an LSB-compliant distribution anyway, then why not simply package your application as an LSB package? That way it works the same on all LSB-compliant distributions.

You could give
cat /etc/issue
a try too

Given that Linux can be built starting with one system and morphed into another, you may not be able to tell precisely which it currently is. Some distribution provide the lsb tools if they are LSB compliant, so that might help.
Some distributions provide a file /etc/dist-release. For example, I have a file /etc/arch-release that is empty.
You might also execute:
uname -a
That might indicate the distribution the kernel was built for, but that might be a long shot. My Arch linux kernel has no mention of Arch, but I believe my Gentoo install indicates "Gentoo Linux".
Some tools can be indicative of the distribution, such as apt-get, rpm, emerge, but you can usually install those tools on other distributions as well.

You can do it for most well know distros(Redhat, Fedaora, Gentoo, Suse, Debian, Ubuntu), those have special files to identify the distribution and version. i.e. /etc/debian_version.
But it would be a tedious task for you to list out all the package and things but if you really want to be user friendly

try with cat:
cat /proc/version
but with uname is maybe better:
uname -a

Related

/etc/lsb-release vs /etc/os-release

I needed to find out what Linux distro I'm running by using bash. Found this page, which was very helpful.
However my system has two /etc/*-release files
/etc/lsb-release
/etc/os-release
It seems os-release has a little more info, but it looks that both of these files essentially do the same thing. Does anyone know what is the difference between them? While we are at it, what does lsb in lsb-release stand for?
The /etc/lsb-release file is a file that some, but not all, Linux distributions put there for older programs to use. The "lsb" refers to the Linux Standard Base, a project working to define a common set of standards for any Linux distribution to follow, including things like filesystem layout. However, that file, /etc/lsb-release, isn't part of the standard. It's an extra thing that some distributions use, but not all.
The /etc/os-release file is the standard, however. Any distribution based on systemd, including Red Hat Enterprise Linux, CentOS, Fedora, Gentoo, Debian, Mint, Ubuntu, and many others, is required to have that file. Distributions that don't use systemd may also have the file.
If you need a reliable way of detecting what distribution you're running on, your best bet will be to read the /etc/os-release file. If it's not there you can try running the program called lsb_release. But just ignore the /etc/lsb-release file.
You can read more about os-release here and here. And just for fun, take a look at all the different files that Linux distributions used to use!

Which linux flavor is running

I want to find out the linux flavor running on the vm created using minikube-kubernetes.
I log in to the vm and do a cat /proc/version
Linux version 4.9.13 gcc version 5.4.0 (Buildroot 2017.02).
Can someone tell me which flavor this is?
Obviously not ubuntu as none of the commands man, apt-get work.
cat /etc/*release
This works across most distributions.
The minikube distro is custom built using buildroot. It is meant to be a minimal distro and does not include a package manager or package repository.
https://github.com/kubernetes/minikube/tree/master/deploy/iso/minikube-iso
https://github.com/kubernetes/minikube/blob/master/docs/contributors/minikube_iso.md
lsb_release -ai but you might need to install lsb module.

Install rpm or dpkg with no package manager in embedded Linux

I need to add new functionality to a chinese Linux-based time attendance clock. More specifically I need to make It SNMP capable, which is not available by factory default.
After some research I found a login:password which worked for the TelNet login and managed to get inside the system with root privileges.
The first thing I did was to figure out which Linux distro was It running:
cat /etc/issue throws this:
"PXA Linux Preview Kit
Kernel 2.6.29 on armv5tejl"
I did a quick google search and found that
"PXA Linux is a port of the Linux kernel for PXA based processor based devices and machines."
I dont understand why It's running a PXA Linux Preview Kit on an armv5tejl.
I gave no importance to this fact, and got to the next step: finding which package manager has this system:
I tried several commands:
apt-get, aptitude, rpm, dpkg, yum, slapt-get, ipkg, and several others. None of them worked.
I found that the system had Busybox installed. More specifically BusyBox 1.15.3. In this BusyBox I couldnt find any of those commands. I found that BusyBox does implement rpm and dpkg but this version doesnt have them.
The only command which seems to be "software installation related" I found was the command "install". From BusyBox docs:
"install [-cdDsp] [-o USER] [-g GRP] [-m MODE] [source] dest|directory
Copy files and set attributes"
But probably it doesnt replace the package manager tool. I think that I need to get a way to install dpkg or rpm, and then use them to install the SNMP packages I want. As I read, the lowest level package installation tool is dpkg so I don't have a clue on where to begin.
Can someone give me some advice on how to approach this issue? How can I install a package with no package manager possiblities at all?
You won't be able to install additional software to that system via a package manager. Such devices aren't designed like that. The firmware that was shipped with the device is all there is. What would be the incentive of the device manufacturer to maintain a package repository with general purpose linux software?
But not all hope is lost. You can of course try to compile the needed software yourself (and by that extend the firmware). For that to work you will need a suitable ARM cross compiler (GCC). Via static linking your SNMP package won't have any dependencies to the library versions already on the device (so you don't need a sysroot matching the libraries on the device).

The format of linux version

How should I read the format for a linux distribution?
For example 2.6.18-274.3.1.el5
What is each number mean?
First the first three 2 6 18, I can find the answer here
http://en.wikipedia.org/wiki/Linux_kernel#Version_numbering
What about the rest?
Thank you
Actually what you seem to be showing is the output of uname -a which contains the identification string for a kernel and generally NOT the distribution of the Linux version.
In you specific case, this is for Redhat Enterprise (or Centos) version 5 probably 32-bit. The kernel version is 2.6.18 with sub-patch release 274.3.1.
For the more general case over different Linux distributions, I have found the performing the command:
cat /etc/*release
and then grep-ing out for the details is far more effective. Notice there is a wildcard, as the filenames are not the same between Linux distributions either.
However, as everything in differing Linux distributions, there is no ONE format.

Determine Redhat Linux Version

How do I determine which RedHat Linux version I am running?
Here's what I've read:
/etc/redhat-release file contains the version, but anybody can tamper with that file.
people say uname command, but you can install any kernel on Redhat.
If I am running redhat 5.1 and someone upgrade it with 5.2 or 5.x, what determines the version of RedHat?
even lsb_release -a read /etc/redhat-release file.
Try this command:
rpm -qa | grep release
for instance on my machine I get this
redhat-release-workstation-6Workstation-6.4.0.4.el6.x86_64
If "anybody" has root access to your machine to either change /etc/redhat-release or install an alternate kernel you're most probably in bigger trouble than determining the redhat version of your system.
Just use the value pointed out by /etc/redhat-release or even better in terms of portability use the output of lsb_release as this is exactly the purpose they were made for.
With "anybody" being able to do anything with your system there is no other chance at all.
You can use the lsb_release command on recent linux distributions. If you issue:
lsb_release -i -r
Or
uname -r
And map the output. 2.6.9 kernels are RHEL4, 2.6.18 kernels are RHEL5. If necessary, you can map the full version to the specific update releases from Red Hat (i.e. 2.6.9-89 is RHEL5 U4).
Note: since July 2012, /etc/os-release should be the standard file where to look for the version of any OS.
It relieves application developers who just want to know the distribution they are running on to check for a multitude of individual release files.
It provides both a "pretty" name (i.e. one to show to the user), and machine parsable version/OS identifiers (i.e. for use in build systems).
It is extensible, can easily learn new fields if needed.
See its man page.
Example for RedHat:
# cat /etc/os-release
NAME="Red Hat Enterprise Linux Server"
VERSION="7.0 (Maipo)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="7.0"
PRETTY_NAME="Red Hat Enterprise Linux Server 7.0 (Maipo)"
A trick working on numerous Linux distributions:
cat /etc/issue
Example on Red Hat 6:
$ cat /etc/issue
CentOS release 6.7 (Final)
Kernel \r on an \m
$
The most simple command is:
lsb_release -d
try
uname -r
or
cat /etc/issue
for recent linux machines
lsb_release -d
For folks who are reading this today, or in the future:
The kernel version that is RUNNING is your version of RedHat. There may be other versions installed, but not running.
Thus, if RedHat 5.1, 5.2 & 5.x are installed on the machine, only 1 can be running at a time. This is the version that was booted at system start uop.To determine which version is actually running, use the uname command:
uname -r
This returns the Kernel release number.
For RedHat 5, it will be 2.6.18-[something]
RH 5.1 is 2.6.18-53
RH 5.2 is 2.6.18-92
To translate kernel release numbers into Redhat Version numbers, see this link:
Red Hat Enterprise Linux Release Dates
The file /etc/redhat-release is standart way to get vendor version (including 5.X). I don't think you should ignore this way. Of course, you can use various tricks from other software to display the current version of OS, but anyway many of them are parsing the /etc files. As mentioned above you can use rpm query to get version. Another way to get such information: rpm -q <vendor-name>-release
BTW I agree with the commenters above that the way you knowing the version is the least of your problems if anyone can tamper with the standard /etc/redhat-release file or other system configuration files.
Additionally since RHEL 7.X versions you can also try hostnamectl | grep 'Operating System'

Resources