能,ip link show是最推荐方式,输出中link/ether后十六进制字符串即当前生效MAC地址,如00:1a:2b:3c:4d:5e,不依赖网卡启停状态且默认预装。

ip link show 能直接看到 MAC 地址吗
能,而且是最推荐的方式。输出里 link/ether 后面那一串就是当前生效的 MAC 地址,比如 link/ether 00:1a:2b:3c:4d:5e。
注意点:
-
ip link show不加参数会列出所有接口,信息量大;建议直接指定网卡名,如ip link show ens33 - 输出中可能有多个
link/ether行(比如虚拟网卡、bond 接口),要确认你查的是物理网卡,通常看接口名是否为eth0、ens33、enp0s3这类 - 某些容器或 network namespace 下执行时,可能看不到宿主机网卡,得切到对应命名空间再查
ifconfig 输出里的 ether 和 hwaddr 是同一个东西吗
是同一个字段,但不同发行版显示略有差异:ether 是主流输出(Debian/Ubuntu/Fedora),HWaddr 多见于旧版 CentOS/RHEL 6 或 net-tools 较老版本。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
实际用法一致,都是指当前接口的 MAC 地址:
- 如果系统没装
net-tools(如最小化安装的 Ubuntu 22.04+ 或 CentOS Stream),ifconfig命令根本不存在,别硬试 -
ifconfig eth0 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'可提取 MAC,但正则容易误匹配其他十六进制串,不如直接用ip -
ifconfig -a会显示所有接口(包括 down 状态的),而ip link show默认只显示 up 的,加down参数才能看到全部
/sys/class/net/*/address 文件为什么有时读不到
因为该路径下文件只对已注册的网络设备存在,不是“所有可能的网卡”,而是“内核已识别并完成初始化的接口”。常见读取失败原因:
- 网卡驱动没加载,比如新插入的 USB 网卡还没被识别,
/sys/class/net/下压根没有对应目录 - 接口名拼错,比如把
enp0s31f6写成enp0s31f6u1,cat报No such file or directory - 权限没问题(普通用户可读),但某些嵌入式或容器环境挂载了只读 sysfs,
cat会失败 - 该方式返回的是纯字符串,不带空格和换行,适合脚本调用,但无法区分“当前 MAC”和“永久 MAC”
ethtool -P 查出来的 Permanent address 一定可靠吗
绝大多数情况下可靠,但要注意它依赖网卡固件和驱动支持:
- 执行
sudo ethtool -P ens33时若提示No data available,说明该网卡不支持读取 EEPROM 中的原始地址(常见于部分 Realtek、USB 网卡或虚拟网卡) - 有些厂商允许通过 BIOS/UEFI 修改永久 MAC,此时
ethtool -P返回的就是修改后的值,不是出厂烧录值 - 虚拟机里查到的 “Permanent address” 往往是虚拟化层伪造的,和物理宿主机无关,不能用于硬件审计
- 真正需要验证硬件唯一性时,得结合
dmidecode -t system或主板序列号交叉比对,单靠 MAC 不够
eth0 这种名字在现代发行版里基本消失了,接口名变成 ens33、enp0s3 或 eno1,查之前先 ls /sys/class/net/ 确认真实名称,否则所有命令都会查错设备。

















