机箱里有什么? 探查你的 Linux 机器的硬件

作者: Federico Kereki

我最近在尝试为我的机器安装 NVIDIA 驱动程序时遇到了问题。 似乎最新的驱动程序已停止支持我的显卡,并且在更新内核后,我没有了驱动程序。 显然,问题是“我有什么显卡?” 但是,我不记得了。 如果您需要说出主板的芯片组名称、指定机箱中的 CPU 或获取任何其他类型的硬件相关信息,Linux 提供了几个实用程序来帮助您。 在我的情况下,我可以快速获得显卡的完整 ID,确认它确实有点过时了,并决定更换一块新的显卡并不是一个坏主意。

在本文中,我将讨论几种获取机器硬件数据的方法。 在最传统的 Linux shell 方式中,我展示了如何使用几个命令行实用程序,但是如果您更喜欢使用 GUI,我也包含一些图形程序。 而且,如果您想深入了解细节,我将提供一些关于如何使用 /proc 或 /sys 文件系统获取信息的提示。

词汇表

使用硬件意味着要处理几个首字母缩略词,我必须承认,我一直在使用其中至少几个,但没有精确地记住它们的含义。 这里列出您肯定需要的定义

  • ACPI (高级配置和电源接口):与电源方面相关。

  • AGP (加速图形端口):允许连接视频显卡的通道(自 2008 年左右以来不常见)。

  • APM (高级电源管理):比 ACPI 更旧,也与电源问题相关。

  • ATA (AT 连接): “AT”,如旧的 IBM AT,一种连接存储设备的标准,于 2003 年被 SATA 取代。

  • BIOS (基本输入/输出系统):在启动 Intel 兼容 PC 时使用的固件。

  • DMA (直接内存访问):一种允许硬件访问 RAM 的功能,独立于 CPU。

  • DMI (桌面管理接口):用于跟踪计算机中设备的框架。

  • IDE (集成驱动器电子设备):后来发展为 ATA 的接口标准。

  • IRQ (中断请求):一种硬件信号,允许中断处理程序处理给定的事件。

  • PCI (外围组件互连):一种总线标准,用于将各种硬件设备连接到计算机,创建于 1992 年。

  • UEFI (统一 EFI—可扩展固件接口):2005 年取代 BIOS,后者弃用了之前的 1998 年 EFI 标准。

  • USB (通用串行总线):1995 年定义的标准总线,允许将各种外围设备连接到计算机。

  • PATA (并行 ATA):SATA 出现后 ATA 的新名称。

  • PCIe (PCI Express):2004 年取代 PCI 和 AGP 的高速串行总线。

  • RAID (独立磁盘冗余阵列—最初是“廉价的”磁盘):一种数据存储虚拟化技术,它将多个驱动器组合在一起,作为一个驱动器工作,以提高性能和/或数据冗余。 有几种 RAID 方案,包括 RAID 0 (“条带化”)、RAID 1 (“镜像”)、RAID 5 (“条带化 + 奇偶校验”) 和 RAID 10 (“条带化 + 镜像”)。

  • SATA (串行 ATA):一种用于连接存储设备的总线接口,目前几乎在所有 PC 中使用。

  • SCSI (小型计算机系统接口—发音为 “scuzzy”):一套用于连接设备以及在计算机和外围设备之间传输数据的标准。

ls 命令家族

让我们从一组以 ls 开头的实用程序开始命令行工作(表 1)。 其中一些命令提供重叠的信息(例如 lsdevlshw),但是通过使用所有这些命令,您可以清楚地了解 Linux 机箱内部可能包含的任何内容。

表 1. ls* 命令家族让您可以访问硬件的各个方面。
命令 描述
lsblk 生成有关所有块设备的信息,例如硬盘、DVD 读取器等。
lscpu 显示诸如 CPU 数量、核心数、线程数等信息。
lsdev 显示系统识别的所有设备的数据。
lshw 列出一般硬件数据——提供有关硬件每个细节的信息。
lspci 显示有关机箱中 PCI 总线以及连接到它们的设备的信息,例如显卡、网络适配器等。
lsscsi 提供有关连接到机箱的所有 SCSI 设备或主机的信息,例如硬盘驱动器或光驱。
lsusb 生成有关机箱中 USB 总线以及连接到它们的设备的信息。

让我们从 CPU 信息开始。 lscpu 命令提供有关机箱中 CPU 的数据。 您可以选择使用 -.all 参数包含所有 CPU,无论是在线还是离线,或者您可以选择 --online--offline--parse 选项允许您选择要列出的 CPU 特性,包括数量、插槽、缓存数据、最大和最小速度(以 MHz 为单位)等。 在我的情况下,您将看到我的机器有一个有点旧的单插槽、四核 Intel Core 2 Quad CPU,频率为 2.66GHz


> lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  4
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               23
Model name:          Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz
Stepping:            10
CPU MHz:             2003.000
CPU max MHz:         2670.0000
CPU min MHz:         2003.0000
BogoMIPS:            5340.67
Virtualization:      VT-x
L1d cache:           32K
L1i cache:           32K
L2 cache:            2048K
NUMA node0 CPU(s):   0-3

(注意:您可以通过检查 /proc/cpuinfo 文件或浏览 /sys/bus/cpu/ 目录来获取此信息的大部分;有关更多信息,请参阅“使用 /proc 和 /sys DIY”侧边栏。)

让我们继续讨论块设备,例如硬盘或 CD 和 DVD 驱动器。 lsblk 命令生成有关所有可用块设备的信息(有关示例,请参见列表 1)。 如您所见,我有三个硬盘和一个 ROM (DVD) 设备。 这三个磁盘称为 /dev/sda、/dev/sdb 和 /dev/sdc; ROM 设备是 /dev/sr0。 磁盘大小分别为 466GB、149GB 和 2.7TB。 您也可以获得一些关于分区的信息; 例如,您可以看到前两个磁盘启用了交换区,但第三个磁盘没有。 您还可以获得三个磁盘的挂载点 (/, /disk-laptop 和 /disk-data)。

列表 1. lsblk 命令显示所有块(存储)设备。 --topology 选项添加了额外的细节; 尝试 --output-all 以获得更多信息。

> lsblk --paths
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
/dev/sda      8:0    0 465.8G  0 disk 
|__/dev/sda1  8:1    0     4G  0 part [SWAP]
|__/dev/sda2  8:2    0 461.8G  0 part /
/dev/sdb      8:16   0 149.1G  0 disk 
|__/dev/sdb1  8:17   0     4G  0 part [SWAP]
|__/dev/sdb2  8:18   0   145G  0 part /disk-laptop
/dev/sdc      8:32   0   2.7T  0 disk 
|__/dev/sdc1  8:33   0   2.7T  0 part /disk-data
/dev/sr0     11:0    1  1024M  0 rom 

> lsblk --paths --topology
NAME   ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE  RA WSAME
sda            0    512      0     512     512    1 cfq       128 128    0B
|__sda1        0    512      0     512     512    1 cfq       128 128    0B
|__sda2        0    512      0     512     512    1 cfq       128 128    0B
sdb            0    512      0     512     512    1 cfq       128 128    0B
|__sdb1        0    512      0     512     512    1 cfq       128 128    0B
|__sdb2        0    512      0     512     512    1 cfq       128 128    0B
sdc            0   4096      0    4096     512    1 cfq       128 128    0B
|__sdc1        0   4096      0    4096     512    1 cfq       128 128    0B
sr0            0    512      0     512     512    1 cfq       128 128    0B

有许多可能的可选参数,但最常用的参数是 --paths,它生成完整的设备路径,以及 --topology,如果您对内部细节感兴趣,例如物理扇区大小、I/O 调度器名称等等。 您可以使用 --perm 获取所有者、组和权限信息,如下所示(并且,如果您真的想要详细信息,请尝试 --output-all,这将列出大约 50 列的数据)


> lsblk --perm
NAME      SIZE OWNER GROUP MODE
sda     465.8G root  disk  brw-rw----
|__sda1     4G root  disk  brw-rw----
|__sda2 461.8G root  disk  brw-rw----
sdb     149.1G root  disk  brw-rw----
|__sdb1     4G root  disk  brw-rw----
|__sdb2   145G root  disk  brw-rw----
sdc       2.7T root  disk  brw-rw----
|__sdc1   2.7T root  disk  brw-rw----
sr0      1024M root  cdrom brw-rw----

对于 SCSI 设备,您可以将 --scsi 添加到 lsblk,但也有更具体的 lsscsi 命令。 它生成的基本信息如下所示,它包括所有可用的 SCSI 设备。 在我的情况下,它显示了我已经通过 lsblk 找到的三个硬盘和光盘读取器,以及三个读卡器。 请注意,您还可以获得有关特定品牌和型号的更多信息。 例如,我有两个西部数据硬盘驱动器(WD5000AAKS 和 WD30EZRX),加上一个迈拓笔记本电脑驱动器(STM316021)和一个索尼 AD-7200S DVD 驱动器


> lsscsi
[2:0:0:0] disk   ATA  WDC WD5000AAKS-0 1D05 /dev/sda 
[2:0:1:0] disk   ATA  MAXTOR STM316021 D    /dev/sdb 
[3:0:0:0] disk   ATA  WDC WD30EZRX-00M 0A80 /dev/sdc 
[3:0:1:0] cd/dvd SONY DVD RW AD-7200S  1.61 /dev/sr0 
[4:0:0:0] disk   Sony Card_R/W     -CF 1.11 /dev/sdd 
[4:0:0:1] disk   Sony Card_R/W     -SD 1.11 /dev/sde 
[4:0:0:2] disk   Sony Card_R/W     -MS 1.11 /dev/sdf 

通过 lsscsi --help 查看此命令的所有可能性。 您会看到您真的可以使用它深入挖掘 SCSI 设备。 而且,如果您有兴趣,此命令通过扫描 /sys 文件系统来工作(请参阅“资源”以及“使用 /proc 和 /sys DIY”侧边栏以获取更多信息)。

现在,让我们继续讨论其他一些命令。 lsusb 提供有关所有 USB 连接设备的信息; 有关示例,请参见列表 2。 (另一种选择是 usb-devices,但它的输出有点晦涩难懂,并且没有配置选项。) 与大多数现代计算机一样,您可能有很多这样的设备。 在我的情况下,我有一个蓝牙适配器、网络摄像头、键盘、鼠标等等。 您可以使用 -s 选项获取有关特定总线或设备的信息,或者使用 -d 选项选择给定的供应商; 对于后者,请查看 USB ID 存储库(请参阅“资源”)以获取供应商/设备编号。 最后,如果您想要非常详细的信息,请尝试 -v(详细)选项,但请准备好阅读大量内容。 对于我的机器,lsusb -v 生成超过 1,300 行输出。

列表 2. lsusb 命令报告所有 USB 连接的设备,以列表或树形形式。

> lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 
 ↪2.0 root hub
Bus 005 Device 002: ID 054c:01bd Sony Corp. MRW62E 
 ↪Multi-Card Reader/Writer
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 
 ↪root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 
 ↪root hub
Bus 003 Device 002: ID 0a12:0001 Cambridge Silicon 
 ↪Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 003 Device 006: ID 1e4e:0100 Cubeternet WebCam
Bus 003 Device 005: ID 046d:c317 Logitech, Inc. 
 ↪Wave Corded Keyboard
Bus 003 Device 004: ID 04f3:0232 Elan 
 ↪Microelectronics Corp. Mouse
Bus 003 Device 003: ID 05e3:0608 Genesys Logic, 
 ↪Inc. Hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 
 ↪1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 
 ↪1.1 root hub

> lsusb --tree
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 2: Dev 2, If 0, Class=Mass Storage, 
         ↪Driver=usb-storage, 12M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/4p, 12M
        |__ Port 1: Dev 4, If 0, Class=Human Interface Device, 
             ↪Driver=usbhid, 1.5M
        |__ Port 2: Dev 5, If 0, Class=Human Interface Device, 
             ↪Driver=usbhid, 1.5M
        |__ Port 2: Dev 5, If 1, Class=Human Interface Device, 
             ↪Driver=usbhid, 1.5M
        |__ Port 3: Dev 6, If 0, Class=Video, Driver=uvcvideo, 12M
        |__ Port 3: Dev 6, If 1, Class=Video, Driver=uvcvideo, 12M
    |__ Port 2: Dev 2, If 0, Class=Wireless, Driver=btusb, 12M
    |__ Port 2: Dev 2, If 1, Class=Wireless, Driver=btusb, 12M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/8p, 480M

另一个可以生成大量信息的命令是 lspci,它显示有关 PCI 设备的所有数据。 事实上,这正是我用来记住我有什么显卡的实际命令


# lspci
00:00.0 Host bridge: Intel Corporation 4 Series 
 ↪Chipset DRAM Controller (rev 03)
00:01.0 PCI bridge: Intel Corporation 4 Series 
 ↪Chipset PCI Express Root Port (rev 03)
00:1b.0 Audio device: Intel Corporation NM10/ICH7 
 ↪Family High Definition Audio Controller (rev 01)
00:1c.0 PCI bridge: Intel Corporation NM10/ICH7 
 ↪Family PCI Express Port 1 (rev 01)
00:1c.1 PCI bridge: Intel Corporation NM10/ICH7 
 ↪Family PCI Express Port 2 (rev 01)
00:1d.0 USB controller: Intel Corporation NM10/ICH7 
 ↪Family USB UHCI Controller #1 (rev 01)
00:1d.1 USB controller: Intel Corporation NM10/ICH7 
 ↪Family USB UHCI Controller #2 (rev 01)
00:1d.2 USB controller: Intel Corporation NM10/ICH7 
 ↪Family USB UHCI Controller #3 (rev 01)
00:1d.3 USB controller: Intel Corporation NM10/ICH7 
 ↪Family USB UHCI Controller #4 (rev 01)
00:1d.7 USB controller: Intel Corporation NM10/ICH7 
 ↪Family USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI 
 ↪Bridge (rev e1)
00:1f.0 ISA bridge: Intel Corporation 82801GB/GR 
 ↪(ICH7 Family) LPC Interface Bridge (rev 01)
00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 
 ↪Family) IDE Controller (rev 01)
00:1f.2 IDE interface: Intel Corporation NM10/ICH7 
 ↪Family SATA Controller [IDE mode] (rev 01)
00:1f.3 SMBus: Intel Corporation NM10/ICH7 Family 
 ↪SMBus Controller (rev 01)
01:00.0 Ethernet controller: Qualcomm Atheros AR8152 
 ↪v2.0 Fast Ethernet (rev c1)
04:00.0 VGA compatible controller: NVIDIA Corporation 
 ↪GK107 [GeForce GT 740] (rev a1)
04:00.1 Audio device: NVIDIA Corporation GK107 HDMI 
 ↪Audio Controller (rev a1)

尝试 -v-vv 选项,以获得详细和非常详细的列表。 为了获得有关我的(当前)显卡的完整信息,我按照列表 3 所示进行操作。 我现在有一个 NVIDIA GeForce 740,并且我正在使用 nouveau 内核驱动程序以及其他内部细节。 当然,要完全理解生成的信息,您必须对 PCI 设备有一定的经验。 尝试使用 -vv 运行相同的命令,您就会明白我在说什么。

列表 3. -v 选项提供更详细的信息; -vv 甚至更深入。

# lspci -v -s 4:00.0
04:00.0 VGA compatible controller: NVIDIA Corporation 
 ↪GK107 [GeForce GT 740] (rev a1) 
 ↪(prog-if 00 [VGA controller])
    Subsystem: eVga.com. Corp. Device 2742
    Flags: bus master, fast devsel, latency 0, IRQ 27
    Memory at fd000000 (32-bit, non-prefetchable) [size=16M]
    Memory at e0000000 (64-bit, prefetchable) [size=256M]
    Memory at de000000 (64-bit, prefetchable) [size=32M]
    I/O ports at ec00 [size=128]
    [virtual] Expansion ROM at fe000000 [disabled] [size=512K]
    Capabilities: [60] Power Management version 3
    Capabilities: [68] MSI: Enable+ Count=1/1 Maskable- 64bit+
    Capabilities: [78] Express Endpoint, MSI 00
    Capabilities: [b4] Vendor Specific Information: Len=14
    Capabilities: [100] Virtual Channel
    Capabilities: [128] Power Budgeting
    Capabilities: [600] Vendor Specific Information: ID=0001 
     ↪Rev=1 Len=024
    Capabilities: [900] #19
    Kernel driver in use: nouveau
    Kernel modules: nouveau

如果您更懂电子/数字技术,lsdev 会生成有关您安装的硬件的信息,包括中断、端口、地址和所有此类内部细节。 此命令不提供任何选项,除非您与硬件非常密切地打交道,否则您不太可能使用它。 列表 4 显示了输出的缩写示例。 此命令扫描 /proc/interrupts、/proc/ioports 和 /proc/dma,如“使用 /proc 和 /sys DIY”侧边栏中所述。

列表 4. lsdev 命令提供有关中断、端口和直接内存访问的信息。

> lsdev
Device          DMA   IRQ  I/O Ports
------------------------------------------------
                        7 
0000:00:1d.0               c480-c49f
0000:00:1d.1               c800-c81f
0000:00:1d.2               c880-c89f
...
... (several lines snipped out)
...
eth0                   29 
fpu                        00f0-00ff
gpio_ich                   0480-04bf 04b0-04bf
i801_smbus             19  0400-041f
i8042                1 12 
iTCO_wdt                   0830-0833 0830-0833 0860-087f 0860-087f
keyboard                   0060-0060 0064-0064
...
... (several lines snipped out)
...
timer                   0 
timer0                     0040-0043
timer1                     0050-0053
uhci_hcd                   c480-c49f c800-c81f c880-c89f cc00-cc1f
uhci_hcd:usb2          23 
uhci_hcd:usb3          19 
uhci_hcd:usb4          18 
uhci_hcd:usb5          16 
vesafb                     03c0-03df

最后,如果您已经看到这里,lshw 命令是一种包罗万象的命令,可以生成有关您安装的所有硬件的大量信息。 -short 选项提供机箱中所有内容的(有点)缩写列表(请参见列表 5,并注意一些有趣的行“To Be Filled By O.E.M.”,这表明有人在设置我的主板时很粗心)。 使用此命令,您可以获得有关系统、总线、内存、处理器、显示器、网络和所有其他内容的信息。

列表 5. lshw 命令包含有关您所有硬件的信息。""

# lshw -short
H/W path               Device      Class          Description
=============================================================
                                   system         To Be Filled 
 ↪By O.E.M.
/0                                 bus            G41M-VS3.
/0/0                               memory         64KiB BIOS
/0/4                               processor      Core 2 Quad (To Be 
 ↪Filled By O.E.M.)
/0/4/5                             memory         128KiB L1 cache
/0/4/6                             memory         4MiB L2 cache
/0/d                               memory         4GiB System Memory
/0/d/0                             memory         4GiB DIMM SDRAM 
 ↪Synchronous
/0/d/1                             memory         DIMM [empty]
/0/100                             bridge         4 Series Chipset 
 ↪DRAM Controller
/0/100/1                           bridge         4 Series Chipset 
 ↪PCI Express Root Port
/0/100/1/0                         display        GK107 [GeForce 
 ↪GT 740]
/0/100/1/0.1                       multimedia     GK107 HDMI Audio 
 ↪Controller
/0/100/1b                          multimedia     NM10/ICH7 Family 
 ↪High Definition Audio Controller
/0/100/1c                          bridge         NM10/ICH7 Family 
 ↪PCI Express Port 1
/0/100/1c.1                        bridge         NM10/ICH7 Family 
 ↪PCI Express Port 2
/0/100/1c.1/0          eth0        network        AR8152 v2.0 Fast 
 ↪Ethernet
/0/100/1d                          bus            NM10/ICH7 Family 
 ↪USB UHCI Controller #1
/0/100/1d/1            usb2        bus            UHCI Host Controller
/0/100/1d.1                        bus            NM10/ICH7 Family 
 ↪USB UHCI Controller #2
/0/100/1d.1/1          usb3        bus            UHCI Host Controller
/0/100/1d.1/1/1                    bus            USB2.0 Hub
/0/100/1d.1/1/1/1                  input          OM
/0/100/1d.1/1/1/2                  input          USB Multimedia 
 ↪Keyboard
/0/100/1d.1/1/1/3                  multimedia     USB2.0 Camera
/0/100/1d.1/1/2                    communication  Bluetooth Dongle 
 ↪(HCI mode)

...several lines snipped out...

/0/1                   scsi2       storage        
/0/1/0.0.0             /dev/sda    disk           500GB WDC 
 ↪WD5000AAKS-0
/0/1/0.0.0/1           /dev/sda1   volume         4102MiB Linux 
 ↪swap volume
/0/1/0.0.0/2           /dev/sda2   volume         461GiB EXT4 volume
/0/1/0.1.0             /dev/sdb    disk           160GB MAXTOR 
 ↪STM316021
/0/1/0.1.0/1           /dev/sdb1   volume         4094MiB Linux 
 ↪swap volume
/0/1/0.1.0/2           /dev/sdb2   volume         145GiB EXT3 volume
/0/2                   scsi3       storage        
/0/2/0.0.0             /dev/sdc    disk           3TB WDC 
 ↪WD30EZRX-00M
/0/2/0.0.0/1           /dev/sdc1   volume         2794GiB EXT4 volume
/0/2/0.1.0             /dev/cdrom  disk           DVD RW AD-7200S

请注意列表 5 中的“class”列。 您可以使用 -class 参数限制输出,从而获得 lshw 可以提供的完整信息的提示。 例如,请参阅下面有关我的网卡的详细规格; 它显示了供应商、型号和大量其他细节(警告:如果您不使用 -short 限制命令,您将获得这种输出; 对于我的机器,没有额外选项的 lshw 会生成超过 500 行的列表)


# lshw -class network
  *-network               
    description: Ethernet interface
    product: AR8152 v2.0 Fast Ethernet
    vendor: Qualcomm Atheros
    physical id: 0
    bus info: pci@0000:01:00.0
    logical name: eth0
    version: c1
    serial: bc:5f:f4:12:e0:f1
    size: 100Mbit/s
    capacity: 100Mbit/s
    width: 64 bits
    clock: 33MHz
    capabilities: pm msi pciexpress vpd bus_master 
 ↪cap_list ethernet physical tp 10bt 10bt-fd 
 ↪100bt 100bt-fd autonegotiation
    configuration: autonegotiation=on broadcast=yes 
 ↪driver=atl1c driverversion=1.0.1.1-NAPI 
 ↪duplex=full latency=0 link=yes multicast=yes 
 ↪port=twisted pair speed=100Mbit/s
    resources: irq:29 memory:fcfc0000-fcffffff 
 ↪ioport:dc00(size=128)

lshw 命令还有其他几个有趣的选项。 例如,它可以生成 HTML 或 XML 输出(添加 -html-xml 选项); 前者适合在浏览器中显示,而后者在您想要存储或处理硬件信息时很有用。 有关我的机箱完整硬件描述的一小部分,请参见图 1。 出于安全目的,-sanitize 选项会删除敏感信息,例如序列号。 甚至还有一个 -X 选项可以使用图形界面(我稍后会介绍)。

图 1. lshw 命令也可以生成 HTML 或 XML 输出; 这里显示的是前者。

到目前为止,我已经讨论了几个 ls* 命令,即使它们实际上不是一个“家族”,但它们是我最喜欢的工具。 通过键入 ls 并让预输入建议其余部分,很容易记住它们。 但是,还有更多的命令行可能性,所以让我们看一下。

什么是 SMBIOS?

Linux 如何识别安装了哪些设备? 自 1995 年以来,SMBIOS(系统管理 BIOS)规范提供了此类信息,消除了对硬件探测等潜在的令人担忧的操作的需求。 此标准(由 DMI 使用)适用于 Intel 32 位和 64 位处理器架构系统。 基本上,它为每种设备(例如 CPU、RAM、系统插槽等)定义了一个具有适当数据的结构。 原则上,您可以自己解析和解码此表,但本文中显示的几个命令已经完成了这项工作。 如果您对标准的具体细节感到好奇,请参阅“资源”部分。

更多命令行选项

让我们从一些通用命令开始。 第一个 dmidecode 允许您以更易读的格式转储计算机的 DMI(或 SMBIOS;请参阅“什么是 SMBIOS?”侧边栏)。 如果找到该表,则其内容将逐条记录地转储,类似于这样


# dmidecode -t 6
# dmidecode 2.12
SMBIOS 2.5 present.

Handle 0x0009, DMI type 6, 12 bytes
Memory Module Information
   Socket Designation: DIMM0
   Bank Connections: 0 1
   Current Speed: Unknown
   Type: DIMM SDRAM
   Installed Size: 4096 MB (Double-bank Connection)
   Enabled Size: 4096 MB (Double-bank Connection)
   Error Status: OK

Handle 0x000A, DMI type 6, 12 bytes
Memory Module Information
   Socket Designation: DIMM1
   Bank Connections: 4 5
   Current Speed: Unknown
   Type: DIMM SDRAM
   Installed Size: Not Installed
   Enabled Size: Not Installed
   Error Status: OK

如果您不想列出整个表(在我的计算机中有数百行),您可以根据 SMBIOS 定义(表 2)将输出限制为特定类型的条目。

表 2. SMBIOS 有几种记录类型,您可以使用 dmidecode 选择。
类型 描述
0 BIOS
1 系统
2 主板
3 机箱
4 处理器
5 内存控制器
6 内存模块
7 缓存
8 端口连接器
9 系统插槽
10 板载设备
11 OEM 字符串
12 系统配置选项
13 BIOS 语言
14 组关联
15 系统事件日志
16 物理内存阵列
17 内存设备
18 32 位内存错误
19 内存阵列映射地址
20 内存设备映射地址
21 内置 pointing device
22 便携式电池
23 系统重置
24 硬件安全
25 系统电源控制
26 电压探针
27 散热设备
28 温度探针
29 电流探针
30 带外远程访问
31 启动完整性服务
32 系统启动
33 64 位内存错误
34 管理设备
35 管理设备组件
36 管理设备阈值数据
37 内存通道
38 IPMI 设备
39 电源
40 附加信息
41 板载设备扩展信息
42 管理控制器主机接口
126 禁用条目
127 “表尾”特殊标记
128–255 OEM 特定数据

您还可以使用特定的关键字将输出限制为几种类型(表 3)。

表 3. 您还可以使用特殊的关键字从 SMBIOS 获取相关信息。
SMBIOS 关键字 SMBIOS 类型
bios 0,13
system 1,12,15,23,32
baseboard 2,10,41
chassis 3
processor 4
memory 5,6,16,17
cache 7
connector 8
slot 9

如果我要颁发“最健谈命令”奖,那肯定会颁给 hwinfo,另一个可以转储计算机上所有硬件信息的命令。 在我的机器上,不带任何参数运行 hwinfo 会生成超过 12,000 行,包括 SMBIOS 表的几个内存转储。 您可以使用 --short 选项生成更紧凑的版本(列表 6)。

列表 6. hwinfo 命令可能非常健谈; 使用 --short 选项使其更易于管理。

# hwinfo --short
cpu:                                                            
          Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz, 2670 MHz
          Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz, 2336 MHz
          Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz, 2670 MHz
          Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz, 2670 MHz
keyboard:
          Logitech USB Multimedia Keyboard
mouse:
          Elan Microelectronics OM
monitor:
          SAMSUNG SA300/SA350
          SAMSUNG S20B300
graphics card:
          nVidia VGA compatible controller
sound:
          Intel NM10/ICH7 Family High Definition Audio Controller
          nVidia GK107 HDMI Audio Controller
storage:
          Intel 82801G (ICH7 Family) IDE Controller
          Intel NM10/ICH7 Family SATA Controller [IDE mode]
network:
  eth0    Atheros AR8152 v2.0 Fast Ethernet
network interface:
  lo      Loopback network interface
  eth0    Ethernet network interface
disk:
  /dev/sda   WDC WD5000AAKS-0
  /dev/sdb   MAXTOR STM316021
  /dev/sdc   WDC WD30EZRX-00M

...etc (rest of the listing, snipped out)  

您可以通过添加选项(例如 --monitor--printer)将 hwinfo 限制为特定类型的硬件。 使用 hwinfo --help 获取选项的完整列表。 例如,我可以使用 hwinfo --cdrom 转储光驱单元数据(列表 7)。 --listmd 选项允许您包含 RAID 设备,这些设备通常不包含在标准输出中。

列表 7. hwinfo 命令可以将其输出限制为特定硬件,例如 cdrom 设备。

# hwinfo --cdrom
25: SCSI 301.0: 10602 CD-ROM (DVD)                              
  [Created at block.249]
  Unique ID: KD9E.SGHalmfn+h9
  Parent ID: w7Y8.xyd+qedQTr5
  SysFS ID: /class/block/sr0
  SysFS BusID: 3:0:1:0
  SysFS Device Link: /devices/pci0000:00/0000:00:1f.2/
↪ata4/host3/target3:0:1/3:0:1:0
  Hardware Class: cdrom
  Model: "SONY DVD RW AD-7200S"
  Vendor: "SONY"
  Device: "DVD RW AD-7200S"
  Revision: "1.61"
  Driver: "ata_piix", "sr"
  Driver Modules: "ata_piix", "sr_mod"
  Device File: /dev/sr0 (/dev/sg3)
  Device Files: /dev/sr0, /dev/cdrom, /dev/cdrw, 
 ↪/dev/disk/by-id/ata-Optiarc_DVD_RW_AD-7200S, 
 ↪/dev/disk/by-path/pci-0000:00:1f.2-ata-2.1, 
 ↪/dev/dvd, /dev/dvdrw
  Device Number: block 11:0 (char 21:3)
  Features: CD-R, CD-RW, DVD, DVD-R, DVD-RW, DVD-R DL, 
 ↪DVD+R, DVD+RW, DVD+R DL, DVD-RAM, MRW, MRW-W
  Drive status: no medium
  Config Status: cfg=no, avail=yes, need=no, active=unknown
  Attached to: #14 (IDE interface)
  Drive Speed: 48

在我本文中介绍的命令行程序中,inxi 更加色彩鲜艳,即使只是适度地(图 2)。

图 2. inxi,即使只是一个命令行工具,至少也尝试使用一些颜色。

如果未带任何参数调用,它将只生成如下所示的一行,显示 CPU、内核、正常运行时间和更多细节


CPU~Quad core Intel Core2 Quad CPU Q8400 (-MCP-) 
 ↪clocked at 2003.000 Mhz Kernel~4.1.5-1-desktop 
 ↪x86_64 Up~2 days 23:24 Mem~2377.4/3949.4MB 
 ↪HDD~3660.7GB(67.9% used) Procs~202 Client~Shell 
 ↪inxi~1.7.24   

但是,您可以使用许多选项来获取特定数据。 例如,您可以使用选项 -v0(最小)到 -v7(最大详细程度)设置详细程度级别。 -x 选项允许包含某些硬件的额外信息。 查看 inxi -h 以获取所有可能的选项。 例如,您可以使用 inxi -A 获取音频信息,或使用 inxi -G 获取显卡数据,等等


# inxi -A
Audio:     Card-1: NVIDIA GK107 HDMI Audio Controller 
 ↪driver: snd_hda_intel Sound: ALSA ver: k4.1.5-1-desktop
           Card-2: Intel NM10/ICH7 Family High 
 ↪Definition Audio Controller driver: snd_hda_intel

现在,让我们以一些 GUI 选项结束。

GUI 方式

首先,usbviewlsusbusb-devices 的粗略图形等效项,我之前讨论过。 它非常易于使用,没有选项或参数。 它显示两列:左列是所有可用 USB 设备的树,右列给出完整详细信息。 图 3 显示了我的 USB 键盘的详细信息。

图 3. usbview 命令以树形形式显示所有 USB 设备的详细信息。

让我们继续讨论我已经讨论过的命令,它共享显示样式:lshw -X-X 选项不是生成列表(如前所示),而是生成一个图形界面,左侧有几列,让您可以选择要检查的硬件。 右侧区域显示所选设备的完整硬件详细信息。 图 4 显示了分析我的光盘 DVD 读取器/写入器单元的结果; 提供的信息包括其他详细信息,例如逻辑单元名称、其功能等等。

图 4. lswh -X 命令生成一个图形界面,让您可以浏览所有硬件设备。

另一个有趣的程序是 hardinfo,根据其 GitHub 页面(请参阅“资源”),该程序“尚未消亡,但需要维护人员”。 此程序在左侧显示一个树状结构,其中包含四个主要分支

  • “计算机”显示有关您的机器的许多详细信息:有些与软件相关,而不是与硬件相关。

  • “设备”包括机箱中的所有设备,按类别分组。

  • “网络”不仅显示网卡详细信息,还显示其他一些方面,例如 DNS 服务器或路由。

  • “基准测试”让您了解您的机器与其他计算机的性能,但由于缺少更新,比较是针对旧 CPU 的。

图 5 显示了示例输出。

图 5. hardinfo 命令包含几个额外的数据片段,不仅限于硬件。

还有两个选项。 “信息”菜单项允许您生成 HTML 或纯文本格式的报告,选择您感兴趣的任何部分。 “网络更新器”应该让您更新内部程序数据,包括最新的基准测试结果,但是当我尝试运行时,我收到了“联系 HardInfo 中央数据库(失败)”消息。 有关生成的 HTML 报告示例,请参见图 6。

图 6. hardinfo 命令可以生成描述您完整系统的 HTML 或文本报告。

让我们以 KDE 自己的 kinfocenter 结束。 此实用程序(请参见图 7,其中显示了我的机器的 RAM 详细信息)类似于我一直在描述的以前的工具,它提供了一个左窗格,其中包含所有可用选项的树,以及一个右窗格,其中包含有关左侧所选选项的更多详细信息。

图 7. KDE 自己的 kinfocenter 不仅显示硬件详细信息,还显示大量其他系统数据。

该程序不限于硬件详细信息,还显示各种其他信息,例如“Samba 状态”、“能源信息”或“X-Server”,仅举几例。

使用 /proc 和 /sys DIY

Linux 充满了目录和文件,但 /proc 和 /sys 目录真的很奇怪。 它们实际上并不存在,但它们允许您浏览它们。 它们充满了零长度的空文件,但您可以打开并查看它们。 /proc 目录先于 /sys,并且它基本上包含有关正在运行的进程的所有详细信息(因此,名称为 /proc)。 随着时间的推移,更多文件被添加到其中,主要是“虚拟”文件,这些文件实际上并不存在,但如果您尝试访问它们,它们会动态创建。 (大多数虚拟文件都有当前时间戳,这表明它们不断更新,并且它们的内容是最新的。)/sys 目录更现代。 它出现在 2.6 内核时代,旨在引入比旧的 /proc 更好的顺序和结构,旧的 /proc 只是以一种随意的方式增长。 /proc 中的许多文件(但不是全部)在 /sys 中重复,并且在可能的情况下,您应该选择后一个目录中的文件。 /sys 目录有几个子目录

  • block/ 包含指向每个块设备的条目。

  • bus/ 包含每个总线类型的目录,并且在每个目录中,包含两个子目录:devices/ 和 drivers/。 前者包含每个设备的目录,指向 /root 中设备的目录,后者包含为给定总线上的设备加载的每个驱动程序的目录。

  • class/ 包含每种对象类型的目录; 一些示例是 block/、graphics/、net/、sound/ 等等。

  • dev/ 为每种设备类型提供目录(例如,dev/block/ 或 dev/char/),每个目录都包含每个相应设备的目录。

  • devices/ 包含全局设备层次结构,其中包含系统中每个物理设备。

  • firmware/ 包含特定于固件的对象的目录; 例如,acpi/ 或 memmap/,但您自己的机器中的特定目录取决于内核中的固件驱动程序。

  • fs/ 包含您机器中每种文件系统类型的目录,每个目录都包含每个特定设备的更多目录; 例如,我有 /sys/fs/ext4/sda2,因为挂载为 /dev/sda2 的磁盘使用 ext4。

  • kernel/ 包含几个与当前加载的内核相关的文件。

  • module/ 包含加载到内核的每个模块的子目录。

  • power/ 表示电源子系统。

当您到达任何分支的最深层级别时,您可能会发现任意数量的单个文件,您可以读取这些文件以获取给定对象的属性。 哪些文件? 这是一个很难回答的问题,因为它取决于您正在访问哪个特定分支,因此您需要做一些工作才能从 /sys 目录中提取信息。 (有关此方面的一些提示,请参阅“资源”。) 另请注意,您可以写入某些文件,这将意味着修改相应的参数——请注意:小心操作! 但是,如果您坚持下去,您将能够复制本文中显示的大多数工具的功能,这些工具通常以相同的方式工作。

结论

我已经介绍了许多命令,这些命令使您可以查询您的 Linux 机器并了解其内部的具体内容,或多或少地详细了解。 如果您需要,您甚至可以自己获取基本数据并创建自己的硬件检查工具。

资源

http://www.dmtf.org/standards/smbios 阅读有关 SMBIOS 标准的信息。 在撰写本文时,最新版本为 3.0.0,日期为 2015 年 2 月 15 日。

您可以在 https://linuxkernel.org.cn/doc/Documentation/filesystems/sysfs.txt 找到有关 sysfs 的信息,并在 https://linuxkernel.org.cn/doc/Documentation/ABI/stable 找到更具体的文档。

关于较旧的 procfs,请查看 https://linuxkernel.org.cn/doc/Documentation/filesystems/proc.txt

位于 http://www.linux-usb.org/usb-ids.html 的 USB ID 存储库包含 USB 设备中使用的所有已知 ID 的完整列表。

位于 http://www.pcidatabase.com 的 PCI ID 存储库提供 PCI 设备 ID 的集中列表。

lscpulsblk 命令是 util-linux 软件包的一部分,可在 https://linuxkernel.org.cn/pub/linux/utils/util-linux 获取。 有关文档,请分别查看 http://linux.die.net/man/1/lscpuhttp://linux.die.net/man/8/lsblk

http://sg.danny.cz/scsi/lsscsi.html 阅读有关 lsscsi 选项的信息,并在 http://linux.die.net/man/8/lsscsi 找到手册页。

有关 lsdev 手册页,请参阅 http://linux.die.net/man/8/lsdev

lshw 主页位于 http://www.ezix.org/project/wiki/HardwareLiSter,其手册页位于 http://linux.die.net/man/1/lshw

https://github.com/gregkh/usbutils 的 “usbutils” 页面中查看 lsusb,并在 http://linux.die.net/man/8/lsusb 获取更多信息。

您可以在 (“PCI Utilities”的主页)找到 lspci,并在 找到手册页。

http://www.kroah.com/linux/usb 查看 usbview,并在 http://linux.die.net/man/8/usbview 查看其手册页。

hardinfo 源代码存储库位于 https://github.com/lpereira/hardinfo,但首先检查您发行版的存储库; 它很可能已经在那里了。 请注意,该程序的上次更新是在两年多前,并且没有进行进一步的维护。

您可以在 https://www.kde.org/applications/system/kinfocenter 找到 KInfoCenter 。

加载 Disqus 评论