在 Linux 上使用 lspci 查看硬件

使用 lspci 命令显示 Linux 系统上的设备和驱动程序。
56 位读者喜欢这个。
computer screen

Opensource.com

当你在桌面或服务器上运行 Linux 时,有时你需要识别系统中的硬件。用于此目的的一个命令是 lspci。它的工作原理是显示连接到 PCI 总线的所有设备。它由 pciutils 软件包提供,适用于各种 Linux 和基于 BSD 的操作系统。

基本用法

当普通用户运行 lspci 时,显示的信息可能因访问权限而受到限制。使用 sudo 运行该命令可提供完整的画面。

单独运行 lspci 会列出 PCI 总线及其连接的设备。这是来自我的媒体中心 PC 的一个示例。它是一个基于 AMD Phenom CPU 的系统,因此它具有 AMD 芯片组。它还具有 Atheros 无线控制器和 Nvidia 显卡。所有硬件设备都列出了详细信息,例如供应商、名称和型号

$ sudo lspci
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] RS880 Host Bridge
00:02.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780 PCI to PCI bridge (ext gfx port 0)
00:04.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780/RS880 PCI to PCI bridge (PCIE port 0)
00:05.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] RS780/RS880 PCI to PCI bridge (PCIE port 1)
00:11.0 SATA controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode]
00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:12.1 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
00:12.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:13.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:13.1 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0 USB OHCI1 Controller
00:13.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 SMBus Controller (rev 3c)
00:14.1 IDE interface: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 IDE Controller
00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 LPC host controller
00:14.4 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 PCI to PCI Bridge
00:14.5 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor HyperTransport Configuration
00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor Address Map
00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor Miscellaneous Control
00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 10h Processor Link Control
01:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GK107 HDMI Audio Controller (rev a1)
02:00.0 Network controller: Qualcomm Atheros AR9287 Wireless Network Adapter (PCI-Express) (rev 01)

详细输出

添加 -v 选项会增加每个设备的详细程度或详细级别。你可以使用 -vv-vvv 来获得更高的设备详细信息量。在这个级别,lspci 显示各种子系统和内存地址、中断请求 (IRQ) 号以及所有设备的其他功能。输出非常长。在你的系统上试一试。

使用 grep 搜索

有时你想缩小搜索范围。例如,RPM Fusion 网站上有安装 Nvidia 显卡驱动程序的说明。它们首先使用 grep 命令识别你的显卡。这是我在我的笔记本电脑上得到的

$ sudo lspci | grep -e VGA
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)
$ sudo lspci | grep -e 3D
01:00.0 3D controller: NVIDIA Corporation GM108M [GeForce MX130] (rev a2)

上面的 grep 命令在我的媒体中心 PC 上显示了一个 VGA 设备,但没有 3D 设备。

$ sudo lspci | grep -e VGA
01:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1)
$ sudo lspci | grep -e 3D
$

按供应商 ID 搜索

还有另一种不需要 grep 的方法。假设我想确定是否还有其他 Nvidia 设备存在。有必要了解更多信息。我使用 -nn 选项来显示供应商和设备 ID 号。在我的媒体中心 PC 上,此选项显示我的 VGA 卡、供应商 ID 和设备 ID

$ sudo lspci -nn | grep -e VGA
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK107 [GeForce GTX 650] [10de:0fc6] (rev a1)

设备名称后的带有冒号分隔数字的方括号集显示了供应商和设备 ID。输出表明,Nvidia Corporation 制造的设备的供应商 ID 是 10de

-d 选项显示来自指定供应商、设备或类别 ID 的所有设备。以下是我的系统中的所有 Nvidia 设备(保留 -nn 以包含供应商 ID)

$ sudo lspci -nn -d 10de:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK107 [GeForce GTX 650] [10de:0fc6] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation GK107 HDMI Audio Controller [10de:0e1b] (rev a1)

从输出中,你可以看到除了显卡之外,我还有一个 Nvidia 音频设备。它们实际上都是同一张 Nvidia GeForce GTX 650 卡的一部分,但这仍然是一个很好的例子。

内核模块

除了 PCI 硬件设备之外,lspci 还可以使用 -k 选项显示加载了哪些内核驱动程序模块。我将此选项添加到我的 lspci 命令中,以查看有关我的 Nvidia 设备的几个信息。

$ sudo lspci -nn -k -d 10de:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK107 [GeForce GTX 650] [10de:0fc6] (rev a1)
 Subsystem: eVga.com. Corp. GK107 [GeForce GTX 650] [3842:2650]
 Kernel driver in use: nvidia
 Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia
01:00.1 Audio device [0403]: NVIDIA Corporation GK107 HDMI Audio Controller [10de:0e1b] (rev a1)
 Subsystem: eVga.com. Corp. GK107 HDMI Audio Controller [3842:2650]
 Kernel driver in use: snd_hda_intel
 Kernel modules: snd_hda_intel

显示了另外两行:正在使用的内核驱动程序内核模块。第二个列出了可用于支持设备的模块。

保持最新

新的设备和供应商不断进入市场。如果你看到设备被列为未知,则你的 PCI 设备 ID 数据库可能已过时。有两种方法可以检查。-Q 选项使用 DNS 查询中央数据库。当然,这需要网络连接。

$ sudo lspci -Q

你还可以通过运行命令 update-pciids 来更新本地 PCI ID 数据库。

$ sudo update-pciids
Downloaded daily snapshot dated 2021-08-22 03:15:01

了解更多关于你的硬件

当然,lspci 只是 Linux 上可用于查询系统上的硬件和软件的众多命令之一。在我的关于 USB 设备的文章中了解更多关于 Linux 上的硬件的信息:使用此 USB ID 存储库识别更多 Linux 上的设备

接下来阅读什么
Alan Formy-Duval Opensource.com Correspondent
艾伦拥有 20 年的 IT 经验,主要在政府和金融部门。他最初是一名增值经销商,之后转行从事系统工程。艾伦的背景是高可用性集群应用。他在 Oracle Press/McGraw Hill 的《Oracle Solaris 11 系统管理》一书中撰写了“用户和组”以及“Apache 和 Web 堆栈”章节。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.