机箱里有什么? 探查你的 Linux 机器的硬件
我最近在尝试为我的机器安装 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)。 其中一些命令提供重叠的信息(例如 lsdev
或 lshw
),但是通过使用所有这些命令,您可以清楚地了解 Linux 机箱内部可能包含的任何内容。
命令 | 描述 |
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)。
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 行输出。
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
运行相同的命令,您就会明白我在说什么。
-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”侧边栏中所述。
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.”,这表明有人在设置我的主板时很粗心)。 使用此命令,您可以获得有关系统、总线、内存、处理器、显示器、网络和所有其他内容的信息。
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
并让预输入建议其余部分,很容易记住它们。 但是,还有更多的命令行可能性,所以让我们看一下。
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)。
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 设备,这些设备通常不包含在标准输出中。
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 方式首先,usbview
是 lsusb
或 usb-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 DIYLinux 充满了目录和文件,但 /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 的集中列表。
lscpu
和 lsblk
命令是 util-linux 软件包的一部分,可在 https://linuxkernel.org.cn/pub/linux/utils/util-linux 获取。 有关文档,请分别查看 http://linux.die.net/man/1/lscpu 和 http://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 。