linux 提取edid Linux 硬體資訊獲取

2021-10-13 02:35:18 字數 3382 閱讀 5303

在 linux 上可以通過 dmidecode 或是 lshw 來獲取硬體資訊,能夠方便的檢視系統配置。但它們的輸出資訊過多,解析起來有些麻煩,另外 lshw 對 usb 介面的網絡卡支援不好,顯示的資訊不夠,所以在此整理下通過讀檔案或是一些簡單命令來獲取硬體資訊的方法。

dmi一般情況下核心預設載入了 dmi sysfs ,路徑是 /sys/class/dmi 。裡面包含了 bios , board , product 等資訊。

bios

通過命令 ls -l /sys/class/dmi/id/bios_* 可以看到支援的 bios 字段,如下:

$ ls -l /sys/class/dmi/id/bios_*

-r--r--r-- 1 root root 4.0k 5月 8 17:18 /sys/class/dmi/id/bios_date

-r--r--r-- 1 root root 4.0k 5月 8 17:18 /sys/class/dmi/id/bios_vendor

-r--r--r-- 1 root root 4.0k 5月 8 17:18 /sys/class/dmi/id/bios_version

直接讀檔案即可獲取對應值。

board

通過命令 ls -l /sys/class/dmi/id/board_* 可以看到支援的 board 字段,如下:

$ ls -l /sys/class/dmi/id/board_*

-r--r--r-- 1 root root 4.0k 5月 8 08:45 /sys/class/dmi/id/board_asset_tag

-r--r--r-- 1 root root 4.0k 5月 8 08:45 /sys/class/dmi/id/board_name

-r-------- 1 root root 4.0k 5月 8 08:45 /sys/class/dmi/id/board_serial

-r--r--r-- 1 root root 4.0k 5月 8 08:43 /sys/class/dmi/id/board_vendor

-r--r--r-- 1 root root 4.0k 5月 8 08:45 /sys/class/dmi/id/board_version

直接讀檔案即可獲取對應值,但有些檔案需要 root 許可權。

product

通過命令 ls -l /sys/class/dmi/id/product_* 可以看到支援的 product 字段,如下:

$ ls -l /sys/class/dmi/id/product_*

-r--r--r-- 1 root root 4.0k 5月 8 08:45 /sys/class/dmi/id/product_family

-r--r--r-- 1 root root 4.0k 5月 8 08:43 /sys/class/dmi/id/product_name

-r-------- 1 root root 4.0k 5月 8 08:45 /sys/class/dmi/id/product_serial

-r--r--r-- 1 root root 4.0k 5月 8 17:12 /sys/class/dmi/id/product_sku

-r-------- 1 root root 4.0k 5月 8 08:45 /sys/class/dmi/id/product_uuid

-r--r--r-- 1 root root 4.0k 5月 8 08:45 /sys/class/dmi/id/product_version

直接讀檔案即可獲取對應值,但有些檔案需要 root 許可權。

其中 product_uuid 可作為機器的唯一 id 。

cpu通過讀取檔案 /proc/cpuinfo 可獲取 cpu 的資訊,一般 model name 欄位為 cpu 名稱,如:

$ cat /proc/cpuinfo|grep 'model name'

model name : intel(r) core(tm) i7-3520m cpu @ 2.90ghz

model name : intel(r) core(tm) i7-3520m cpu @ 2.90ghz

model name : intel(r) core(tm) i7-3520m cpu @ 2.90ghz

model name : intel(r) core(tm) i7-3520m cpu @ 2.90ghz

但在龍芯,申威上可能不是這個字段,需要根據檔案內容確定。

memory

通過讀取檔案 /proc/meminfo 可獲取記憶體總大小,欄位是 memtotal ,如:

$ cat /proc/meminfo |grep memtotal

memtotal: 7860064 kb

對於記憶體廠商等資訊還未找到獲取方法,待以後補全。

disk

硬碟資訊這裡使用 lsblk 來獲取,通過指定它的引數來獲取,如:

$ lsblk -j -bno name,serial,type,size,vendor,model,mountpoint,uuid

"blockdevices": [,,

,,引數的含義通過 lsblk -h 命令檢視。

只有 type 為 disk 時才表示為一塊硬碟,其它如 loop 則應該過濾掉。 每塊硬碟中的 children 表示它下面的分割槽,通過 mountpoint 可確定硬碟在此系統上的使用情況。

network

這裡是先獲取系統上的網路介面,這包括了物理網絡卡和虛擬網絡卡(如 docker 建立的)。

所以要先過濾,過濾順序如下:

1. 按名字過濾

過濾掉 lo

2. 按驅動過濾

過濾掉驅動為 dummy, veth, vboxnet, vmnet, vmxnet, vmxnet2, vmxnet3 的網絡卡, 虛擬機器中的

3. 按網絡卡型別過濾

過濾掉 bridge 型別的網絡卡

如果網絡卡介面同時存在於 /sys/class/net/ 和 /sys/devices/virtual/net/ 中,則需要過濾掉。

接下來分別給出網絡卡資訊獲取的方法:

inte***ce name

即是上面的目錄下的子目錄名

mac address

讀取檔案 /sys/class/net//address 可得到

ip通過呼叫 ioctl 來獲取指定 iface name 的 ip ,**大致如下:

char* get_ip_for_iface(char *iface)

int fd;

struct ifreq ifr;

fd = socket(af_inet, sock_dgram, 0);

if (fd == -1) ]

輸出可知本機沒有指紋裝置。

實現這裡用 go 實現了 hardware ,見此: hardware

linux映象提取

如果你是乙個喜歡編譯核心的狂人,同時也是經常忘記將預設的.config檔案備份的懶傢伙,那麼下面的方法將會使你 的核心配置工作變得更輕鬆,從linux 2.6開始核心提供了一種將.config附加到映像檔案的方法,通過這種方法,核心 配置者可以不必備份當前的.config檔案,而是在需要的時候直接從...

Linux 資料提取

有時候我們需要從檔案裡提取資料,當然也可能是老闆甩過來乙個檔案讓你把裡面的 和郵箱全部提取,這時候一條一條的複製貼上總是太麻煩,這個時候我們就需要利用一些命令和正規表示式在linux系統中自動提取出來。1.提取data2檔案中的數字開頭的行,並把他們寫入 home root num中。2.提取dat...

linux 提取cpio cpio命令

cpio是用來建立 還原備份檔的工具程式,它可以加入 解開cpio或tar備份檔內.cpio 可以從 cpio 或 tar 格式的歸檔包中存入和讀取檔案,歸檔包是一種包含其他檔案和有關資訊的檔案。有關資訊包括 檔名,屬主,時標 timestamp 和訪問許可權。歸檔包可以是磁碟上的 其他檔案,也可以...