【问题标题】:How to find Linux Distribution name using shell script?如何使用 shell 脚本查找 Linux 发行版名称?
【发布时间】:2015-06-17 08:55:53
【问题描述】:

我正在编写一个 shell 脚本,我需要在其中使用当前操作系统名称来使其通用。喜欢:

if [ $Operating_System == "CentOS" ]
then
    echo "CentOS";
    # Do this
elif [ $Operating_System == "Ubuntu" ]
then
    echo "Ubuntu";
    # Do that
else
    echo "Unsupported Operating System";
fi

这怎么可能?在lsb_release -a 命令或其他东西上应用正则表达式?

谢谢..

【问题讨论】:

  • 是的 - lsb-release 绝对是最强大、最通用的方法。示例:lsb_release -d|awk '{print $2}'.
  • lsb_release -ds
  • lsb_release 在 CENTOS7 上似乎不可用。

标签: regex linux bash shell operating-system


【解决方案1】:

这是我得到的:

#!/bin/bash

dist=$(tr -s ' \011' '\012' < /etc/issue | head -n 1)

check_arch=$(uname -m)

echo "[$green+$txtrst] Distribution Name: $dist"

【讨论】:

    【解决方案2】:
    DISTRO=$( cat /etc/*-release | tr [:upper:] [:lower:] | grep -Poi '(debian|ubuntu|red hat|centos|nameyourdistro)' | uniq )
    if [ -z $DISTRO ]; then
        DISTRO='unknown'
    fi
    echo "Detected Linux distribution: $DISTRO"
    

    【讨论】:

      【解决方案3】:

      试试这个:

      awk '/^ID=/' /etc/*-release | awk -F'=' '{ print tolower($2) }'
      

      【讨论】:

      • 这几乎是完美的,不需要awk 之间的管道虽然awk -F'=' '/^ID=/ {print tolower($2)}' /etc/*-release 做得很好,对于那些想要检测基于Debian 的发行版awk -F'=' '/^ID_LIKE=/ {print tolower($2)}' /etc/*-release 2&gt;/dev/null 更接近非常适合我的用例。
      【解决方案4】:

      您可以从lsb_release获取信息:

      echo "$(lsb_release -is)"
      

      i 代表分销商 ID。

      s 的缩写。

      例如。它显示Ubuntu 而不是Distributor Id: Ubuntu

      还有其他选择:

      -r : 释放​​

      -d : 描述

      -c : 代号

      -a : 全部

      您可以通过运行lsb_release --helpman lsb_release 获取此信息

      【讨论】:

        【解决方案5】:

        我会使用uname -a

        robert@debian:/tmp$ uname -a
        Linux debian 3.2.0-4-686-pae #1 SMP Debian 3.2.65-1+deb7u2 i686 GNU/Linux
        

        【讨论】:

          【解决方案6】:

          对于几乎所有的 linux 发行版,cat /etc/issue 可以解决问题。

          编辑:显然,没有解决方案可以适用于所有发行版,因为发行版免费可以随心所欲。

          进一步澄清:这不能保证有效 - 没有 - 但根据我的经验,这是最常用的方法。实际上,它是only 始终有效的方法(这里提到的lsb_release,经常产生command not found)。

          【讨论】:

          • /etc/issue 并非用于存储有关操作系统的信息,并且可能包含管理员喜欢的任何文本。我永远不会相信它会检测操作系统或发行版。
          • 具体来说,/etc/issue是getty在控制台登录时显示的文本文件。不保证包含任何有关分发的有意义的信息。
          • 通常我会使用cat /etc/*ease,因为/etc 中有一个fedora-releasesomething-release 文件。
          • 这不是一个可靠的解决方案,因为这些是管理员可以随意放入的文件。
          【解决方案7】:
          $ lsb_release -i
          Distributor ID: Fedora
          $ lsb_release -i | cut -f 2-
          Fedora
          

          【讨论】:

          • 但是,lsb_release 在 centos 7 上不存在。
          猜你喜欢
          • 2011-02-14
          • 2011-05-19
          • 2011-09-13
          • 1970-01-01
          • 2011-12-11
          • 2017-02-27
          • 2013-05-08
          • 2018-08-05
          相关资源
          最近更新 更多