草稿待审:nmcli 基于文档核查,尚未实际执行。
查看网卡硬件地址不用猜,三条命令覆盖绝大多数场景。
TL;DR
日常查 MAC:ip link show 或 ip addr show,现代、无需额外安装,输出里 link/ether 行就是当前地址[1]。
需要永久地址:ethtool -P <接口>,需 root,读网卡 ROM[2]。
托管网络环境:nmcli device show,NetworkManager 接管时最直观[3]。
方式一:ip link show
ip 来自 iproute2,Debian/Ubuntu/RHEL 默认预装,替代旧 ifconfig[1]。
ip link show eth0
输出示例:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:15:5d:a3:0c:b5 brd ff:ff:ff:ff:ff:ff
link/ether 后第一组值就是当前 MAC。加 -details 可看更多参数(addrgenmode、parentbus 等),对虚拟化环境有用[1]。
ip -details link show eth0
查看所有网卡:
ip link show
临时修改 MAC
sudo ip link set eth0 address 00:11:22:33:44:55
重启网卡或卸下 iproute2 包可回滚;或者直接重启接口:
sudo ip link set eth0 down && sudo ip link set eth0 up
方式二:ethtool -P
ethtool 直接读网卡驱动的永久地址(factory MAC)[2]。
sudo ethtool -P eth0
输出示例:
Permanent address: b8:cb:29:aa:aa:aa
注意:需要 root。WSL 的 hv_netvsc 驱动返回 Operation not permitted,且没有 permanent_address sysfs 文件——虚拟化环境下永久地址概念不适用。
方式三:nmcli device show
当系统使用 NetworkManager 托管网络时,nmcli 可列出每个设备的 HWADDR[3]。
nmcli device show eth0
输出示例:
GENERAL.HWADDR: 00:15:5d:a3:0c:b5
GENERAL.DEVICE: eth0
GENERAL.TYPE: ethernet
sysfs 直读
/sys 提供内核视角的地址,无需安装额外工具[4]。
cat /sys/class/net/eth0/address
cat /sys/class/net/eth0/addr_assign_type
address 是当前地址;addr_assign_type 为 0 表示 permanent,1 表示随机生成(常见于容器/虚拟机)[4]。
回滚
- 改完 MAC 后重启接口即恢复
- 删除
/etc/udev/rules.d/里的持久化规则可回滚 - 容器/虚拟机重启后 MAC 通常由虚拟化层重新分配
排错速查
| 现象 | 原因 | 处理 |
|---|---|---|
ifconfig: command not found |
net-tools 未安装 | 安装 net-tools 或改用 ip |
ethtool: Operation not permitted |
普通用户权限不足 | 加 sudo;虚拟机可能无法读取永久地址 |
nmcli: command not found |
NetworkManager CLI 未安装 | 安装 network-manager 或用 ip 替代 |
addr_assign_type=1 |
随机/虚拟化地址 | 正常,无需处理 |
实测与局限性
- 实测环境:WSL2 Ubuntu 24.04.4,内核 6.6.114.1。
ip link show、ip -details link show、cat /sys/class/net/eth0/address:已实际执行,输出一致。ethtool eth0:已执行,但sudo ethtool -P因 WSL sudo 超时未完成;ethtool 普通执行显示Operation not permitted,永久地址不可读。nmcli:未安装(doc-only)。- 局限性:WSL/容器/云的 MAC 由虚拟化层分配,永久地址可能不可用;改 MAC 需 root,且某些网卡驱动不允许任意地址。
FAQ
Q: 改完 MAC 重启后没恢复? A: 检查 /etc/udev/rules.d/ 里是否有持久化规则,或 NetworkManager 连接配置里的 cloned-mac-address。
Q: 虚拟机里 ethtool -P 报错怎么办? A: 这是正常的——虚拟化平台通常通过 MAC 地址表管理地址,不会暴露底层永久地址。
Q: ip 和 ifconfig 显示不一样? A: 两者读同一内核表,通常一致;若不同,以 ip 为准(net-tools 可能缓存旧值)。
Q: 为什么我的 MAC 总是变? A: 容器/云实例默认随机生成;物理机由网卡 ROM 固定,除非手动改。
Q: 怎么看第二张网卡? A: 把 eth0 换成实际接口名,ip link show 列出所有。
参考资料
- [1] ip(8) – Linux man page(ip)
- [2] ethtool(8) — ethtool — Debian bookworm(ethtool)
- [3] nmcli(1) — network-manager — Debian bookworm(nmcli)
- [4] sysfs-class-net — kernel.org(kernelsysfs)
文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。