以编程方式确定Ubuntu分发和架构?

时间:2013-01-12 11:09:51

标签: linux ubuntu

以编程方式确定当前计算机是否正在运行Ubuntu,它具有什么体系结构以及它正在运行的Ubuntu版本的最佳方法是什么?

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

另一种方法是扫描/etc/apt/sources.list以获取Ubuntu分发关键字(eq precisequantal等)

有更好的方法吗?

4 个答案:

答案 0 :(得分:4)

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

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

    ls /etc/*{-,_}release
    
    • Ubuntu使用lsb_release
    • Redhat / Fedora使用redhat-release
    • Slackware使用slackware-release
    • Gentoo使用gentoo-release
  2. Debian的相应文件是/etc/debian_version。不过,这个文件也会(有点误导,但有充分理由)出现在Ubuntu系统上。

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

    2. 系统信息也可以在/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