GVKun编程网logo

Linux中几个获取硬件详细信息的命令(linux中几个获取硬件详细信息的命令是)

27

对于Linux中几个获取硬件详细信息的命令感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍linux中几个获取硬件详细信息的命令是,并为您提供关于Dmidecode:在Linux下获取硬件信息、

对于Linux中几个获取硬件详细信息的命令感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍linux中几个获取硬件详细信息的命令是,并为您提供关于Dmidecode: 在 Linux 下获取硬件信息、Inxi:获取Linux系统和硬件信息的神器、Linux C 获取硬件信息的一些方法、linux – 获取ubuntu服务器的服务器硬件详细信息的有用信息。

本文目录一览:

Linux中几个获取硬件详细信息的命令(linux中几个获取硬件详细信息的命令是)

Linux中几个获取硬件详细信息的命令(linux中几个获取硬件详细信息的命令是)

Linux中几个获取硬件详细信息的命令

在Linux系统特别是服务器系统中常常会需要查看设备的硬件信息,这时候使用命令查看就显得非常方便。本文介绍几个在Linux系统中查看硬件信息的命令,它们是lspcilsblklscpulsusb

lspci 命令

从命令的名称ls+pci的组合上大致也能看出来,lspci用于显示有关系统中的PCI总线以及与其连接的设备的信息。默认情况下,它显示设备的简短列表,如果配合指定的选项使用可以显示输出更详细的信息。

语法格式:

lspci [参数]

常用参数:

选项 描述
-n 以数字方式显示PCI厂商和设备代码
-t 以树状结构显示PCI设备的层次关系
-b 以总线为中心的视图
-s 仅显示指定总线插槽的设备和功能块信息
-i 指定PCI编号列表文件,不使用默认文件
-m 以机器可读方式显示PCI设备信息

使用示例:
默认情况下终端中直接输入该命令,显示当前主机的所有PCI总线信息:

lspci

输出类似如下:

00:00.0 Host bridge: Intel Corporation Xeon E7 v2/Xeon E5 v2/Core i7 DMI2 (rev 04)
00:01.0 PCI bridge: Intel Corporation Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 1a (rev 04)
00:02.0 PCI bridge: Intel Corporation Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 2a (rev 04)
00:02.2 PCI bridge: Intel Corporation Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 2c (rev 04)
00:03.0 PCI bridge: Intel Corporation Xeon E7 v2/Xeon E5 v2/Core i7 PCI Express Root Port 3a (rev 04)
00:05.0 System peripheral: Intel Corporation Xeon E7 v2/Xeon E5 v2/Core i7 VTd/Memory Map/Misc (rev 04)
00:05.2 System peripheral: Intel Corporation Xeon E7 v2/Xeon E5 v2/Core i7 IIO RAS (rev 04)
00:05.4 PIC: Intel Corporation Xeon E7 v2/Xeon E5 v2/Core i7 IOAPIC (rev 04)
.....

以树状结构显示PCI设备的层次关系:

lspci -t

输出:

-+-[0000:ff]-+-08.0
 |           +-09.0
 |           +-0a.0
 |           +-0a.1
 |           +-0a.2
 |           +-0a.3
 |           +-0b.0
 |           +-0b.3
 |           +-0c.0
 |           +-0c.1
 |           +-0c.2
 |           +-0c.3
 |           +-0d.0
 |           +-0d.1
 |           +-0d.2
 |           +-0d.3
 |           +-0e.0
 |           +-0e.1
 |           +-0f.0
 |           +-0f.1
 |           +-0f.2
 |           +-0f.3
 |           +-0f.4
 |           +-0f.5
 |           +-10.0
 |           +-10.1
 |           +-10.2
 |           +-10.3
 |           +-10.4
 |           +-10.5
 |           +-10.7
 |           +-13.0
 |           +-13.1
 |           +-13.4
 |           +-13.5
 |           +-16.0
 |           +-16.1
 |           \-16.2
 +-[0000:80]-+-00.0-[81]--
 |           +-05.0
 |           +-05.2
 |           \-05.4
......

如果想得到更详细的信息,可以使用如下命令:

lspci -vvx

-vv:使得 lspci 以过冗余模式显示更详细的信息 (事实上是 PCI 设备能给出的所有东西)。这些数据的确切意义没有在此手册页中解释,如果你想知道更多,请参照 /usr/include/linux/pci.h 或者 PCI 规范。

-x:以十六进制显示 PCI 配置空间 (configuration space) 的前64个字节映象 (标准头部信息)。此参数对调试驱动和lspci本身很有用。

更多关于lspci中说参数说明可以在终端中通过man lspci来查看。

lsblk命令

lsblk列出有关所有或指定块设备的信息,lsblk列出有关所有或指定块设备的信息。默认情况下,该命令以树状格式打印所有设备(RAM磁盘除外)。

语法格式:

lsblk [参数]

使用示例:

默认情况下直接输入命令,类似如下:

lsblk

输出:

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  1.1T  0 disk 
├─sda1   8:1    0  500M  0 part /boot
├─sda2   8:2    0 31.3G  0 part [SWAP]
└─sda3   8:3    0  1.1T  0 part /
sr0     11:0    1 1024M  0 rom  
  • NAME : 这是块设备名。
  • MAJ:MIN : 本栏显示主要和次要设备号。
  • RM : 本栏显示设备是否可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备。
  • SIZE : 本栏列出设备的容量大小信息。例如298.1G表明该设备大小为298.1GB,而1K表明该设备大小为1KB。
  • RO : 该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的。
  • TYPE :本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。
  • MOUNTPOINT : 本栏指出设备挂载的挂载点。

也可以列出指定设备的信息:

lsblk /dev/sda

输出类似:

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  1.1T  0 disk 
├─sda1   8:1    0  500M  0 part /boot
├─sda2   8:2    0 31.3G  0 part [SWAP]
└─sda3   8:3    0  1.1T  0 part /

lsblk命令也可以用于列出一个特定设备的拥有关系,同时也可以列出组和模式。可以通过以下命令来获取这些信息:

lsblk -m

输出:

NAME    SIZE OWNER GROUP MODE
sda     1.1T root  disk  brw-rw----
├─sda1  500M root  disk  brw-rw----
├─sda2 31.3G root  disk  brw-rw----
└─sda3  1.1T root  disk  brw-rw----
sr0    1024M root  cdrom brw-rw----

更多信息可以在终端中输入man lsblk查看。

lscpu命令

此命令用来显示cpu的相关信息 ,lscpu从sysfs和/proc/cpuinfo收集cpu体系结构信息,命令的输出比较易读。lscpu命令输出的信息包含cpu数量,线程,核数,套接字和Nom-Uniform Memeor Access(NUMA),缓存等 ,不是所有的列都支持所有的架构,如果指定了不支持的列,那么lscpu将打印列,但不显示数据 。

语法格式:

lscpu [参数]

常用参数:

参数 说明
-a 打印在线和离线的CPU
-b 仅打印在线CPU
-c 仅打印离线CPU
-h 打印帮助并退出
-V 打印当前版本号

默认情况下,终端中直接输入命令:

lscpu

输出内容类似如下:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                32
On-line CPU(s) list:   0-31
Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 62
Model name:            Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
Stepping:              4
CPU MHz:               1200.000
BogoMIPS:              5187.29
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              20480K
NUMA node0 CPU(s):     0-7,16-23
NUMA node1 CPU(s):     8-15,24-31

更多命令详细说明,可以在终端中输入man lscpu命令查看。

lsusb命令

lsusb命令用于显示本机的USB设备列表,以及USB设备的详细信息。lsusb命令显示的USB设备信息来自“/proc/bus/usb”目录下的对应文件。

语法格式:

lsusb [参数]

常用参数:

选项 描述
-v 显示USB设备的详细信息
-s<总线:设备号> 仅显示指定的总线和(或)设备号的设备
-d<厂商:产品> 仅显示指定厂商和产品编号的设备
-t 以树状结构显示无理USB设备的层次
-V 显示命令的版本信息

使用示例:

默认情况下,在终端中直接输入命令:

lsusb

显示USB设备列表:

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 046b:ff10 American Megatrends, Inc. Virtual Keyboard and Mouse
Bus 002 Device 003: ID 0424:2513 Standard Microsystems Corp. 2.0 Hub

以树状显示USB设备列表:

lsusb -t

输出:

/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/8p, 480M
        |__ Port 5: Dev 3, If 0, Class=hub, Driver=hub/3p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
        |__ Port 6: Dev 3, If 0, Class=HID, Driver=usbhid, 12M
        |__ Port 6: Dev 3, If 1, Class=HID, Driver=usbhid, 12M

显示USB设备详细信息:

lsusb -v

输出类似:

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            9 Hub
  bDeviceSubClass         0 Unused
  bDeviceProtocol         0 Full speed (or root) hub
  bMaxPacketSize0        64
  idVendor           0x1d6b Linux Foundation
  idProduct          0x0002 2.0 root hub
  bcdDevice            2.06
  iManufacturer           3 Linux 2.6.32-642.el6.x86_64 ehci_hcd
  iProduct                2 EHCI Host Controller
  iSerial                 1 0000:00:1a.0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           25
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 Unused
      bInterfaceProtocol      0 Full speed (or root) hub
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0004  1x 4 bytes
        bInterval              12
Hub Descriptor:
......

更多关于lsusb命令的详细描述可以在终端中输入man lsusb查看。

写在最后

本文主要讲解了lspcilsblklscpulsusb在Linux中查看相关硬件信息的命令,希望通过本文让您对这些命令有一个初步了解,也能知道在Linux系统中查询信息信息的方式,希望读您有所帮助。

如果想了解更多Linux中命令使用,可以下载Linux命令中文手册,关注我后,公号里面回复“命令”即可下载。

Dmidecode: 在 Linux 下获取硬件信息

Dmidecode: 在 Linux 下获取硬件信息

Dmidecode 这款软件允许你在 Linux 系统下获取有关硬件方面的信息。Dmidecode 遵循 SMBIOS/DMI 标准,其输出的信息包括 BIOS、系统、主板、处理器、内存、缓存等等。

Dmidecode 应该在主流的 Linux 发行版中都可以找到,因此你只需通过所用发行版的包管理器安装即可,如:

aptitude install dmidecode # Debian/Ubuntu
yum install dmidecode # Fedora
pacman -S dmidecode # Arch Linux
emerge -av dmidecode # Gentoo

不带选项执行 dmidecode 通常会输出所有的硬件信息,以下是在笔者机器上执行 dmidecode 后所得到的结果(部分):

\# dmidecode 2.10
SMBIOS 2.3 present.
26 structures occupying 1285 bytes.
Table at 0x000FC010.

Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
        Vendor: American Megatrends Inc.
        Version: 080012 
        Release Date: 02/06/2007
        Address: 0xF0000
        Runtime Size: 64 kB
        ROM Size: 512 kB
...

Dmidecode 有个很有用的选项 -t,可以按指定类型输出相关信息,假如要获得处理器方面的信息,则可以执行

dmidecode -t processor

输出:

# dmidecode 2.10
SMBIOS 2.3 present.

Handle 0x0004, DMI type 4, 35 bytes
Processor Information
        Socket Designation: CPU 1
        Type: Central Processor
        Family: Unknown
        Manufacturer: Intel            
        ID: F2 06 00 00 FF FB EB BF
        Version: Genuine Intel(R) CPU            2140  @ 1.60GHz     
        Voltage: 1.3 V
        External Clock: 200 MHz
        Max Speed: 1600 MHz
        Current Speed: 1600 MHz
        Status: Populated, Enabled
        Upgrade: Other
        L1 Cache Handle: 0x0005
        L2 Cache Handle: 0x0006
        L3 Cache Handle: 0x0007
        Serial Number: To Be Filled By O.E.M.
        Asset Tag: To Be Filled By O.E.M.
        Part Number: To Be Filled By O.E.M.

关于 Dmidecode 的更多用法,你可以通过指定 -h 选项查询。

原文出处:http://linuxtoy.org/archives/dmidecode.html

Inxi:获取Linux系统和硬件信息的神器

Inxi:获取Linux系统和硬件信息的神器

在这篇文章里,我们将看到如何使用inxi来获取这些详情信息。在论坛技术支持中,它可以作为调试工具,迅速确定用户的系统配置和硬件信息。

 

Inxi:获取Linux系统和硬件信息的神器Inxi:获取Linux系统和硬件信息的神器

Inxi是一个可以获取完整的系统和硬件详情信息的命令行工具,内容包括:

  1. 硬件
  2. CPU
  3. 磁盘驱动器
  4. Xorg
  5. 桌面环境
  6. 内核
  7. GCC版本
  8. 进程
  9. 内存占用
  10. 和其他有用的信息
安装方法

Inxi在多数现代GNU/Linux操作系统的默认软件仓库中。所以,我们可以简单地运行下列命令安装。

在基于Debian的发行版:
sudo apt-get install inxi
在Fedora:
sudo yum install inxi
在基于RHEL的发行版:

安装EPEL软件仓库:

sudo yum install epel-release

然后使用如下命令安装inxi:

sudo yum install inxi
使用方法

Inxi:获取Linux系统和硬件信息的神器Inxi:获取Linux系统和硬件信息的神器

在终端运行如下命令可以获取系统的概况信息。

inxi

示例输出:

CPU ~ core Intel Core i3 - 2350M CPU (- HT - MCP -) clocked at Min : 800.000Mhz Max : 1200.000Mhz Kernel ~ 3.13 . 0 - 45 - generic x86_64 Up ~ 6 : 41 Mem ~ 1537.7 / 3861.3MB HDD ~ 500.1GB ( 52.5 %used ) Procs ~ 183 Client ~ Shell  inxi ~ 1.9 . 17

当然,我们可以获取一个特定硬件的详情信息。比如获取声音/音频硬件详情信息,可以运行如下命令:

inxi-A

示例输出:

Audio: Card: Intel 6 Series/C200 Series Family High Definition Audio Controller driver: snd_hda_intel
Sound: Advanced Linux Sound Architecture ver: k3.13.0-45-generic

同样的,你可以获取显卡的详情信息。

inxi -G

示例输出:

Graphics:Card:Intel 2ndGenerationCoreProcessorFamilyIntegratedGraphicsController
X.Org:1.15.1 drivers: intel (unloaded: fbdev,vesa)Resolution:1366x768@60.0hz
GLX Renderer:Mesa DRI IntelSandybridgeMobile GLX Version:3.0Mesa10.3.0

硬盘信息呢?也是可以的。运行如下命令来获取完整的硬盘信息。

inxi -D

示例输出:

Drives: HDD Total Size: 500.1GB (52.5% used) 1: id: /dev/sda model: ST9601325BD size: 500.1GB

显示Bios和主板详情信息:

inxi -M

示例输出:

Machine: System: Dell (portable) product: Inspiron N5050
Mobo: Dell model: 01HXXJ version: A05 Bios: Dell version: A05 date: 08/03/2012

不仅是硬性详情信息,它也可以显示我们系统中的可用软件仓库列表

inxi -r

示例输出:

Repos: Active apt sources n file: /etc/apt/sources.list
deb http://ubuntu.excellmedia.net/archive/ trusty main restricted
deb-src http://ubuntu.excellmedia.net/archive/ trusty main restricted
deb http://ubuntu.excellmedia.net/archive/ trusty-updates main restricted
deb-src http://ubuntu.excellmedia.net/archive/ trusty-updates main restricted
deb http://ubuntu.excellmedia.net/archive/ trusty universe
.
.
Active apt sources n file: /etc/apt/sources.list.d/intellinuxgraphics.list
deb https://download.01.org/gfx/ubuntu/14.04/main trusty main #Intel Graphics drivers
Active apt sources n file: /etc/apt/sources.list.d/linrunner-tlp-trusty.list
Active apt sources n file: /etc/apt/sources.list.d/wseverin-ppa-trusty.list
deb http://ppa.launchpad.net/wseverin/ppa/ubuntu trusty main

Inxi还可以显示你所在位置的天气信息。感到意外吗?是的,它可以。

inxi -W Erode,Tamilnadu

这里Erode是地区,Tamilnadu是印度的一个邦。

示例输出:

Weather: Conditions: 79 F (26 C) - Clear Time: February 4, 6:00 PM IST
查看完整的硬件详情信息

Inxi:获取Linux系统和硬件信息的神器Inxi:获取Linux系统和硬件信息的神器

厌倦了逐一获取每种硬件的信息?你可以使用如下命令将所有信息一次列出:

inxi-F

示例输出:

System: Host: sk Kernel: 3.13.0-45-generic x86_64 (64 bit) Desktop: LXDE (Openbox 3.5.2) Distro: Ubuntu 14.04 trusty
Machine: System: Dell (portable) product: Inspiron N5050
Mobo: Dell model: 01HXXJ version: A05 Bios: Dell version: A05 date: 08/03/2012
CPU: Dual core Intel Core i3-2350M CPU (-HT-MCP-) cache: 3072 KB flags: (lm nx sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx)
Clock Speeds: 1: 800.00 MHz 2: 1000.00 MHz 3: 800.00 MHz 4: 800.00 MHz
Graphics: Card: Intel 2nd Generation Core Processor Family Integrated Graphics Controller
X.Org: 1.15.1 drivers: intel (unloaded: fbdev,vesa) Resolution: 1366x768@60.0hz
GLX Renderer: Mesa DRI Intel Sandybridge Mobile GLX Version: 3.0 Mesa 10.3.0
Audio: Card: Intel 6 Series/C200 Series Family High Definition Audio Controller driver: snd_hda_intel
Sound: Advanced Linux Sound Architecture ver: k3.13.0-45-generic
Network: Card-1: Qualcomm Atheros AR9285 Wireless Network Adapter (PCI-Express) driver: ath9k
IF: wlan0 state: up mac:
Card-2: Realtek RTL8101E/RTL8102E PCI Express Fast Ethernet controller driver: r8169
IF: eth0 state: down mac:
Drives: HDD Total Size: 500.1GB (52.5% used) 1: id:   /dev/sda model: ST9500325AS size: 500.1GB
Partition: ID: / size: 455G used: 245G (57%) fs: ext4 ID: /boot size: 236M used: 159M (72%) fs: ext2
ID: swap-1 size: 4.19GB used: 0.00GB (0%) fs: swap
RAID: No RAID devices detected - /proc/mdstat and md_mod kernel raid module present
Sensors: System Temperatures: cpu: 64.5C mobo: N/A
Fan Speeds (in rpm): cpu: N/A
Info: Processes: 186 Uptime: 6:52 Memory: 1547.2/3861.3MB Client: Shell (bash) inxi: 1.9.17

就像上面你看到的那样,inxi显示出了完整的硬件详情信息。

更多的细节可以参考man手册。

man inxi
结论

你在寻找一个可以显示完整的系统和硬件详情信息的简单工具吗?那么不用再找了,inxi会提供你所需要的。并且,它还是在你系统默认的软件仓库中的轻量级工具。你还想要更多东西吗?试一试它,你不会失望。

欢呼吧!

本文地址: https://www.linuxprobe.com/inxi-access-linux.html

Linux C 获取硬件信息的一些方法

Linux C 获取硬件信息的一些方法

Linux get hardware information over C

ioctl(input output controller)函数获取磁盘信息

  • 出现同一份代码RedHat上可以拿到 /dev/sda serial number, 在Ubuntu上出错

获取主板信息

出现有些主板找不到serial number,暂时有两种方法:

  • dmidecode工具,github.com上有repo fork
  • /sys/class/dmi/id/ 中直接读取

get mac info

获得Unix/Linux系统中的IP、MAC地址等信息_

.. _获得Unix/Linux系统中的IP、MAC地址等信息: http://programmerdigest.cn/2010/07/1050.html

  • ioctl函数没有纳入POXIS规范,各系统对ioctl的实现也不尽相同
  • ioctl函数的参数只有3个,但却是Unix中少有的几个“家族类”复杂函数.在传统上ioctl函数是用于那些普遍使用、但不适合归入其他类别的任何特殊的系统接口……网络程序(一般是服务器程序)中ioctl常用于在程序启动时获得主机上所有接口的信息:接口的地址、接口是否支持广播、是否支持多播,等等。

get cpu info

  • 方法一:C语言内部实现,使用 libcpuid库_

.. _libcpuid库: http://libcpuid.sourceforge.net/

.. code-block:: c

struct cpu_raw_data_t raw;                                             
struct cpu_id_t data;                                                  

if (cpuid_get_raw_data(&raw) < 0) {                                   
    printf("Sorry, cannot get the CPUID raw data.\n");
    printf("Error: %s\n", cpuid_error());                         
    return -2;
}

if (cpu_identify(&raw, &data) < 0) {                                  
    printf("Sorrry, CPU identification failed.\n");
    printf("Error: %s\n", cpuid_error());
    return -3;
}
printf("Found: %s CPU\n", data.vendor_str);                           
printf("Processor model is `%s''\n", data.cpu_codename);               
printf("The full brand string is `%s''\n", data.brand_str);            
printf("The processor has %dK L1 cache and %dK L2 cache\n", data.l1_data_cache, data.l2_cache);         
  • 方法二:从 /proc/cpuinfo 中直接读取, /proc/cpuinfo信息的格式说明在kernel中的代码_

.. _信息的格式说明在kernel中的代码: http://lxr.free-electrons.com/source/arch/x86/kernel/cpu/proc.c#L57

.. code-block:: c

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
   FILE *cmdline = fopen("/proc/cpuinfo", "rb");
   char *arg = 0;
   size_t size = 0;
   while(getdelim(&arg, &size, 0, cmdline) != -1)
   {
      puts(arg);
   }
   free(arg);
   fclose(cmdline);
   return 0;
}

判断是否虚拟机

使用RedHat virt-what工具/库,此工具可以判断很多VM

.. code-block:: c

#if defined(__i386__) || defined(__x86_64__)

static unsigned int
cpuid (unsigned int eax, char *sig)
{
  unsigned int *sig32 = (unsigned int *) sig;

  asm volatile (
        "xchgl %%ebx,%1; xor %%ebx,%%ebx; cpuid; xchgl %%ebx,%1"
        : "=a" (eax), "+r" (sig32[0]), "=c" (sig32[1]), "=d" (sig32[2])
        : "0" (eax));
  sig[12] = 0;

  return eax;
}

static void
cpu_sig (char* sig)
{
  unsigned int base = 0x40000000, leaf = base;
  unsigned int max_entries;

  memset (sig, 0, sizeof sig);
  max_entries = cpuid (leaf, sig);
  puts (sig);

  // return for determine
  if(strlen(siq) > 0){
    return;
  }

  /* Most hypervisors only have information in leaf 0x40000000, but
   * upstream Xen contains further leaf entries (in particular when
   * used with Viridian [HyperV] extensions).  CPUID is supposed to
   * return the maximum leaf offset in %eax, so that''s what we use,
   * but only if it looks sensible.
   */
  if (max_entries > 3 && max_entries < 0x10000) {
    for (leaf = base + 0x100; leaf <= base + max_entries; leaf += 0x100) {
      memset (sig, 0, sizeof sig);
      cpuid (leaf, sig);
      puts (sig);
      // if not empty, is ok
      if(strlen(sig) > 0){
        return;
      }
    }
  }
}

#else /* !i386, !x86_64 */

static void
cpu_sig (void)
{
  /* nothing for other architectures */
}

#endif

系统所在磁盘信息

先从 /etc/mtab 获取 /boot 所在硬盘,然后用 ioctl 获取,未确定此方式的稳定性

.. code-block:: c

FILE *fp;
char disk_name[10];
char str_find[] = "/boot";
char buf_line[128];
static struct hd_driveid hd;
int fd;
int tmp_len = 0;

fp = fopen ("/etc/mtab", "rb");
if (fp == NULL)
{
fprintf(stderr, "No /etc/mtab file.\n");
return 0;
}

while(fgets(buf_line, sizeof(buf_line), fp)) {
    if(strstr(buf_line, str_find) != NULL){
        printf("debug: %s\n", buf_line);
        break;
    }
}   
// TODO "/boot" extract
if(sscanf(buf_line, "%s /boot", disk_name) == -1)
{
    printf("Error: can not get disk name\n");   
}

// delete number, e.g. /dev/sda1
tmp_len = strlen(disk_name);
disk_name[tmp_len -1 ] = ''\0'';

if (geteuid() >  0) {
  printf("ERROR: Must be root to use\n");
  exit(1);
}
// TODO
if ((fd = open(disk_name, O_RDONLY|O_NONBLOCK)) < 0) {
  printf("ERROR: Cannot open device %s\n", disk_name);
  exit(1);
}

if (!ioctl(fd, HDIO_GET_IDENTITY, &hd)) {
    const int nSNLength = 20;
    strSN = "";
        
    for(int i=0; i < nSNLength; i++){
        if(hd.serial_no[i] < 32 || hd.serial_no[i] == 127)
            {
            strSN += ''.'';
            }
        else{
            strSN += (char)hd.serial_no[i];
            }
    }
    printf("debug: Disk Serial Number: %.20s\n", strSN.GetData());
    return 1;
} else if (errno == -ENOMSG) {
  printf("No hard disk identification information available\n");
  return 0;
} else {
  perror("ERROR: HDIO_GET_IDENTITY");
  exit(1);
}

PS: 虽rst与markdown格式相近,但OSC对rst不支持,很多地方没渲染啊。

linux – 获取ubuntu服务器的服务器硬件详细信息

linux – 获取ubuntu服务器的服务器硬件详细信息

我想知道什么是命令,它将向我显示服务器硬件[通过ssh访问],比如安装了多少Gb RAM,cpu速度等等.

谢谢.

解决方法

快速而肮脏的方式:

cat /proc/meminfo

cat /proc/cpuinfo

今天的关于Linux中几个获取硬件详细信息的命令linux中几个获取硬件详细信息的命令是的分享已经结束,谢谢您的关注,如果想了解更多关于Dmidecode: 在 Linux 下获取硬件信息、Inxi:获取Linux系统和硬件信息的神器、Linux C 获取硬件信息的一些方法、linux – 获取ubuntu服务器的服务器硬件详细信息的相关知识,请在本站进行查询。

本文标签: