Another one line command where I'd like to determine if Ubuntu or Red Hat when running command

Hello Forum,

I'm making very good progress on my report thanks to the very helpful people on this forum. I've been able to successfully create my report for my Red Hat servers. But I do have a few ubuntu servers in the mix and I'd like to capture some data from them when an ssh connection is made.

I have a command here to find the inactive kernels on a Red Hat VM:

rpm -qa | grep '^kernel-[0-9]' |grep -vE `uname -r` | paste -sd \;

I'm trying to get this one line command to be Linux Type aware by issuing something like the following where if the os-release is Red Hat then I issue the command above to find the Red Hat installed kernels. This isn't working but this is what I'm trying to do:

awk -F= '/^NAME/{print $2}' /etc/os-release 2>/dev/null || grep Red |cat /etc/redhat-release 2>/dev/null || lsb_release -a 2>/dev/null | grep Description | cut -f2

I'm not sure if it's even possible but I would really like to issue the command to find the installed kernels for Red Hat servers and if the servers are ubuntu then issue another command for Ubuntu inactive kernels. I'm not sure what the command is to find the Ubuntu inactive kernels so I'll look that up...but for this post could someone point me in the right direction here on how to write the one line command to check for O/S type and issue commands based on that type.

Thank you.

Moderator comments were removed during original forum migration.
1 Like

Why not simply ls the /boot directory?

Hello RudiC,

I researched how to use ls and /boot to find the distribution I was connecting to but I couldn't find a solution. But I did find another way using python that seems to be working for me with my very early tests:

python -mplatform | grep -qi red && echo "RedHat" || echo "ubuntu"

This does work in that it looks for the work

red

which means I can identify Red Hat Servers. Where I can see my code failing though is that my assumption is that if it's not Red Hat then it must be Ubuntu. I'm trying now to find a way to identify each type of distribution we have and specifically test for Red Hat (like I'm currently doing) or Ubuntu or even CentOS. Would you or someone else have a suggestion for me on how I can use my code to test for various types of Linux distributions?

Thank you.

How about the

lsb_release -a

command?

1 Like

Hello again RudiC,

I suppose I could use lsb_release -a as a check...but what would be the one line command to check if Red Hat to run an instruction and if not Red Hat and it's Ubuntu to run a different instruction? That's the part I'm having trouble with now. Here is the code I've tried using the python bit I found:

if python -mplatform | grep -qi red; then rpm -qa | grep '^kernel-[0-9]' | grep -vE `uname -r` | paste -sd \; else python -mplatform | grep -qi Ubuntu; then echo "This is Ubuntu"

Thank you.

man lsb_release might help. E.g.

$ lsb_release -is
Ubuntu

A case statement could be used

case  $(lsb_release -is) in
    red*)    # run red hat command
    ;;
    Ubu*)    # run ubuntu command
    ;;
esac
1 Like

Hello,

lsb_release was not working on my VM's sadly.

But I've managed to make progress with the following bit of code using a case statement:

a=$(python -mplatform) && case $a in *"redhat-7"*) echo "Red Hat 7 VM";; *"Ubuntu"*) echo "Ubuntu VM";; *"redhat-6"*) echo "Red Hat 6 VM";; esac;

I'll keep working this and update this thread once I've figured out how to use this statement correctly to issue commands based on O/S version/type.

Thanks.

Hi.

We use a variety of platforms, so we often need to identify the one on which we are working. Here is a sampling showing the use of:

  1. GNU script config.guess ,
  2. file /etc/issue,
  3. standard *nix command uname ,
  4. our local code version

Our code version is really for displaying versions of commands and scripts, but we found it convenient to identify the OS as an option as well as displaying a code version. We make use of uname for a number of elements in the display, but AIX and macOS, for example, need special processing. The code is probably not completely general, but the design it has suited our variety of OSs quite well. However, while the call to it is a single-line, the devil in the details requires a lot of extra code, and is, most emphatically, not a single-line.

config.guess:
x86_64-pc-linux-gnu
/etc/issue:
Debian 10.0 (buster) \n \l
uname:
Linux vm-buster 4.19.0-5-amd64 #1 SMP Debian 4.19.37-5+deb10u2 (2019-08-08) x86_64 GNU/Linux
(local) version:
OS, ker|rel, machine: Linux, 4.19.0-5-amd64, x86_64
Distribution        : Debian 10.0 (buster) 

config.guess:
x86_64-unknown-linux-gnu
/etc/issue:
CentOS 6.4 (Final) 
Kernel \r on an \m
uname:
Linux vm-centos 2.6.32-358.23.2.el6.centos.plus.x86_64 #1 SMP Thu Oct 17 00:31:29 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
(local) version:
OS, ker|rel, machine: Linux, 2.6.32-358.23.2.el6.centos.plus.x86_64, x86_64
Distribution        : CentOS 6.4 (Final) 

config.guess:
x86_64-unknown-linux-gnu
/etc/issue:
Slackware 14.1 \n \l
uname:
Linux vm-slackware 3.18.11 #2 SMP Tue Apr 7 13:09:53 CDT 2015 x86_64 Intel(R) Xeon(R) CPU E31230 @ 3.20GHz GenuineIntel GNU/Linux
(local) version:
OS, ker|rel, machine: Linux, 3.18.11, x86_64
Distribution        : Slackware 14.1 

config.guess:
x86_64-unknown-freebsd11.0
/etc/issue:
cat: /etc/issue: No such file or directory
uname:
FreeBSD vm-freebsd 11.0-RELEASE-p9 FreeBSD 11.0-RELEASE-p9 #0: Tue Apr 11 08:48:40 UTC 2017     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64
(local) version:
OS, ker|rel, machine: FreeBSD, 11.0-RELEASE-p9, amd64

config.guess:
i386-pc-solaris2.11
/etc/issue:
cat: cannot open /etc/issue: No such file or directory
uname:
SunOS vm-solaris 5.11 11.3 i86pc i386 i86pc
(local) version:
OS, ker|rel, machine: SunOS, 5.11, i86pc
Distribution        : Solaris 11.3 X86

config.guess:
x86_64-apple-darwin18.7.0
/etc/issue:
cat: /etc/issue: No such file or directory
uname:
Darwin lmin 18.7.0 Darwin Kernel Version 18.7.0: Tue Aug 20 16:57:14 PDT 2019; root:xnu-4903.271.2~2/RELEASE_X86_64 x86_64
(local) version:
OS, ker|rel, machine: Apple/BSD, Darwin 18.7.0, x86_64
Distribution        : macOS 10.14.6 (18G103), Mojave

Some details for config.guess :

config.guess    guess the build system triplet (man)
Path    : ~/bin/config.guess
Version : GNU config.guess (2016-02-11)
Length  : 1455 lines
Type    : POSIX shell script, ASCII text executable
Shebang : #! /bin/sh
Help    : probably available with -h,--help
Home    : http://savannah.gnu.org/projects/config (doc)

Best wishes ... cheers, drl