从文件系统或命令读取Linux发行版名称

从文件系统或命令读取Linux发行版名称

我需要收集一些系统信息机器并根据某些发行版/版本特定的条件决定要做什么。

为了简化我的示例,我编造了一个虚构的my_function_display_operating_system函数。这是一个无用的函数,但它解决了问题:

  1. 检测一般操作系统类型(,, ETC。)
  2. 检测有关操作系统的一些版本信息
  3. 检测分布友好名称

重点3.是我最需要帮助的地方。

有没有可靠的方法来读取指示主机的字符串发行版名称?

/etc/issue我在下面的示例中使用,因为我知道没有其他方法或一组方法来获取此信息。

我很高兴有一个这取决于case esac回答,如果需要,我可以构建一个非常复杂的switch 语句。

我只需要知道在哪里查找,并且我无法为我所知道的所有发行版下载/安装虚拟机来“环顾四周”和/或为了名字..


# Displays operating system.

function my_function_display_operating_system() {
  local operating_system
  case $my_global_os_type in
    OSX)
      printf -v operating_system \
                'OS X v%s (build %s)' \
                $(sw_vers -productVersion) \
                $(sw_vers -buildVersion)
      ;;
    Linux)
      local -r linux_kernel_version=$(uname -r)
      printf -v operating_system \
                'GNU/Linux (kernel %s)' \
                "$linux_kernel_version"
      if [[ -f /etc/issue ]]; then
        local -r distribution=$(cat /etc/issue | sed 's/ \\n \\l//g')
        operating_system+="\nDistribution: $distribution"
      fi
      ;;
    *)
      operating_system=Unknown
      ;;
  esac
  printf "Operating system: $operating_system\n"
}

示例输出:


> my_function_display_system_information
Operating system   GNU/Linux (kernel 3.5.0-25-generic)
Distribution       Ubuntu 12.10
System memory      1 GB
Bash               v4.2.37(1)-release
Vim                VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Oct 26 2012 16  45  54)
# ... etc ...

答案1

这里给出了非常相似的建议:

https://superuser.com/questions/11008/how-do-i-find-out-what-version-of-linux-im-running

简短的回答:

 ls /etc/*{release,version}

不同的发行版会输出不同的格式,不幸的是没有单一的统一系统。上面的答案更具体地列出了一些最常见的文件。

相关内容