最可靠方法是用ip link show:执行ip link show ens33(替换为实际接口名),在link/ether后找到十六进制字符串即mac地址;该命令依赖必装的iproute2,兼容性优于ifconfig,且显示当前生效值。

用 ip link show 查 MAC 地址最可靠
现代 Linux 发行版默认不装 net-tools,ifconfig 可能根本不存在或行为异常。直接用 ip link show 是当前最稳妥的方式。
执行 ip link show eth0(把 eth0 换成你的实际接口名,比如 ens33、enp0s3 或 wlan0),在输出里找 link/ether 后面那一串十六进制值,就是 MAC 地址。
- 如果只关心主网卡,可以用
ip -br link | grep -v "lo$" | head -n1 | awk '{print $1}'先取接口名,再拼接查询 -
ip link不依赖额外包,内核自带的iproute2必装,兼容性远好于ifconfig - 注意:
ip link show显示的是当前生效的 MAC,包括被临时修改过的;而配置文件里的MACADDR=值可能已过期
查网卡型号和芯片信息用 lspci 和 ethtool
仅靠 MAC 地址没法知道是 Realtek 还是 Intel 芯片,得结合总线和驱动信息。
lspci | grep -i ethernet 能列出所有以太网控制器,输出类似 02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller —— 这就是真实硬件型号。
- 若需更详细参数(如 PHY、速率协商能力),运行
ethtool eth0;它会显示Speed、Duplex、Link detected等关键状态 -
ethtool依赖驱动支持,某些虚拟网卡(如veth)或老旧内核可能返回No data available - 不要用
mii-tool:它只适用于 MII 接口的老式网卡,对千兆及以上基本无效,且已被弃用
配置文件里的 HWADDR 或 MACADDR 不一定准
RHEL/CentOS 系统的 /etc/sysconfig/network-scripts/ifcfg-eth0 中可能有 HWADDR= 或 MACADDR= 字段,但这只是安装时的快照,不是实时值。
- 手动改过 MAC 后没更新该字段,会导致重启后被 NetworkManager 或 ifup 覆盖回旧值
- systemd-networkd 或 netplan 管理的系统根本不用这个字段,它只对传统的 initscripts 有效
- 检查是否启用该字段:看同一文件中是否有
MACADDR=且DEVICE=名称匹配,否则该行会被忽略
别信 /proc/net/arp 里的 MAC 地址
cat /proc/net/arp 显示的是已通信过的邻居 IP 对应的 MAC,不是本机网卡地址。
- 里面字段顺序固定:
IP address、HW type、Flags、HW address、Mask、Device - 第一列是远端 IP,最后一列才是对应接口名(如
ens33),但中间那个HW address是对方设备的 MAC,不是你自己的 - 空 ARP 表(无条目)很常见,尤其刚启动或未通信时,不能用来验证本机 MAC
ip -br link 看接口列表,挑出活跃的非 lo 接口,再用 ip link show <iface></iface> 定位 MAC;硬件型号则必须靠 lspci 或 ethtool -i,其他途径容易误判。











