普通用户运行lspci看不到显卡或网卡完整信息,是因为默认权限仅允许读取/sys/bus/pci/devices下的简化数据,关键字段如厂商名、驱动状态、bar地址等受内核pci配置空间访问限制;需sudo才能访问完整信息,且部分系统已禁用/proc/bus/pci接口。

普通用户运行 lspci 为什么看不到显卡或网卡完整信息?
因为设备的厂商名、驱动状态、内存地址等关键字段受内核 /proc/bus/pci 权限限制,普通用户默认只能读取基础设备树结构。不加 sudo 时,lspci 实际从 /sys/bus/pci/devices 下读取简化数据,很多字段会显示为 [device] 或直接留空。
- 执行
sudo lspci才能访问完整的 PCI 配置空间,拿到设备 ID、BAR 地址、中断号等底层信息 - 某些发行版(如 Ubuntu 22.04+)默认禁用 /proc/bus/pci 接口,此时即使加
sudo,-x或-vv也可能报错Cannot read configuration space - 若只需识别设备型号,
lspci -mm(机器可读格式)对权限要求较低,适合脚本调用
lspci -v 和 lspci -vv 的实际差异在哪?
-v 输出已包含驱动模块名、IRQ、内存/IO 地址范围、PCI Capabilities 等运维常用字段;-vv 则进一步展开 PCIe 扩展能力寄存器、ACS 控制位、AER 错误报告配置等调试级内容,日常排查基本用不到。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
-
lspci -v能看到Kernel driver in use: iwlwifi这类关键信息,足够定位驱动是否加载 -
lspci -vv可能暴露Root Port ACS Capability: Src Valid, Trans Blind, End Blind, Rcvr Redir,仅在排查 PCIe 设备直通(如 KVM 虚拟机透传 GPU)时才需关注 - 两者都依赖内核开启 CONFIG_PCI_DEBUG,部分精简内核(如某些容器宿主机)可能编译时未启用,导致
-vv输出异常简略
如何快速定位某块 NVIDIA 显卡对应的内核模块和设备 ID?
用 -k 和 -nn 组合最直接:前者确认当前生效的驱动,后者给出标准 PCI ID(厂商 ID:设备 ID),方便查文档或匹配驱动白名单。
- 执行
sudo lspci -k -nn | grep -A 3 -i nvidia,输出中会同时出现类似01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104 [GeForce GTX 1080] [10de:1b80] (rev a1)和Kernel modules: nvidiafb, nouveau, nvidia的行 - 注意
Kernel driver in use:字段才是当前真正工作的模块(如nvidia),而Kernel modules:是内核探测到所有可能支持该设备的模块列表 - 如果
Kernel driver in use为空,说明设备未被任何模块绑定,需检查nvidia.ko是否加载(lsmod | grep nvidia)或是否存在驱动冲突(如nouveau未被黑名单)
lspci -s 指定槽位时,地址格式容易出错的点
PCI 地址是 bus:slot.function 三元组,但很多人忽略 slot 和 function 的十六进制解析规则——它们不是十进制数字,而是按 PCI 规范定义的 5 位 slot + 3 位 function 编码。
- 例如
0000:01:00.0中的01是十六进制 bus 号,00是十六进制 slot 号,.0是 function 号;lspci -s 01:00.0在多 root complex 系统中可能匹配错误总线 - 稳妥写法必须带 domain:用
lspci -s 0000:01:00.0,否则在双路服务器或 PCIe switch 环境下易误匹配 - function 号不一定是
.0,有些设备(如 NVMe SSD)可能有多个 function(.0,.1),漏掉.0后缀会导致命令静默失败(无输出)
lspci 的输出本身不带实时性——它读的是内核启动时枚举的 PCI 设备快照。热插拔设备(如 Thunderbolt 外接 GPU)必须先执行 echo 1 > /sys/bus/pci/rescan,再运行 lspci 才能看见新设备。这点常被忽略。










