以编程方式确定当前计算机是否正在运行Ubuntu,它具有什么体系结构以及它正在运行的Ubuntu版本的最佳方法是什么?
一种方法是扫描uname -a
的输出以检查正确的内核版本和架构。
另一种方法是扫描/etc/apt/sources.list
以获取Ubuntu分发关键字(eq precise
,quantal
等)
有更好的方法吗?
答案 0 :(得分:4)
除了uname -a
之外,还有几种方法可以获取有关当前分布的信息。
最好的方法是解析发布文件。它们通常以-release
或_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
答案 1 :(得分:2)
一种方法是扫描uname -a的输出以检查正确的内核版本和架构。
但是人们通常不想解析这些工具的输出,因为它不优雅(它被认为是黑客,所以说)。
但是,您可以使用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);
答案 2 :(得分:2)
您可以将库用作操作系统的中性。解决方案是lsb,您的问题接近using lsb question。
答案 3 :(得分:0)
Afaik大多数Linux发行版也使用/etc/issue
。管理员可以更改其中的文本以显示不同的登录消息。
来自fedora的样本:
Fedora release 17 (Beefy Miracle)
Kernel \r on an \m (\l)
来自ubuntu的示例:
Ubuntu 11.04 \n \l