Linux工具|运维工具lspci使用小妙招

2023-11-10 00:16:30 浏览数 (2)

1 背景说明

运维工程师(Operations)是负责维护并确保整个服务的高可用性,同时不断优化系统架构提升部署效率、优化资源利用率提高整体的ROI的专业人员。他们的基本职责是负责服务的稳定性,确保服务可以7*24H不间断地为用户提供服务。

作为一名运维工程师,操作系统知识 怎么可以落下,我们需要深入理解Linux系统,包括其文件系统、进程管理、用户和权限管理等。今天就先讲讲如何查看计算机设备篇——PCI总线设备的信息。到了这里,实践得出真理,开始动手操作下吧。毕竟,这些基础的知识也是需要我们操作的熟练。从上面简介中,你已经猜测出来我此时说的这个系统自带的小工具叫什么名字吧?

2 环境检查

2.1 什么是PCI

【PCI】介绍

PCI是一种外设总线规范。我们先来看一下什么是总线:总线是一种传输信号的路径或信道。典型情况是,总线是连接于一个或多个导体的电气连线,总 线上连接的所有设备可在同一时间收到所有的传输内容。总线由电气接口和编程接口组成。本文讨论Linux 下的设备驱动,所以,重点关注编程接口。

PCI是Peripheral Component Interconnect(外围设备互联)的简称,是普遍使用在桌面及更大型的计算机上的外 设总线。PCI架构被设计为ISA标准的替代品,它有三个主要目标:获得在计算机和外设之间传输数据时更好的性能;尽可能的平台无关;简化往系统中添加和 删除外设的工作。

【lspci】介绍

lspci 是一个用来显示系统中所有PCI总线设备或连接到该总线上的所有设备的工具。

2.2 环境检查

在开展实践工作前,首先需要做的是熟悉环境。当我们需要了解我们的工作电脑当前的设备信息是如何分布的。比如说磁盘控制器、声卡、网卡等等。有时候我们需要知道设备的硬件ID或者设备的型号,这时候就可以借助lspci命令来查询。

首先,执行命令查看当前的操作系统。当前所有操作都是在Linux上执行,如果有差错或者版本不一致,请酌情参考。

代码语言:javascript复制
[xxx@xxx ~]$ uname -a
Linux xxx 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

[xxx@xxx ~]$ cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 

其次,我们需要检查下我们的机器是否有这个命令。

代码语言:javascript复制
[xxx@xxx ~]$ lspci V
这里让你失望了,请参考下3

3 如何查看帮助命令

在Linux环境中,有很多约定俗成的命令,可以帮助我们很快的投入到工作中,例如--help / ?/ -h / -V / --version 等等等。不过这个lspci的命令比较特殊一些,可以使用lspci V,如果使用使用其他命令也没有错误,只是会提示你不可用。

代码语言:javascript复制
[xxx@xxx ~]$ lspci V
Usage: lspci [<switches>]
Basic display modes:
-mm             Produce machine-readable output (single -m for an obsolete format)
-t              Show bus tree
Display options:
-v              Be verbose (-vv for very verbose)
-k              Show kernel drivers handling each device
-x              Show hex-dump of the standard part of the config space
-xxx            Show hex-dump of the whole config space (dangerous; root only)
-xxxx           Show hex-dump of the 4096-byte extended config space (root only)
-b              Bus-centric view (addresses and IRQ's as seen by the bus)
-D              Always show domain numbers
Resolving of device ID's to names:
-n              Show numeric ID's
-nn             Show both textual and numeric ID's (names & numbers)
-q              Query the PCI ID database for unknown ID's via DNS
-qq             As above, but re-query locally cached entries
-Q              Query the PCI ID database for all ID's via DNS
Selection of devices:
-s [[[[<domain>]:]<bus>]:][<slot>][.[<func>]]   Show only devices in selected slots
-d [<vendor>]:[<device>][:<class>]              Show only devices with specified ID's
Other options:
-i <file>       Use specified ID database instead of /usr/share/hwdata/pci.ids
-p <file>       Look up kernel modules in a given file instead of default modules.pcimap
-M              Enable `bus mapping' mode (dangerous; root only)
PCI access options:
-A <method>     Use the specified PCI access method (see `-A help' for a list)
-O <par>=<val>  Set PCI access parameter (see `-O help' for a list)
-G              Enable PCI access debugging
-H <mode>       Use direct hardware access (<mode> = 1 or 2)
-F <file>       Read PCI configuration dump from a given file

当我们阅读了很多的帮助文档后,就可以开始动手实践一下啦。

备注:当前执行命令是CentOS 7.6 开源版本。

4 实践先行

4.1 显示所有设备详细信息

代码语言:javascript复制
lspci -v

代码语言:javascript复制
[xxx@xxx ~]$ lspci -v
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
        Subsystem: VMware Virtual Machine Chipset
        Flags: bus master, medium devsel, latency 0
        Kernel driver in use: agpgart-intel
        
……此处省略其他设备信息

4.2显示所有设备更多详细信息

代码语言:javascript复制
lspci -vv
代码语言:javascript复制
[xxx@xxx ~]$ lspci -vv
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
        Subsystem: VMware Virtual Machine Chipset
        Control: I/O- Mem  BusMaster  SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0
        Kernel driver in use: agpgart-intel
……此处省略其他设备信息

4.3显示所有设备更多更详细信息

这个命令基本上是ALL IN

代码语言:javascript复制
lspci -vvv
代码语言:javascript复制
[xxx@xxx ~]$ lspci -vvv
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
        Subsystem: VMware Virtual Machine Chipset
        Control: I/O- Mem  BusMaster  SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0
        Kernel driver in use: agpgart-intel
……此处省略其他设备信息

4.4显示设备的vendor id 和device id

代码语言:javascript复制
lspci -n
代码语言:javascript复制
[xxx@xxx ~]$ lspci -n
00:00.0 0600: 8086:7190 (rev 01)
00:01.0 0604: 8086:7191 (rev 01)
00:07.0 0601: 8086:7110 (rev 08)
00:07.1 0101: 8086:7111 (rev 01)
00:07.3 0680: 8086:7113 (rev 08)
00:07.7 0880: 15ad:0740 (rev 10)

……此处省略其他设备

4.5显示设备配置空间的标准部分

代码语言:javascript复制
lspci -x

4.6 显示设备上pcie设备的配置空间的所有内容

代码语言:javascript复制
lspci -xxx

4.7 显示 PCI-X 2.0 和 PCI Express 总线上可用的扩展(4096 字节)PCI 配置空间内容

代码语言:javascript复制
lspci -xxxx		

4.8 显示说有pcie设备的总线地址

代码语言:javascript复制
$ lspci -b

4.9 以树形结构显示pcie设备

能展示设备上所以pcie总线、桥、pcie设备之间的连接关系

代码语言:javascript复制
$ lspci -t

5 附录

5.1 查阅pci.ids

可以通过查阅/usr/share/hwdata/pci.ids来查看所有的内容信息。

/proc/bus/pci:linux 2.1.82 之后版本核心提供的 PCI 总线配置空间的接口。包含每个总线 (per-bus) 的子目录以及每个设备卡 (per-card) 的配置空间档案,还有一个 devices 档案,包含所有PCI设备的列表。

6 问答

作为一名运维工程师需要了解掌握很多技能,比如说操作系统、开源组件、监控相关、编程知识、网络知识、数据库知识、自动化技能和日志分析能力。当然也不能缺少一些软技能,例如沟通、抗压等,要和同事、领导以及客户保持良好的沟通,理解需求,提供有效的解决方案,需要应对高强度的工作压力,保持冷静,快速解决问题。


我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞