linux各發行版的系統平臺信息獲取方式調研


最近在調研獲取linux的平臺信息的方法(即獲取CentOS,64bit,6.5這些),下面做如下總結:

1、通過 python中platform模塊獲取

在platform模塊中,封裝了一系列方法,可以獲取linux所有的平臺信息。

好處: 

    (1)python可以跨平臺,在windows、linux、mac上執行 

    (2)各linux發行版中基本都自帶了python

    (3)不會因爲linux 系統版本不同而要進行判斷,避免了java讀/etc/下的相關配置文件的繁瑣工作。

缺點: 

     (1)需要引入platform模塊(python如果不帶此模塊則無法獲取平臺信息)

     (2)不同版本的linux自帶的python版本不同,不確定是否都有platform模塊

     (3)python 是用C語言實現的,需要編譯。

 import platform
        platform.platform()   #獲取操作系統名稱及版本號,'Windows-7-6.1.7601-SP1'
        platform.version()    #獲取操作系統版本號,'6.1.7601'
        platform.architecture()   #獲取操作系統的位數,('32bit', 'WindowsPE')
        platform.machine()    #計算機類型,'x86'
        platform.node()       #計算機的網絡名稱,'hongjie-PC'
        platform.processor()  #計算機處理器信息,'x86 Family 16 Model 6 Stepping 3, AuthenticAMD'
        platform.uname()      #包含上面所有的信息彙總,uname_result(system='Windows', node='hongjie-PC',
                               release='7', version='6.1.7601', machine='x86', processor='x86 Family
                               16 Model 6 Stepping 3, AuthenticAMD')

 編程實現:java代碼執行Python命令

	String  ss = "ssh [email protected]  python -c 'import platform ; print platform.platform() '";
	MsgVO  msg = ActionUtil.execCommand(ss);
		
參考:http://www.cnblogs.com/agnewee/p/6444836.html   講解了一些python獲取系統平臺信息的源碼,先查看/etc/lsb-release文件,然後再讀的其他的文件。

2、通過命令獲取

    (1)lsb_release -a   

    (2)uname -a 

     缺陷:執行命令,但有的系統找不到lsb_release命令。


    參考:http://blog.csdn.net/u010738184/article/details/77725836

3、通過java 讀配置文件來獲取

    讀/etc/ 下release相關文件,調研知,不同版本的linux系統中配置文件不同,

    通過調研各linux發行版本: centos,redhat,ubuntu, suse的最近的幾個系統版本,基本確定:

各發行版本獲取linux平臺信息的方式:

 

 

distributor

release

arch

Centos

/etc/centos-release

/etc/centos-release

/proc/version

redhat

/etc/redhat-release

/etc/redhat-release

/proc/version

suse

/etc/SuSE-release

/etc/SuSE-release

/etc/SuSE-release

ubuntu

/etc/lsb-release

/etc/lsb-release

dpkg —print-architecture

注:前期是通過以上方法獲取arch,但是centos5.5中的/proc/version的內核信息中沒有arch信息,所以只能通過別的方式獲取:

(1)arch 命令或uname -m  

(2)如果命令獲取不到,就讀/proc/cpuinfo表中的信息(clflush size 字段) 。


讀文件有個弊端: 當linux內核升級後,如果不修改這些標記性文件,那統計的信息就不準確。 

參考鏈接:

http://linuxmafia.com/faq/Admin/release-files.html /etc/release equivalents for sundry Linux (and other Unix) distributions

http://blog.csdn.net/pyyaoer/article/details/51108199 linux/etc/*release文件的重要性

http://blog.sina.com.cn/s/blog_494e45fe0102e2qa.html linux發行版本的特徵文件

http://www.wo81.com/tec/os/syscmpr/2014-06-11/270.html   Linux操作系統版本與內核版本查詢方法

http://linuxmafia.com/faq/Admin/release-files.html  /etc/release equivalents for sundry Linux (and other Unix) distributions

https://linux.cn/article-4143-1.html#3_103 suse版本

http://os.51cto.com/art/201708/547373.htm linux個發行版本的介紹

https://baike.baidu.com/historylist/centos/498948 centos 版本

http://www.cnblogs.com/kerrycode/p/4338523.html redhat

https://linux.cn/tech/ linux即可


在安裝完系統後,/etc/*release 文件就確定不變了,如果有內核升級,則原來的判斷條件會失效。


ubuntu apt-get dpkg —print-architecture的區別:都是軟件管理工具。http://blog.csdn.net/xiaoyanghuaban/article/details/22946987

  apt-get會解決軟件包間的依賴關係,但 dpkg不關心依賴關係;pkg是用來安裝.deb文件,但不會解決模塊的依賴關係,且不會關心ubuntu的軟件倉庫內的軟件,可以用於安裝本地的deb文件

dpkg安裝的軟件可用apt-get再安裝一遍;dpkg繞過apt包管理數據庫對軟件包進行操作,

apt-get是建立在 dpkg之上的軟件管理工具。


-----------------------------------------------------------------------------

希望大家在調研linux各發行版本系統平臺信息時如果有其他的結論或發現能多多交流。(PS:ubuntu 獲取arch 這個方法不確定,dpkg這個命令是否是所有ubuntu自帶的?

注後期經過驗證:

  centos5.5中的/proc/version的內核信息中沒有arch信息,所以只能通過別的方式獲取:

(1)arch 命令或uname -m  

(2)如果命令獲取不到,就讀/proc/cpuinfo表中的信息(clflush size 字段) 。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章