2012-06-01 66 views
2

我目前有什麼。這是最好的方法嗎?有一個腳本有很多功能,並且需要一種方法來知道在運行每個函數之前哪個操作系統正在運行。更好的方法來檢查Linux版本?

CHECK_architecture() 
{ 
    architecture=`uname -m` 
    if [ "$architecture" != "x86_64" ] && [ "$architecture" != "ia64" ]; then 
     architecture="x86" 
    else 
     architecture="x86_64" 
    fi 
} 
CHECK_distro() 
{ 
    DISTRO=""; 
    if [ `uname -r | egrep '(6.2-RELEASE|6.1-RELEASE|5.5-RELEASE|6.1-STABLE|5.4-RELEASE|6.0-RELEASE|5.3-RELEASE|4.10-RELEASE|4.11-RELEASE)'` ]; then 
     DISTRO="FreeBSD"; 
     $BIN_ECHO " System is running FreeBSD" 
    elif [ -f /etc/debian_version ]; then 
      $BIN_ECHO " System is running Debian Linux" 
      DISTRO=DEBIAN; 
    elif [ -f /etc/SuSE-release ]; then 
      $BIN_ECHO " System is running SuSE Linux" 
      DISTRO=SUSE; 
    elif [ -f /etc/fedora-release ]; then 
      $BIN_ECHO " System is running Fedora Linux" 
      DISTRO=FEDORA; 
    elif [ -f /etc/redhat-release ]; then 
      $BIN_ECHO " System is running Red Hat Linux" 
      DISTRO=REDHAT; 
    else 
     $BIN_ECHO -e " no supported distribution found running " 
    exit 1 
fi 
} 

回答

2

Linux Standard Base文章在維基百科:

Linux標準基礎(LSB)是一個聯合項目,由幾個Linux發行版根據Linux基金會的組織結構來規範Linux操作系統所使用的軟件系統結構,包括文件系統層次結構。 LSB基於POSIX規範,單一UNIX規範和其他幾個開放標準,但在某些領域擴展了它們。

根據LSB: LSB的目標是開發和推廣一組開放標準,這將增加Linux發行版之間的兼容性,並使軟件應用程序能夠在任何兼容系統上運行,即使是二進制格式。此外,LSB還將協助招聘軟件供應商爲Linux操作系統移植和編寫產品。

如果您使用的是一些LSB兼容的分佈(你應該),只是man lsb_release

$ lsb_release -a 
No LSB modules are available. 
Distributor ID: Ubuntu 
Description: Ubuntu 8.04.4 LTS 
Release:  8.04 
Codename:  hardy 


$ lsb_release -a 
LSB Version: :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch 
Distributor ID: CentOS 
Description: CentOS release 5.5 (Final) 
Release:  5.5 
Codename:  Final 
2

您正在尋找config.guess實用程序。它可以可靠地確定架構和操作系統,併爲您提供許多其他工具使用的標準名稱。它不會告訴你具體的Linux發行版,但你不應該需要這些信息 - 請解釋你使用的是什麼,我可以給出進一步的建議。

+0

+1,但不確定我會同意'可靠確定'。相反,我會說config.guess是「比其他已知方法更可靠」。 –

0

沒有絕對可靠的方法來檢查Linux發行版及其版本。

$ head -n1 /etc/issue 
0

實際上,這取決於您正在運行的linux操作系統的類型。對我來說,獲得你所使用的linux版本的最好方法是從/etc/redhat-release,如果你在Redhat。對於其他,

Redhat: Test for /etc/redhat-release, check contents 
    Debian: Test for /etc/debian_version, check contents 
    Mandriva: Test for /etc/version, check contents 
    Slackware: Test for /etc/slackware-version, check contents 

一般來說,檢查/etc/*-release/etc/*-version