在Linux系统中,MAC地址(Media Access Control Address)是网卡的物理地址,由6组16进制数组成(如00:1A:2B:3C:4D:5E),用于在局域网中唯一标识网络设备,查看MAC地址是网络管理、故障排查和安全配置的常见需求,本文将详细介绍多种查看Linux网卡MAC地址的方法,涵盖命令行工具、系统文件、图形界面及专业硬件检测工具,并总结不同方法的适用场景与注意事项。
使用ifconfig命令查看MAC地址
ifconfig
是传统的网络配置工具,属于net-tools
包,通过它可以快速查看网卡的MAC地址。
操作步骤:
-
安装net-tools(若系统未预装):
- 基于Debian/Ubuntu的系统:
sudo apt install net-tools
- 基于RHEL/CentOS的系统:
sudo yum install net-tools
- 基于Debian/Ubuntu的系统:
-
查看所有网卡的MAC地址:
执行命令:ifconfig
输出结果中,每个网卡信息段的ether
字段即为MAC地址,eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255 ether 00:1A:2B:3C:4D:5E txqueuelen 1000 (Ethernet) RX packets 1000 bytes 150000 (150.0 KB) TX packets 800 bytes 120000 (120.0 KB)
-
查看指定网卡的MAC地址:
若只想查看特定网卡(如eth0
),使用:ifconfig eth0
,直接定位ether
字段。
注意事项:
- 部分新Linux发行版(如Ubuntu 20.04+)默认未安装
net-tools
,需先安装; ifconfig
命令已被iproute2
包中的ip
命令取代,但ifconfig
仍因直观性被广泛使用。
使用ip命令查看MAC地址
ip
命令是iproute2
包的核心工具,现代Linux系统推荐使用,功能更全面且稳定。
操作步骤:
-
查看所有网卡的MAC地址:
执行命令:ip link show
输出结果中,每块网卡信息段的link/ether
字段即为MAC地址,2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:1A:2B:3C:4D:5E brd ff:ff:ff:ff:ff:ff inet 192.168.1.100/24 scope global eth0 valid_lft forever preferred_lft forever
-
查看指定网卡的MAC地址:
使用ip link show [网卡名]
,如:ip link show eth0
,直接提取link/ether
字段。
优势:
- 无需额外安装(现代系统默认集成);
- 支持更丰富的网络参数查看(如MTU、队列状态等)。
通过ethtool查看MAC地址
ethtool
是用于查询和配置网卡参数的工具,可查看网卡的“永久MAC地址”(Physical Address)。
操作步骤:
-
安装ethtool(若未安装):
- Debian/Ubuntu:
sudo apt install ethtool
- RHEL/CentOS:
sudo yum install ethtool
- Debian/Ubuntu:
-
查看指定网卡的永久MAC地址:
执行命令:ethtool -P [网卡名]
,ethtool -P eth0
输出结果:Permanent address: 00:1A:2B:3C:4D:5E
-
查看网卡的完整信息(含MAC地址):
使用ethtool [网卡名]
,在输出中找到Permanent address
或Current MAC address
字段。
适用场景:
- 需要确认网卡的“固化MAC地址”(如物理标签上的地址);
- 部分离线网卡或特殊硬件需通过
ethtool
获取准确信息。
读取系统文件查看MAC地址
Linux内核会将网卡信息存储在/sys/class/net/
目录下,通过直接读取文件可获取MAC地址,适合脚本编程。
操作步骤:
-
进入网卡目录:
例如查看eth0
的MAC地址,执行:cd /sys/class/net/eth0/
-
读取address文件:
执行命令:cat address
输出即为MAC地址(小写无冒号,如001a2b3c4d5e
),可通过tr
格式化:cat address | tr -d ':' | tr 'a-z' 'A-Z'
特点:
- 无需额外工具,所有Linux系统均支持;
- 输出为纯文本,便于脚本处理(如批量获取多网卡MAC地址)。
使用nmcli查看MAC地址(NetworkManager环境)
若系统使用NetworkManager
管理网络(如桌面版Linux),可通过nmcli
命令查看MAC地址。
操作步骤:
-
查看所有网卡的MAC地址:
执行命令:nmcli device status
输出结果中MAC地址
列即为对应网卡的MAC地址,DEVICE TYPE STATE CONNECTION eth0 ethernet connected eth0 MAC地址: 00:1A:2B:3C:4D:5E
-
查看指定网卡的详细信息:
使用nmcli device show [网卡名]
,nmcli device show eth0
,在输出中查找GENERAL.HWADDR
字段。
适用场景:
- 使用NetworkManager的桌面系统(如Ubuntu、Fedora Workstation);
- 需结合网络连接配置信息(如IP、DNS)一起查看时。
使用lshw查看硬件级MAC地址
lshw
是一款硬件信息检测工具,可查看网卡的物理详细信息,包括MAC地址、厂商、型号等。
操作步骤:
-
安装lshw:
- Debian/Ubuntu:
sudo apt install lshw
- RHEL/CentOS:
sudo yum install lshw
- Debian/Ubuntu:
-
查看网卡硬件信息:
执行命令:lshw -C network
输出结果中,网卡(如*-network
)下的serial:
字段即为MAC地址,*-network:0 description: Ethernet interface product: RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller vendor: Realtek Semiconductor Co., Ltd. physical id: 0.0.0 bus info: pci@0000:02:00.0 logical name: eth0 version: 06 serial: 00:1A:2B:3C:4D:5E
优势:
- 可获取网卡的硬件厂商、型号等详细信息;
- 适用于排查硬件兼容性问题。
图形界面查看MAC地址
对于不习惯命令行的用户,可通过Linux桌面环境的网络设置界面查看MAC地址。
操作步骤(以GNOME为例):
- 点击右上角网络图标 → “有线设置”或“Wi-Fi设置”;
- 选择对应网络连接(如“以太网”);
- 点击“齿轮图标”进入详情页,在“硬件地址”或“MAC地址”字段查看。
其他桌面环境:
- KDE Plasma:“系统设置”→“连接”→选中网卡→“详细信息”中的“MAC地址”;
- XFCE:“设置”→“网络”→选中网卡→“编辑”→“MAC地址”。
不同方法对比与总结
为方便选择,以下表格总结各方法的适用场景与特点:
方法 | 命令/操作示例 | 适用系统/环境 | 权限要求 | 优点 | 缺点 |
---|---|---|---|---|---|
ifconfig | ifconfig eth0 |
安装net-tools的系统 | root/普通 | 简单直观,传统工具 | 新系统默认不安装 |
ip | ip link show eth0 |
现代Linux发行版 | root/普通 | 新版推荐,信息全面 | 输出稍复杂 |
ethtool | ethtool -P eth0 |
支持ethtool的网卡 | root | 可查永久MAC,支持详细网卡 | 部分离线网卡不支持 |
/sys/class/net/ | cat /sys/class/net/eth0/address |
所有Linux系统 | 普通 | 适合脚本,无依赖 | 仅显示当前MAC,无额外信息 |
nmcli | nmcli device show eth0 |
NetworkManager环境 | 普通 | 结合网络配置信息 | 依赖NetworkManager服务 |
lshw | lshw -C network |
需安装lshw的系统 | root | 硬件信息全面 | 输出信息量大,需过滤 |
图形界面 | 网络设置→硬件地址 | 桌面版Linux | 普通 | 无需命令,适合新手 | 依赖图形环境 |
注意事项
- 指定网卡名:若系统有多网卡(如
eth0
、ens33
、wlan0
),需明确指定网卡名,避免混淆,可通过ip link
或ls /sys/class/net/
查看所有网卡名称。 - MAC地址随机化:Linux内核3.2以上支持MAC地址随机化(保护隐私),此时通过
ip link
看到的MAC地址可能是临时地址,永久地址需通过ethtool -P
查看。 - 虚拟网卡:虚拟机(如VMware、KVM)或容器(Docker)会生成虚拟网卡(如
docker0
、vethXXX
),其MAC地址为虚拟生成,与物理网卡无关。 - 权限问题:部分命令(如
ifconfig
、ethtool
、lshw
)需root权限执行,可通过sudo
提升权限。
相关问答FAQs
Q1:为什么我查到的MAC地址和物理网卡标签上的不一致?
A:可能原因包括:① MAC地址随机化:Linux内核启用了隐私保护功能,临时使用随机MAC地址,可通过sysctl -w net.ipv6.conf.all.use_tempaddr=0
关闭(需root);② 虚拟化环境:虚拟机或容器的虚拟网卡MAC地址为动态生成,与物理网卡无关;③ 多网卡绑定:若配置了网卡绑定(如bonding),绑定的虚拟网卡MAC地址可能与物理网卡不同;④ 网卡厂商设置:部分企业级网卡支持虚拟化功能(如SR-IOV),会分配不同的MAC地址。
Q2:如何永久修改Linux网卡的MAC地址?
A:修改MAC地址需root权限,常见方法有两种:
- 修改网络配置文件(适用于传统网络管理):
- Debian/Ubuntu:编辑
/etc/network/interfaces
,在网卡配置中添加hwaddress ether [新MAC地址]
,如hwaddress ether 00:11:22:33:44:55
,重启网络或系统生效。 - RHEL/CentOS:编辑
/etc/sysconfig/network-scripts/ifcfg-eth0
,添加MACADDR=[新MAC地址]
,重启网络服务(systemctl restart network
)。
- Debian/Ubuntu:编辑
- 使用udev规则(推荐):
创建udev规则文件:sudo nano /etc/udev/rules.d/10-mac-address.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="[原MAC地址]", ATTR{address}="[新MAC地址]"
,保存后执行sudo udevadm control --reload-rules && sudo udevadm trigger
,重启系统生效。
注意:修改MAC地址可能导致网络连接异常,建议仅在必要时操作(如网络管理需求),并确保新MAC地址不与其他设备冲突。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/27166.html