2013-01-12 33 views
0

以編程方式確定當前機器是否運行Ubuntu,它具有哪種體系結構以及它運行的是哪個版本的Ubuntu的最佳方式是什麼?以編程方式確定Ubuntu發行版和體系結構?

一種方法是掃描uname -a的輸出以檢查正確的內核版本和體系結構。

另一種方法是掃描/etc/apt/sources.list的Ubuntu發行版關鍵字(EQ precisequantal等)

有沒有更好的辦法?

+2

/etc/lsb-release可能有線索 –

回答

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); 
+0

在我的Ubuntu系統上sysinfo.sysname是「Linux」有點恕恕恕我直言,恕我直言 – MonoThreaded

4

除了uname -a,有幾種方式來獲得關於當前分佈的信息。

  1. 最好的方法是解析發佈文件。他們通常以-release_release結尾,並位於/etc。以下命令將全部找到它們。

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

Debian的相應的文件是/etc/debian_version。不過,這個文件也會(在某種程度上誤導性的,但是有一個很好的理由)出現在Ubuntu系統上。

  1. 另一個文件是/etc/issue其用於機器標識和預登錄提示可以被用來確定當前分佈的信息。

  2. 系統信息也可以在/proc/version找到。

    cat /proc/version 
    
0

據我所知大多數Linux發行版也使用/etc/issue。其中的文字可能已被管理員更改爲顯示不同的登錄信息。在Fedora

樣品:從Ubuntu的

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

樣品:

Ubuntu 11.04 \n \l