【服务器】关于lspci指令查看网卡数量的小坑

准备用lspci指令查看服务器上有多少个网卡,但是由于对lspci的输出结果不了解,导致得到了错误的结果,折腾了好几周 T_T

一、什么是lspci指令?如何使用?

1、lspci指令用来查看当前系统连接的所有PCI/PCIe设备

2、使用lspci命令最简单的方式就是直接输入lspci,然后按下回车键即可。这时候会列出当前系统中所有PCI设备的相关信息。如下图:

3、参数选项

除了基本用法以外,lspci命令还支持多种参数选项,可以更方便地查看和筛选设备信息。下面是常用的参数选项:

--v:显示详细信息

--s:指定设备的PCI地址

--n:显示设备的PCI ID

--vv:显示更加详细的信息

4、常见应用场景

(1)检测PCI设备是否正常工作 在Linux系统中,如果PCI设备无法正常工作linux lspci命令详解,就可以使用lspci命令来检测该设备是否被识别。如果lspci命令能够列出该设备的相关信息,则说明该设备已经被识别并且正常工作。

(2)查看硬件配置信息 lspci命令可以列出所有PCI总线上连接的设备信息,这些信息对于了解硬件配置非常有帮助。例如,在安装Linux系统时,需要了解计算机上的硬件配置,以便正确地安装和配置相关驱动程序。

(3)查找特定类型的设备 通过使用lspci命令的参数选项,可以查找特定类型的设备。例如,使用-l参数可以列出所有网络相关的设备,而使用-v参数则可以显示更加详细的信息。

二、lspci输出的一些解释

首先很简单,看看不加参数直接调用lspci命令的输出结果

首先让人不好理解的地方就是最左边的一系列编号类似00:19.0这些,毕竟右边的设备名字供应商什么的还是很容易看懂的。那么最左边的这些编号代表什么意思呢?

在PCI或者说PCIe里,每个设备有三个编号:(即BDF地址)

总线编号(Bus Number)
设备编号(Device Number)
功能编号(Function Number)

那么对应上面的00:19.0来说:这个设备的BusNumber是00,DeviceNumber是19,FunctionNumber是0,需要说明的是这三个都是16进制表示,有些配置里需要填十进制数的,需要做下转换。

其实呢,在linux里还有一个编号,叫做DomainNumber,不过上面的输出中没有,因为都是0,所以就忽略了,理论上,一个Segment可以有256个Bus,每个Bus可以有32个Device,每个Device可以有8个Function,在一些场景下,比如设备特别多,是会有多个Domain的,在硬件层面对应多个PCI Segment,在这种情况下,或者使用lspci -D命令,输出就会带上DomainNumber,比如我们一台服务器的输出:

在前面多了一列,多出来的就是DomainNumber了。

明白了前面的编号之后,还有一个疑问,就是lspci命令是怎么能知道00:19.0这个设备就是个Ethernet controller,并且是Intel Corporation Ethernet Connection (3) I218-LM (rev 03)的呢?

这时可以使用lspci -nn命令,附加上原始的信息:

可以看到和上面不同的是多了两个方括号括起来的编号,其中前面的[0200]表示了当前设备的DeviceClass,也就是设备类型,而后面的[8086:15a2]代表的就是设备的VendorIDDeviceIDlspci命令会默认尝试读取/usr/share/hwdata/pci.ids.gz/usr/share/hwdata/pci.ids文件,利用DeviceClass、VendorID:DeviceID去匹配相应的设备,这个设备清单是由https://pci-ids.ucw.cz/维护的,我们也可以直接去网站上去查询。

三,使用lspci查看服务器网卡数量的坑

在服务器使用lspci指令输出结果如下:

也可以使用 lspci -v | grep -i ethernet过滤网卡相关的信息:

我之前犯的错误是以为输出为4行表示有4个网卡,但是事实并不是这样的。。。

该输出表示该服务器使用的是Intel I350网卡,搜索发现该网卡是一个四端口的以太网控制器

那么,输出的4个结果如何解释呢?
lspci输出中确实显示了4个相似的条目,但这些实际上是同一个网卡的不同端口

根据前面的数字也可以判断出这一点:

11: 表示总线号(Bus Number) 00: 表示设备号(Device Number) .0, .1, .2, .3 表示功能号(Function Number)

当多个条目具有相同的总线号和设备号时,这通常意味着这些条目是同一个物理设备的不同功能部分。在上述输出中,所有四个以太网控制器都位于总线号为11、设备号为00的位置,仅功能号不同,表明这是一个多端口网卡的不同接口。

综上,这是最近碰到的一个令人头疼的问题,对于不会用linux的人来说,不熟悉掌握并看懂指令的输出结果是一个致命的问题,可能导致花费大量的时间陷入怪圈。

ps:ip a指令输出结果:

参考文章:
Linux指令大全
深入了解 Linux 网卡和网口:揭秘网络接口的奥秘
lspci命令输出的一些解释

相关推荐
csdn_life18几秒前
# Debian 10 升级到 Debian 13 指南
运维·debian·php
U盘失踪了几秒前
Debian 使用 Xfce 桌面
linux·运维
k7Cx7e几秒前
Debian安装 curl 时提示插入 DVD 光盘
运维·windows·debian
云飞云共享云桌面2 分钟前
广东某智能装备工厂8人共享一台服务器
大数据·运维·服务器·人工智能·3d·自动化·电脑
鹓于2 分钟前
OmniParser视觉鼠标自动化实战
运维·自动化·计算机外设
北冥湖畔的燕雀2 分钟前
Linux Shell开发实战:从零打造命令行工具
linux·运维·服务器
!沧海@一粟!5 分钟前
Esxi主机iDrac密码与IP重置指南
运维·服务器
低保和光头哪个先来6 分钟前
TinyEditor 篇2:剪贴板粘贴图片并同步上传至服务器
服务器·前端·javascript·css·vue.js
原来是猿7 分钟前
Linux - 基础IO【中】
linux·运维·服务器
Xzq2105097 分钟前
网络编程套接字(UDP)
运维·服务器·网络