在 CentOS 7 系统管理中,对硬件设备的深入了解是进行性能优化、故障排查和系统维护的基础,PCI(外围部件互连标准)总线作为连接主板与各种高性能设备(如显卡、网卡、存储控制器等)的核心通道,其上挂载的设备信息至关重要。lspci 命令正是 Linux 系统中用于查询和显示 PCI 总线设备信息的强大工具,它能够帮助系统管理员快速、准确地获取硬件配置的详细情况。

基本用法与输出解读
最简单的使用方式是直接在终端中输入 lspci 命令,不加任何参数,这将列出系统中所有 PCI 设备的简要信息。
lspci
其输出通常类似如下格式:
00:00.0 Host bridge: Intel Corporation 5520/5500/X58 I/O Hub to ESI Port (rev 13)
00:01.0 PCI bridge: Intel Corporation 5520/5500/X58 I/O Hub to PCI Express Root Port 1 (rev 13)
00:1a.0 USB controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #4
00:1d.0 USB controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #1
01:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
02:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1080] (rev a1) 每一行代表一个 PCI 设备,其信息结构为 [总线:设备.功能] 设备类别:厂商名 设备名 (修订版)。
:这是设备的地址。 00是总线号,00是设备号,0是功能号,一个设备可以有多个功能。Host bridge/Ethernet controller:这是设备的类别,告诉我们这个设备是什么。Intel Corporation/NVIDIA Corporation:设备制造商。82599ES 10-Gigabit.../GP104 [GeForce GTX 1080]:具体的设备型号。(rev 01):设备的硬件修订版本。
常用命令选项详解
lspci 的强大之处在于其丰富的命令行选项,这些选项可以让我们从不同维度、以不同格式获取所需信息。
-v 和 -vv:详细信息显示
-v(verbose)选项会显示更详细的设备信息,而 -vv(very verbose)则会提供几乎所有可获取的细节,这是排查硬件问题时最常用的选项。
lspci -v
输出会包含如下关键信息:
Kernel driver in use::指示当前正在使用哪个内核驱动程序来管理该设备,如果此项为空,通常意味着驱动未正确加载。Kernel modules::列出所有可能支持该设备的内核模块。Memory at .../I/O ports at ...:设备占用的内存地址和 I/O 端口范围。Capabilities::设备支持的高级功能,如 PCI Express、电源管理等。
-n 和 -nn:数字与名称模式
默认情况下,lspci 会将厂商和设备 ID 解析为可读的名称。-n 选项会禁止这种解析,直接显示十六进制的数字 ID,这对于脚本编写和自动化处理非常有用。-nn 则是两者兼顾,同时显示数字 ID 和名称。
# 仅显示数字ID lspci -n # 同时显示数字ID和名称 lspci -nn
-t:树状结构显示
-t 选项会以树状结构展示设备之间的连接关系,清晰地呈现出 PCI 桥接和设备层级,这对于理解主板拓扑结构非常有帮助。

lspci -t
输出示例:
-[0000:00]-+-00.0 Intel Corporation 5520/5500/X58 I/O Hub...
+-01.0-[01]----00.0 Intel Corporation 82599ES 10-Gigabit...
+-1a.0 Intel Corporation 82801JI (ICH10 Family) USB...
+-1d.0 Intel Corporation 82801JI (ICH10 Family) USB...
-1e.0-[02]----00.0 NVIDIA Corporation GP104 [GeForce GTX 1080] -s 和 -d:设备过滤
当设备众多时,我们可以使用过滤选项来定位特定设备。
-s [[<bus>]:][<device>][.<func>]:根据设备地址进行过滤。-d [<vendor>]:[<device>][:<class>]:根据厂商 ID、设备 ID 或设备类别进行过滤。
要查找所有 VGA 设备,可以使用类别代码 0300:
lspci -d ::0300
下表列出了一些常见的设备类别代码:
| 类代码 | 描述 | 示例用法 |
|---|---|---|
0100 | SCSI 存储控制器 | lspci -d ::0100 |
0200 | 以太网控制器 | lspci -d ::0200 |
0300 | VGA 兼容控制器 | lspci -d ::0300 |
0403 | 音频设备 | lspci -d ::0403 |
0600 | 主桥 | lspci -d ::0600 |
0c03 | USB 控制器 | lspci -d ::0c03 |
实际应用场景
识别显卡型号:在配置图形驱动或进行 GPU 计算任务前,首先需要确认显卡型号。
lspci | grep -i 'VGA|3D' # 或使用类别过滤 lspci -d ::0300
排查网络问题:如果网络连接异常,可以检查网卡是否被系统识别,以及驱动是否加载。
# 查看网卡型号 lspci | grep -i ethernet # 查看网卡详细驱动信息 lspci -v -d ::0200
在
-v的输出中,重点关注Kernel driver in use:字段。检查驱动加载状态:对于任何可疑的硬件设备,使用
lspci -v查看其驱动状态是诊断的第一步。Kernel driver in use为空,而Kernel modules列出了可用模块,可能需要手动加载驱动。
保持 PCI ID 数据库更新
lspci 命令依赖一个本地的 PCI ID 数据库(通常位于 /usr/share/hwdata/pci.ids)来将十六进制 ID 解析为人类可读的名称,对于新发布的硬件,这个数据库可能不是最新的,在 CentOS 7 中,可以使用 update-pciids 命令来从官方源更新此数据库。
sudo update-pciids
执行此命令需要 root 权限,并且系统需要能够访问互联网,定期更新可以确保 lspci 能够准确识别最新的硬件设备。
相关问答FAQs
问1:我运行 lspci 后,某些设备显示为 “Unknown device”,这是什么原因,该如何解决?
答: 出现 “Unknown device” 的根本原因是 lspci 命令所依赖的本地 PCI ID 数据库中,没有记录该设备的厂商 ID 或设备 ID,这通常发生在两种情况下:一是你的硬件非常新,数据库尚未收录;二是你的系统数据库版本过于陈旧,解决方法非常简单,只需以 root 权限运行 update-pciids 命令,该命令会从互联网上下载最新的 PCI ID 列表并替换本地文件,之后再次运行 lspci,通常就能正确显示设备名称了。
问2:在使用 lspci -v 查看设备详情时,”Kernel driver in use” 和 “Kernel modules” 这两个字段有什么区别?
答: 这两个字段提供了关于内核驱动程序不同层面的信息。”Kernel driver in use” 指的是当前正在活动并管理该硬件设备的内核驱动程序,如果这个字段有值(如 e1000e、nvidia),说明硬件已被系统成功识别并驱动,而 “Kernel modules” 则列出了所有理论上能够支持该硬件的内核模块,它是一个候选列表,可能当前没有使用任何驱动(”Kernel driver in use” 为空),但 “Kernel modules” 中列出了几个兼容的模块,这意味着你可以尝试手动加载其中一个来使设备工作。”in use” 是“在职员工”,”modules” 是“所有符合岗位要求的候选人”。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复