语音解读

图文解释

dmidecode 是一个读取电脑 DMI(桌面管理接口(Desktop Management Interface))表内容并且以人类可读的格式显示系统硬件信息的工具。(也有人说是读取 SMBIOS ——系统管理 BIOS(System Management BIOS))
这个表包含系统硬件组件的说明,也包含如序列号、制造商、发布日期以及 BIOS 修订版本号等其它有用的信息。
DMI 表不仅描述了当前的系统构成,还可以报告可能的升级信息(比如可以支持的最快的 cpu 或者最大的内存容量)。
这将有助于分析你的硬件兼容性,比如是否支持最新版本的程序。

shell 方式获取

dmidecode -t system
dmidecode 2.12

内核在 /sys 目录下的文件中公开了一些 DMI 信息。因此,我们可以通过如下方式运行 grep 命令来轻易地获取机器类型。

grep “” /sys/class/dmi/id/[pbs]*
使用 cat 命令仅打印出特定的详细信息。

cat /sys/class/dmi/id/board_vendor
cat /sys/class/dmi/id/product_name
cat /sys/class/dmi/id/product_serial
cat /sys/class/dmi/id/bios_version
dmesg 命令是在 Linux 上 syslogd 或 klogd 启动前用来记录内核消息(启动阶段的消息)的。它通过读取内核的环形缓冲区来获取数据。在排查问题或只是尝试获取系统硬件信息时,dmesg 非常有用。

dmesg | grep -i DMI
[root@zgl ~]# dmesg | grep -i DMI
[ 0.000000] DMI: Inspur NF8460M4/NF8460M4,BIOS 4.2.17 01/28/2017

golang 方式获取

代码如下:

package main
 
import (
	"fmt"
	"io/IoUtil"
	"strings"
)
 
type DMI struct {
	BiosDate    string
	Biosvendor  string
	Biosversion string
 
	BoardAssetTag string
	BoardName     string
	BoardSerial   string
	Boardvendor   string
	BoardVersion  string
 
	ChassisAssetTag string
	ChassisSerial   string
	ChassisType     string
	Chassisvendor   string
	Chassisversion  string
 
	ProductName    string
	ProductSerial  string
	ProductUuid    string
	ProductVersion string
 
	Modalias  string
	Sysvendor string
	Uevent    string
}
 
var SysinfoDmi DMI
 
func init() {
	//bios
	SysinfoDmi.BiosDate = getStringFromFile("/sys/class/dmi/id/bios_date")
	SysinfoDmi.Biosvendor = getStringFromFile("/sys/class/dmi/id/bios_vendor")
	SysinfoDmi.Biosversion = getStringFromFile("/sys/class/dmi/id/bios_version")
	//board
	SysinfoDmi.BoardAssetTag = getStringFromFile("/sys/class/dmi/id/board_asset_tag")
	SysinfoDmi.BoardName = getStringFromFile("/sys/class/dmi/id/board_name")
	SysinfoDmi.BoardSerial = getStringFromFile("/sys/class/dmi/id/board_serial")
	SysinfoDmi.Boardvendor = getStringFromFile("/sys/class/dmi/id/board_vendor")
	SysinfoDmi.BoardVersion = getStringFromFile("/sys/class/dmi/id/board_version")
	//chassis
	SysinfoDmi.ChassisAssetTag = getStringFromFile("/sys/class/dmi/id/chassis_asset_tag")
	SysinfoDmi.ChassisSerial = getStringFromFile("/sys/class/dmi/id/chassis_serial")
	SysinfoDmi.ChassisType = getStringFromFile("/sys/class/dmi/id/chassis_type")
	SysinfoDmi.Chassisvendor = getStringFromFile("/sys/class/dmi/id/chassis_vendor")
	SysinfoDmi.Chassisversion = getStringFromFile("/sys/class/dmi/id/chassis_version")
 
	SysinfoDmi.ProductName = getStringFromFile("/sys/class/dmi/id/product_name")
	SysinfoDmi.ProductSerial = getStringFromFile("/sys/class/dmi/id/product_serial")
	SysinfoDmi.ProductUuid = getStringFromFile("/sys/class/dmi/id/product_uuid")
	SysinfoDmi.ProductVersion = getStringFromFile("/sys/class/dmi/id/product_version")
 
	SysinfoDmi.Modalias = getStringFromFile("/sys/class/dmi/id/modalias")
	SysinfoDmi.Sysvendor = getStringFromFile("/sys/class/dmi/id/sys_vendor")
	SysinfoDmi.Uevent = getStringFromFile("/sys/class/dmi/id/uevent")
 
}
 
func getStringFromFile(path string) string {
	//读取文件全部内容
	b,err := IoUtil.ReadFile(path)
	if err != nil {
		return ""
	}
	return strings.Replace(string(b),"\n","",-1)
}
 
func main() {
	fmt.Println("#############bios info#############")
	fmt.Println("bios_date:",SysinfoDmi.BiosDate)
	fmt.Println("bios_vend:",SysinfoDmi.Biosvendor)
	fmt.Println("bios_vers:",SysinfoDmi.Biosversion)
	fmt.Println("#############board info############")
	fmt.Println("board_asset_tag:",SysinfoDmi.BoardAssetTag)
	fmt.Println("board_name     :",SysinfoDmi.BoardName)
	fmt.Println("board_serial   :",SysinfoDmi.BoardSerial)
	fmt.Println("board_vendor   :",SysinfoDmi.Boardvendor)
	fmt.Println("board_version  :",SysinfoDmi.BoardVersion)
 
	fmt.Println("#############chassis info############")
	fmt.Println("chassis_asset_tag:",SysinfoDmi.ChassisAssetTag)
	fmt.Println("chassis_type     :",SysinfoDmi.ChassisType)
	fmt.Println("chassis_serial   :",SysinfoDmi.ChassisSerial)
	fmt.Println("chassis_vendor   :",SysinfoDmi.Chassisvendor)
	fmt.Println("chassis_version  :",SysinfoDmi.Chassisversion)
 
	fmt.Println("#############product info############")
	fmt.Println("product_name   :",SysinfoDmi.ProductName)
	fmt.Println("product_serial :",SysinfoDmi.ProductSerial)
	fmt.Println("product_uuid   :",SysinfoDmi.ProductUuid)
	fmt.Println("product_version:",SysinfoDmi.ProductVersion)
 
	fmt.Println("#############other   info############")
	fmt.Println("Modalias :",SysinfoDmi.Modalias)
	fmt.Println("Sysvendor:",SysinfoDmi.Sysvendor)
	fmt.Println("Uevent   :",SysinfoDmi.Uevent)
	fmt.Println("bay")
 
	// fmt.Printf("%+v\n",SysinfoDmi)
}

执行结果