最可靠方法是用ip link show:执行ip link show ens33,在link/ether后找到十六进制字符串即当前生效MAC地址;它默认预装、不依赖网卡状态、字段固定,比ifconfig更通用稳定。

ip link show 是当前最可靠、最通用的查看网卡 MAC 地址的方式。它不依赖额外安装包,输出稳定,且能查到所有内核识别的网卡(无论 up/down),比 ifconfig 更值得信赖。
用 ip link show 查当前生效的 MAC 地址
这是日常排查和脚本中首选方法,原因很实在:
-
ip link属于iproute2,所有主流发行版默认预装,无需sudo apt install net-tools或类似操作 - 即使网卡已
down(比如ip link set ens33 down),ip link show ens33仍能返回link/ether xx:xx:xx:xx:xx:xx——ifconfig ens33则完全不显示该接口 - 字段位置固定:
link/ether后紧跟的就是当前生效的 MAC,解析安全;而ifconfig在不同版本中可能用HWaddr或ether,脚本里得兼容两种 - 查单个接口时推荐加
grep过滤:ip link show ens33 | grep "link/ether" | awk '{print $2}',避免误匹配虚拟设备(如veth子接口)的其他link/ether行
读 /sys/class/net/xxx/address 获取纯字符串值
适合写轻量脚本或容器初始化阶段,优势是快、无依赖、无命令解析开销:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 输出就是干净的
00:1a:2b:3c:4d:5e,无空格无前缀,直接赋值给变量即可:mac=$(cat /sys/class/net/ens33/address) - 普通用户权限即可读,不需要
sudo;但前提是已知接口名 —— 可先用ip -br link | awk '$2 == "UP" {print $1; exit}'拿主网卡名 - 注意:
/sys/class/net/下的设备名可能和旧习惯不符(比如不是eth0而是enp0s3或ens160),别硬编码;ls /sys/class/net/ | grep -vE '^(lo|docker0|veth)'是较稳妥的过滤方式 - 该文件反映的是当前内核看到的地址,和
ip link show一致,但不体现“永久性”——如果 MAC 被临时修改过,这里也跟着变
用 ethtool -P 查网卡 EEPROM 中的永久 MAC
当你需要确认硬件出厂地址(比如怀疑被软件篡改、做资产审计、或排查驱动加载异常),必须用这个:
- 执行需
sudo:sudo ethtool -P ens33,输出形如Permanent address: 00:11:22:33:44:55 - 该值来自网卡 ROM/EEPROM,无法被
ip link set dev ens33 address修改,是唯一可信的“物理身份” - 不是所有网卡都支持:某些虚拟网卡(
veth、macvlan)、部分老旧 Realtek 或 USB 网卡会返回No data available;此时可退而求其次,看lspci -vv -s $(lspci | grep -i ethernet | head -n1 | cut -d' ' -f1)里的Subsystem:字段 - 别和
ethtool ens33(查速率、双工、链路状态)混淆——带-P才是查永久地址
为什么不要用 ifconfig、arp 或 /proc/net/arp
这些方法在特定场景下容易误导人,尤其对新手或自动化任务:
-
ifconfig不一定存在:Ubuntu 22.04+/Alpine/CentOS Stream 默认不装net-tools,运行直接报command not found -
ifconfig默认只列UP接口,ifconfig -a虽能列全,但禁用接口的 MAC 可能显示为00:00:00:00:00:00(实际并非如此) -
arp -n或cat /proc/net/arp显示的是**远端设备**的 MAC 地址(比如网关),不是你本机的;刚启动没通信时表为空,更不能用来验证本机配置 -
nmcli device show看起来方便,但它依赖 NetworkManager 正常运行;systemd-networkd 或 netplan 管理的系统里,该命令可能返回空或过期值
ip link show 或 /sys/class/net/xxx/address;后者必须上 sudo ethtool -P,且得接受部分设备不支持的事实。

















