在Unix/Linux平台上查找os名称和版本的最佳方法

Nir*_*raj 70 unix linux

我需要在Unix/Linux平台上找到操作系统名称和版本.为此,我尝试了以下内容:

  1. lsb_release 效用

  2. /etc/redhat-release 或特定文件

但它似乎不是最佳解决方案,因为LSB_RELEASE不再支持RHEL 7.

有什么方法可以在任何Unix或Linux平台上运行?

任何帮助将不胜感激.

kvi*_*vek 131

这适用于所有Linux环境.

#!/bin/sh
cat /etc/*-release
Run Code Online (Sandbox Code Playgroud)

在Ubuntu中:

$ cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04.4 LTS"
Run Code Online (Sandbox Code Playgroud)

或12.04:

$ cat /etc/*-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS"
NAME="Ubuntu"
VERSION="12.04.4 LTS, Precise Pangolin"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu precise (12.04.4 LTS)"
VERSION_ID="12.04"
Run Code Online (Sandbox Code Playgroud)

在RHEL中:

$ cat /etc/*-release
Red Hat Enterprise Linux Server release 6.5 (Santiago)
Red Hat Enterprise Linux Server release 6.5 (Santiago)
Run Code Online (Sandbox Code Playgroud)

或使用此脚本:

#!/bin/sh
# Detects which OS and if it is Linux then it will detect which Linux
# Distribution.

OS=`uname -s`
REV=`uname -r`
MACH=`uname -m`

GetVersionFromFile()
{
    VERSION=`cat $1 | tr "\n" ' ' | sed s/.*VERSION.*=\ // `
}

if [ "${OS}" = "SunOS" ] ; then
    OS=Solaris
    ARCH=`uname -p` 
    OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
elif [ "${OS}" = "AIX" ] ; then
    OSSTR="${OS} `oslevel` (`oslevel -r`)"
elif [ "${OS}" = "Linux" ] ; then
    KERNEL=`uname -r`
    if [ -f /etc/redhat-release ] ; then
        DIST='RedHat'
        PSUEDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
        REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
    elif [ -f /etc/SuSE-release ] ; then
        DIST=`cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//`
        REV=`cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //`
    elif [ -f /etc/mandrake-release ] ; then
        DIST='Mandrake'
        PSUEDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
        REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
    elif [ -f /etc/debian_version ] ; then
        DIST="Debian `cat /etc/debian_version`"
        REV=""

    fi
    if [ -f /etc/UnitedLinux-release ] ; then
        DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
    fi

    OSSTR="${OS} ${DIST} ${REV}(${PSUEDONAME} ${KERNEL} ${MACH})"

fi

echo ${OSSTR}
Run Code Online (Sandbox Code Playgroud)

  • 是的,你是对的,但我不想从 *-release 文件中读取它。 (2认同)

Dul*_*sta 13

以下命令很适合我.它为您提供操作系统名称和版本.

lsb_release -a
Run Code Online (Sandbox Code Playgroud)


nid*_*ima 10

"lsb_release"命令提供某些Linux标准库和特定于分发的信息.因此,使用以下命令,我们可以获得操作系统名称和操作系统版本.

" lsb_release -a "


小智 5

此命令为您提供操作系统的描述:

cat /etc/os-release


Gil*_*not 1

使用Linux::Distribution,这是解决老问题的最干净的解决方案:

#!/bin/sh

perl -e '
    use Linux::Distribution qw(distribution_name distribution_version);

    my $linux = Linux::Distribution->new;
    if(my $distro = $linux->distribution_name()) {
          my $version = $linux->distribution_version();
          print "you are running $distro";
          print " version $version" if $version;
          print "\n";
    } else {
          print "distribution unknown\n";
    }
'
Run Code Online (Sandbox Code Playgroud)