最稳通用方法是ip link show:无论网卡up/down,执行ip link show ens33后取link/ether后的xx:xx:xx:xx:xx:xx;脚本中推荐ip link show ens33 | grep "link/ether" | awk '{print $2}';需永久物理地址时用sudo ethtool -p ens33。

用 ip link show 查当前生效的 MAC 地址
这是最稳、最通用的做法,不用装额外包,不管网卡是 up 还是 down 都能查到:
-
ip link show ens33输出里找link/ether后面那一串xx:xx:xx:xx:xx:xx,就是当前实际在用的 MAC - 脚本里别直接 grep 全局,加接口前缀过滤更安全:
ip link show ens33 | grep "link/ether" | awk '{print $2}' - 如果不确定接口名,先跑
ip -br link | grep -v "lo$" | head -n1 | awk '{print $1}'拿主网卡名 - 注意:虚拟设备(如
veth、macvlan)也会有link/ether行,得结合上文编号(比如2: ens33:)确认归属
用 cat /sys/class/net/xxx/address 快速取纯字符串
适合写轻量脚本或容器初始化阶段,零解析开销、普通用户权限就能读:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
-
mac=$(cat /sys/class/net/ens33/address)—— 输出就是干净的00:1a:2b:3c:4d:5e,可直接赋值 - 接口名不能硬编码,
ls /sys/class/net/ | grep -vE '^(lo|docker0|veth)'是较稳妥的过滤方式 - 该值和
ip link show一致,但不体现“永久性”——如果用ip link set dev ens33 address临时改过,这里也跟着变
用 sudo ethtool -P 查网卡 EEPROM 中的永久 MAC
需要确认物理身份(比如审计、绑定 License、排查 MAC 被篡改)时才用这个:
-
sudo ethtool -P ens33输出形如Permanent address: 00:11:22:33:44:55,这才是烧录在 ROM/EEPROM 里的原始值 - 不是所有网卡都支持:虚拟网卡、部分 Realtek 或 USB 网卡会返回
No data available - 别和
ethtool ens33(查速率、链路状态)混淆,漏掉-P就查错地方了
为什么别用 ifconfig
它已经不适合现代 Linux 环境了:
- Ubuntu 22.04+、Alpine、CentOS Stream 等默认不装
net-tools,直接运行报command not found - 即使装了,
ifconfig ens33默认只显示UP状态的接口;网卡被ip link set ens33 down后就查不到 - 输出字段名不统一:老版本是
HWaddr,新版本是ether,脚本里得双兼容 - 依赖 NetworkManager 或 udev 状态,在 initramfs、容器等受限环境可能失效
ip link show 或 /sys/class/net/xxx/address 就够了;只有做硬件溯源、安全审计这类场景,才需要 ethtool -P 加 sudo 去碰 EEPROM。










