在Linux系统中,网卡的“ID”通常指代多种标识信息,包括物理地址(MAC地址)、网络接口名称(如eth0、ens33)、PCI设备ID(硬件标识)以及驱动模块名称等,这些ID在系统管理、网络配置、故障排查中至关重要,本文将详细介绍如何通过不同命令和方法查看这些网卡ID,并说明各场景下的适用场景和注意事项。
查看网卡的MAC地址(物理地址)
MAC地址是网卡的唯一物理标识,由48位二进制数表示,通常以十六进制格式呈现(如00:1a:2b:3c:4d:5e),查看MAC地址的常用方法如下:
使用ip
命令(推荐,现代Linux系统默认支持)
ip
命令是iproute2
工具包的核心命令,功能强大且推荐使用,通过ip link
或ip addr
可查看所有网卡的MAC地址:
ip link show
输出示例:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 00:1a:2b:3c:4d:6f brd ff:ff:ff:ff:ff:ff
其中link/ether
后的字段即为MAC地址,若需查看特定网卡的MAC,可指定接口名,如ip link show eth0
。
使用ifconfig
命令(传统工具,需安装net-tools
)
ifconfig
是早期的网络配置工具,部分系统默认未安装,需通过sudo apt install net-tools
(Ubuntu/Debian)或sudo yum install net-tools
(CentOS/RHEL)安装,使用方法:
ifconfig
输出示例:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::21a:2bff:fe3c:4d5e prefixlen 64 scopeid 0x20<link>
ether 00:1a:2b:3c:4d:5e txqueuelen 1000 (Ethernet)
RX packets 12345 bytes 1234567 (1.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6789 bytes 987654 (964.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
其中ether
字段即为MAC地址。
通过/sys
文件系统查看
Linux将网卡信息存储在/sys/class/net/
目录下,每个子目录对应一个网络接口,直接读取接口目录下的address
文件可获取MAC地址:
cat /sys/class/net/eth0/address
输出示例:
00:1a:2b:3c:4d:5e
此方法适合脚本编程,可精准获取单个接口的MAC地址。
查看网络接口名称
网络接口名称是系统分配的逻辑标识,传统Linux使用eth0
、eth1
等命名方式,而现代系统(如Ubuntu 18.04+、CentOS 7+)采用可预测命名规则(如ens33
、enp0s3
),命名规则基于硬件信息(PCI位置、总线类型等)。
使用ip
或ifconfig
命令
通过ip addr
或ifconfig
可直接查看所有接口名称:
ip addr show | grep "^[0-9]*:" | awk '{print $2}' | tr -d ':'
输出示例:
lo
eth0
wlan0
其中lo
为回环接口,其他为物理/虚拟网卡接口名。
查看/sys/class/net/
目录
/sys/class/net/
目录下的每个子目录即为接口名称:
ls /sys/class/net/
输出示例:
lo eth0 wlan0
查看网卡的PCI设备ID
PCI设备ID是网卡的硬件标识,由厂商ID(Vendor ID)和设备ID(Device ID)组成,用于识别网卡的具体型号和厂商(如Intel Corporation的网卡厂商ID为8086),查看PCI设备ID需使用lspci
命令。
安装lspci
工具
若系统未安装lspci
,需先安装:
- Ubuntu/Debian:
sudo apt install pciutils
- CentOS/RHEL:
sudo yum install pciutils
查看所有网卡的PCI信息
lspci | grep -i "ethernet"
输出示例:
04:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)
若需更详细的ID信息(含厂商和设备ID),使用-nn
参数:
lspci -nn | grep -i "ethernet"
输出示例:
04:00.0 Ethernet controller [0200]: Intel Corporation I210 Gigabit Network Connection [8086:1572] (rev 03)
其中[8086:1572]
即为PCI ID,8086
是厂商ID(Intel),1572
是设备ID(I210)。
通过接口关联PCI设备
若需通过接口名(如eth0
)查看其PCI设备ID,可查看/sys/class/net/<interface>/device/
目录下的符号链接:
ls -l /sys/class/net/eth0/device/
输出示例:
total 0
lrwxrwxrwx 1 root root 0 May 10 10:00 0000:04:00.0 -> ../../0000:04:00.0
drwxr-xr-x 3 root root 0 May 10 10:0 power
lrwxrwxrwx 1 root root 0 May 10 10:0 subsystem -> ../../../../bus/pci/devices
-r--r--r-- 1 root root 4096 May 10 10:00 uevent
其中0000:04:00.0
是PCI设备地址,结合lspci -v -s 0000:04:00.0
可查看详细信息。
查看网卡驱动模块名称
网卡驱动模块是内核中控制网卡工作的程序,查看驱动信息有助于排查驱动兼容性问题,常用工具为ethtool
和modinfo
。
安装ethtool
sudo apt install ethtool # Ubuntu/Debian sudo yum install ethtool # CentOS/RHEL
查看接口驱动信息
ethtool -i eth0
输出示例:
driver: e1000e
version: 3.2.6-k
firmware-version: 0.1-1
expansion-rom-version:
bus-info: 0000:04:00.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no
其中driver
字段即为驱动模块名称(如e1000e
为Intel千兆网卡驱动)。
查看驱动模块详细信息
通过modinfo
可查看驱动模块的详细参数、版本等信息:
modinfo e1000e
输出示例:
filename: /lib/modules/5.4.0-42-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
version: 3.2.6-k
description: Intel(R) PRO/1000 Gigabit Network Driver
author: Intel Corporation, <linux.nics@intel.com>
license: GPL
srcversion: 5A3F5C6F6F3F3F3F3F3F3F3F
alias: pci:v00008086d00001572sv*sd*bc*sc*i*
alias: pci:v00008086d00001575sv*sd*bc*sc*i*
...
常用网卡ID查看命令总结
为方便快速查找,以下为常用命令及用途对照表:
命令 | 用途 | 输出示例(简写) | 适用场景 |
---|---|---|---|
ip link show |
查看所有接口的MAC地址和状态 | link/ether 00:1a:2b:3c:4d:5e |
现代Linux系统,推荐使用 |
ifconfig |
查看接口MAC地址、IP等信息 | ether 00:1a:2b:3c:4d:5e |
传统系统,需安装net-tools |
cat /sys/class/net/eth0/address |
直接读取指定接口MAC | 00:1a:2b:3c:4d:5e |
脚本编程,精准获取单个接口MAC |
ip addr show | grep "^[0-9]*:" |
查看所有接口名称 | eth0 、wlan0 |
快速获取接口列表 |
lspci -nn | grep -i "ethernet" |
查看网卡PCI设备ID | [8086:1572] |
硬件识别,驱动匹配 |
ethtool -i eth0 |
查看接口驱动模块 | driver: e1000e |
驱动故障排查 |
注意事项
- 权限问题:部分命令(如
lspci
、ethtool
)可能需要sudo
权限才能获取完整信息。 - 发行版差异:不同Linux发行版默认工具不同(如Ubuntu默认
ip
,旧版CentOS可能默认ifconfig
),需根据系统选择。 - 内核版本影响:接口命名规则(如
eth0
vsens33
)受内核版本和udev
规则影响,可通过sudo ls /etc/udev/rules.d/ | grep -i net
查看命名规则配置。 - 虚拟化环境:在虚拟机(VMware、KVM)中,网卡可能为虚拟设备(如
ens33
、veth0
),其MAC地址和PCI ID可能与物理网卡不同。
相关问答FAQs
Q1:Linux中网卡的MAC地址和接口名称有什么区别?如何分别查看?
A:MAC地址是网卡的全球唯一物理标识(如00:1a:2b:3c:4d:5e),用于数据链路层通信;接口名称是系统分配的逻辑标识(如eth0、ens33),用于用户空间操作,查看MAC地址可用ip link show
或cat /sys/class/net/<interface>/address
;查看接口名称可用ip addr show | grep "^[0-9]*:"
或ls /sys/class/net/
。
Q2:为什么我的Linux系统中找不到网卡ID,可能的原因和解决方法?
A:可能原因及解决方法如下:
- 工具未安装:如
lspci
或ethtool
未安装,可通过sudo apt install pciutils ethtool
(Ubuntu/Debian)或sudo yum install pciutils ethtool
(CentOS/RHEL)安装。 - 权限不足:普通用户无法查看某些硬件信息,需使用
sudo
执行命令。 - 网卡未加载:驱动未加载或硬件未识别,可通过
dmesg | grep -i "eth"
查看内核日志,确认网卡是否被正确识别。 - 虚拟化配置问题:在虚拟机中,若网卡未正确挂载,可在虚拟机管理器中检查网卡类型(如VMXNET3、E1000)并重新配置。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/28678.html