最稳方式是读 /sys/class/net/ens33/address,内容为纯MAC字符串;ip link show ens33 显示当前生效MAC;ethtool -P ens33(需sudo)查出厂永久MAC。

直接看 /sys/class/net/ 下的 address 文件最稳,不用装包、不依赖服务、连 NetworkManager 都没启动也能用。
用 ip link show 查当前生效的 MAC 地址
这是现代 Linux 推荐方式,ip 命令已取代 ifconfig 成为标准工具。输出里 link/ether 后面那个就是当前接口正在用的 MAC 地址。
-
ip link show ens33—— 只查单个网卡,适合脚本或快速定位 -
ip -br link | awk '{print $1, $3}'—— 一行一个接口+MAC,方便批量扫 - 注意:如果网卡 down 了(
state DOWN),link/ether行仍会显示,但不代表正在通信 - 某些虚拟网卡(如 veth、docker0)也会出现在列表里,别误当成物理网卡
用 cat /sys/class/net/*/address 读内核暴露的原始值
这个路径是内核通过 sysfs 直接导出的硬件信息,内容就是纯 MAC 字符串,无格式、无多余空格,最适合自动化场景。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
cat /sys/class/net/ens33/address—— 最简写法,无需解析命令输出 -
cat /sys/class/net/*/address 2>/dev/null—— 一次列出所有启用网卡的 MAC(忽略权限错误) - 该文件只读,且只要网卡被内核识别过(哪怕没 up),就能读到值
- 注意:某些 USB 网卡或热插拔设备可能在插入后才生成该文件,先
ls /sys/class/net/确认存在再读
用 ethtool -P 验证出厂烧录的永久 MAC
当怀疑 MAC 被软件修改过(比如用了 ip link set dev ens33 address),就得查 EEPROM 里的原始值。这个值无法被常规命令覆盖,是硬件真实身份。
-
sudo ethtool -P ens33—— 必须加sudo,否则报 Permission denied - 输出类似
Permanent address: 00:1a:2b:3c:4d:5e,这才是网卡出厂 ID - 部分老旧网卡或虚拟化环境(如 QEMU 默认网卡)可能不支持
-P,返回No data available - 别和
ethtool ens33混用——后者显示的是当前运行时 MAC,不是 permanent
真正容易被忽略的是:MAC 地址在不同层级可能不一致。比如 NetworkManager 重写了接口 MAC,ip link show 显示的是改后的,/sys/class/net/ens33/address 还是原来的,而 ethtool -P 才是铁证。查之前先想清楚你要的是“当前网络栈用的”,还是“硬件本来长啥样”。

















