以编程方式确定当前机器是否正在运行 Ubuntu、它具有什么架构以及它正在运行什么版本的 Ubuntu 的最佳方法是什么?
一种方法是扫描输出uname -a
以检查正确的内核版本和架构。
另一种方法是扫描/etc/apt/sources.list
Ubuntu 分发关键字(eq precise
、quantal
等)
有没有更好的办法?
除了 uname -a
,还有几种方法可以获取有关当前分布的信息。
最好的方法是解析发布文件。它们通常以-release
or结尾_release
并且位于/etc
. 以下命令将找到它们。
ls /etc/*{-,_}release
lsb_release
redhat-release
slackware-release
gentoo-release
Debian 对应的文件是/etc/debian_version
. 不过,这个文件也将出现在 Ubuntu 系统上(有点误导,但有充分的理由)。
另一个文件是/etc/issue
用于机器识别和登录前提示可用于确定当前分布信息。
系统信息也可以在中找到/proc/version
。
cat /proc/version
一种方法是扫描 uname -a 的输出以检查正确的内核版本和架构。
但是人们通常不想解析此类工具的输出,因为它并不优雅(可以这么说,它被认为是一种 hack)。
但是,您可以使用uname()
函数/系统调用:
#include <sys/utsname.h>
struct utsname sysinfo;
if (uname(&sysinfo) < 0) {
printf("Cannot determine OS\n");
exit(-1);
}
printf("Operating system name: %s\n", sysinfo.sysname);
您可以将库用作操作系统的中立点。解决方案是lsb,您的问题接近使用 lsb question。
Afaik 大多数 Linux 发行版也使用/etc/issue
. 管理员当然可以更改其中的文本以显示不同的登录消息。
来自 Fedora 的示例:
Fedora release 17 (Beefy Miracle)
Kernel \r on an \m (\l)
来自 ubuntu 的示例:
Ubuntu 11.04 \n \l