首页 > Sysadmin > 正文

Linux 查看网卡 MAC 地址的 3 种方式

huyuanwen 2026-11-04 Sysadmin

草稿待审: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 列出所有。


参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。