![从文件系统或命令读取Linux发行版名称](https://linux22.com/image/30551/%E4%BB%8E%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%88%96%E5%91%BD%E4%BB%A4%E8%AF%BB%E5%8F%96Linux%E5%8F%91%E8%A1%8C%E7%89%88%E5%90%8D%E7%A7%B0.png)
我需要收集一些系统信息Linux的机器并根据某些发行版/版本特定的条件决定要做什么。
为了简化我的示例,我编造了一个虚构的my_function_display_operating_system
函数。这是一个无用的函数,但它解决了问题:
重点3.
是我最需要帮助的地方。
有没有可靠的方法来读取指示主机的字符串Linux的发行版名称?
/etc/issue
我在下面的示例中使用,因为我知道没有其他方法或一组方法来获取此信息。
我很高兴有一个这取决于case
esac
回答,如果需要,我可以构建一个非常复杂的switch 语句。
我只需要知道在哪里查找,并且我无法为我所知道的所有发行版下载/安装虚拟机来“环顾四周”和/或grep为了名字..
# 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}
不同的发行版会输出不同的格式,不幸的是没有单一的统一系统。上面的答案更具体地列出了一些最常见的文件。