最近在調研獲取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 |
(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 字段) 。