0

以编程方式确定当前机器是否正在运行 Ubuntu、它具有什么架构以及它正在运行什么版本的 Ubuntu 的最佳方法是什么?

一种方法是扫描输出uname -a以检查正确的内核版本和架构。

另一种方法是扫描/etc/apt/sources.listUbuntu 分发关键字(eq precisequantal等)

有没有更好的办法?

4

4 回答 4

4

除了 uname -a,还有几种方法可以获取有关当前分布的信息。

  1. 最好的方法是解析发布文件。它们通常以-releaseor结尾_release并且位于/etc. 以下命令将找到它们。

    ls /etc/*{-,_}release
    
    • Ubuntu 使用lsb_release
    • Redhat/Fedora 使用redhat-release
    • Slackware 使用slackware-release
    • Gentoo 使用gentoo-release

Debian 对应的文件是/etc/debian_version. 不过,这个文件也将出现在 Ubuntu 系统上(有点误导,但有充分的理由)。

  1. 另一个文件是/etc/issue用于机器识别和登录前提示可用于确定当前分布信息。

  2. 系统信息也可以在中找到/proc/version

    cat /proc/version
    
于 2013-01-12T11:18:46.150 回答
3

一种方法是扫描 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);
于 2013-01-12T11:16:20.957 回答
2

您可以将库用作操作系统的中立点。解决方案是lsb,您的问题接近使用 lsb question

于 2013-01-12T11:33:49.703 回答
0

Afaik 大多数 Linux 发行版也使用/etc/issue. 管理员当然可以更改其中的文本以显示不同的登录消息。

来自 Fedora 的示例:

Fedora release 17 (Beefy Miracle)
Kernel \r on an \m (\l)

来自 ubuntu 的示例:

Ubuntu 11.04 \n \l
于 2013-01-12T11:23:23.637 回答