当前位置:首页 > 文章列表 > 文章 > 软件教程 > Linux查看MAC地址常用命令汇总

Linux查看MAC地址常用命令汇总

2025-09-16 08:10:00 0浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习文章相关编程知识。下面本篇文章就来带大家聊聊《Linux查看MAC地址命令大全》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

使用ip a、ifconfig或读取/sys/class/net/接口名/address可查MAC地址;通过接口名、驱动信息及OUI特征可区分物理与虚拟网卡;临时改MAC需ip link set down后修改再up,永久修改需配置网络管理工具如NetworkManager、netplan或ifcfg文件;MAC地址为数据链路层的物理标识,IP地址为网络层的逻辑地址,二者通过ARP协议协同实现局域网内精确通信。

linux怎么查mac命令

在Linux系统里,想查网卡的MAC地址其实挺直接的,主要就是通过几个命令来搞定。最常用也最推荐的,是 ip a 或者 ip addr show,它能显示所有网络接口的详细信息,包括MAC地址。如果你的系统还保留着比较旧的网络工具,ifconfig 也能派上用场,虽然它在很多新发行版里已经被 ip 命令家族取代了。此外,你甚至可以直接从 /sys 文件系统里读取,这对于脚本自动化来说特别方便。

解决方案

要查看Linux系统中的MAC地址,我通常会根据习惯和系统版本选择不同的方法。

最现代、也最推荐的方式是使用 ip 命令。你只需要在终端输入:

ip a

或者更具体的:

ip addr show

执行后,你会看到类似这样的输出(我这里会简化一下):

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0:  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 brd 192.168.1.255 scope global dynamic eth0
       valid_lft 86337sec preferred_lft 86337sec

在这里,eth0 是我的一个网络接口名,紧随其后的 link/ether 00:1a:2b:3c:4d:5e 就是它的MAC地址。lo 是环回接口,它的MAC地址通常都是全零,这很正常。

如果你是在一些较老的系统,或者习惯了老工具,ifconfig 依然可用:

ifconfig

输出会是这样(同样是简化版):

eth0: flags=4163  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 12345  bytes 6789012 (6.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 54321  bytes 9876543 (9.8 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ether 00:1a:2b:3c:4d:5e 这一行清楚地显示了MAC地址。不过,我个人更倾向于 ip a,因为它提供了更统一、更现代的接口管理方式,而且在许多新系统上 ifconfig 默认可能都没安装了。

还有一种方法,尤其适合在脚本里自动化获取某个特定网卡的MAC地址,那就是直接读取 /sys 文件系统:

cat /sys/class/net/eth0/address

eth0 替换成你想要查询的网卡接口名,比如 enp0s3wlan0。这个路径下存放着网卡的大量信息,address 文件就直接存储着MAC地址。这种方式的好处是,它非常直接,没有额外的命令解析开销,但缺点是你得先知道网卡的接口名。

linux怎么查mac命令

Linux下如何区分物理网卡与虚拟网卡的MAC地址?

区分物理网卡和虚拟网卡的MAC地址,在Linux系统里其实有些技巧,但并非总是一眼就能看出来。我通常会结合接口命名、驱动信息以及MAC地址本身的特性来判断。

首先,从命名上看,物理网卡通常会有比较规律的命名,比如老旧的 eth0eth1,或者新的基于PCI总线位置的命名规则,像 enp0s3ens33。无线网卡则可能是 wlan0。这些通常指向硬件设备。

虚拟网卡的名字就五花八门了,它们往往与创建它们的软件相关联。例如:

  • 虚拟网桥 (Bridge)br0virbr0 (KVM/QEMU默认创建的网桥)。这些网桥本身也有MAC地址,通常是随机生成的。
  • Docker 相关的接口docker0 (Docker的默认网桥),veth... (Docker容器内部和外部连接的虚拟以太网对)。
  • VPN 隧道接口tun0tap0 (OpenVPN等创建的虚拟接口)。
  • 虚拟机内部接口vnet0vnet1 (虚拟机内部的虚拟网卡,宿主机上可以看到其对应的虚拟接口)。

使用 ip a 命令时,除了MAC地址,还会显示接口的状态和类型。例如,virbr0 会显示 link/ether 后面跟着MAC,但它的 state 可能是 UPDOWN,而且通常没有物理设备的 bus-info 信息。

更深入一点,你可以查看网卡的驱动信息。通过 ethtool -i 命令,你可以看到网卡所使用的驱动模块、版本等。物理网卡会有对应的硬件驱动(如 e1000virtio_net),而虚拟接口可能显示 bridgeveth 等驱动,或者根本没有实际的硬件总线信息。

ethtool -i eth0

如果 eth0 是物理网卡,你可能会看到 driver: e1000driver: virtio_net(对于虚拟化环境中的半虚拟化网卡)。而对于 docker0 这样的虚拟网桥,ethtool 可能显示 driver: bridge

MAC地址本身也有一些特征。物理网卡的MAC地址通常由厂商分配,前三对十六进制数(OUI,Organizationally Unique Identifier)可以查询到对应的硬件厂商。虚拟网卡的MAC地址则常常是软件随机生成,或者遵循特定的虚拟化平台规则,比如VMware、VirtualBox、KVM等都有自己的一套OUI范围。虽然不是绝对,但如果一个MAC地址的OUI指向一个虚拟化软件厂商,那它很可能是虚拟网卡。

我个人在判断时,会先看接口名,再结合 ip a 的输出判断是否有IP地址、状态等,如果还不确定,就用 ethtool -i 看看驱动信息,基本就能八九不离十了。

linux怎么查mac命令

如何临时或永久更改Linux网卡的MAC地址?

更改MAC地址,这在某些特定场景下确实很有用,比如网络测试、绕过一些基于MAC地址的认证,或者只是想隐藏真实的硬件MAC。在Linux里,无论是临时还是永久,都有办法实现。

临时更改MAC地址

临时更改MAC地址是最常见的操作,它在系统重启后就会失效,恢复到原始的MAC地址。这通常通过 ip link 命令来完成。

假设我想把 eth0 的MAC地址改成 00:11:22:33:44:55

  1. 先关闭网卡接口:

    sudo ip link set dev eth0 down

    这一步是必要的,因为网卡在工作状态下通常不允许直接修改MAC地址。

  2. 设置新的MAC地址:

    sudo ip link set dev eth0 address 00:11:22:33:44:55
  3. 重新启用网卡接口:

    sudo ip link set dev eth0 up

现在,你再用 ip a 命令查看 eth0,就会发现它的MAC地址已经变成了 00:11:22:33:44:55。这种方法简单快捷,但正如我说的,重启后就会恢复原样。

永久更改MAC地址

要永久更改MAC地址,就需要修改网络配置文件了。不同的Linux发行版和网络管理工具,配置文件的位置和格式会有所不同。

对于使用 systemd-networkdNetworkManager 的系统 (如Ubuntu、CentOS 8/Stream、Fedora):

  • NetworkManager (常见于桌面环境和服务器): 可以使用 nmcli 命令或者直接编辑NetworkManager的配置文件。 使用 nmcli

    sudo nmcli connection modify eth0 mac-address 00:11:22:33:44:55
    sudo nmcli connection up eth0

    或者,编辑 /etc/NetworkManager/system-connections/ 目录下对应的连接配置文件(例如 eth0.nmconnection)。在 [ethernet] 部分添加或修改 mac-address= 字段。

    [ethernet]
    mac-address=00:11:22:33:44:55

    然后重启NetworkManager服务或重新激活连接。

  • netplan (Ubuntu 18.04+ 推荐): 编辑 /etc/netplan/*.yaml 文件。找到你对应的网卡配置部分,添加 macaddress 字段。

    network:
      ethernets:
        eth0:
          dhcp4: true
          macaddress: 00:11:22:33:44:55
      version: 2

    保存后,应用配置:

    sudo netplan apply

对于使用 ifcfg 文件的系统 (如CentOS 7、RHEL 7):

编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 文件(将 eth0 替换为你的网卡接口名)。 添加或修改 MACADDR 字段:

TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
DEVICE=eth0
ONBOOT=yes
MACADDR=00:11:22:33:44:55 # 添加或修改这一行

保存文件后,重启网络服务或者重启系统。

sudo systemctl restart network

需要注意的是,更改MAC地址可能会带来一些网络问题,比如在某些交换机上,如果新的MAC地址与网络中已知的MAC地址冲突,或者与交换机的端口安全策略不符,可能会导致网络不通。另外,一些ISP会绑定MAC地址进行认证,更改后可能需要重新注册。所以,在生产环境中操作时,务必谨慎。

linux怎么查mac命令

Linux中MAC地址与IP地址有什么不同,它们如何协同工作?

MAC地址和IP地址是网络通信中两个非常基础且关键的概念,它们虽然都用于标识网络设备,但工作在不同的网络层次,扮演着不同的角色。我把它们理解为“物理门牌号”和“逻辑邮政地址”。

MAC地址 (Media Access Control Address)

  • 性质: MAC地址是物理地址,通常由网络接口卡 (NIC) 制造商在生产时烧录到硬件中,是全球唯一的。它是一个48位的二进制数,通常表示为6组十六进制数,例如 00:1A:2B:3C:4D:5E
  • 作用: MAC地址工作在OSI模型的第二层,即数据链路层。它主要用于在同一个局域网 (LAN) 内识别和定位设备。当数据帧在局域网内传输时,交换机就是根据MAC地址来决定将数据帧转发到哪个端口。
  • 特点: MAC地址是“扁平”的,没有层级结构,不能直接用于跨网络的路由。它更像是设备的“身份证号”。

IP地址 (Internet Protocol Address)

  • 性质: IP地址是逻辑地址,由网络管理员或DHCP服务器分配。它是一个32位(IPv4,如 192.168.1.100)或128位(IPv6,如 2001:0db8::1)的二进制数,具有层级结构。
  • 作用: IP地址工作在OSI模型的第三层,即网络层。它主要用于在不同网络之间(广域网,WAN)识别和路由数据包。路由器就是根据IP地址来决定将数据包转发到哪个网络。
  • 特点: IP地址是“分层”的,包含网络部分和主机部分,可以用于跨网络的寻址和路由。它更像是设备的“邮政地址”,指明了数据包应该去往哪个“城市”和“街道”。

它们如何协同工作?

MAC地址和IP地址的协同工作,主要依赖于地址解析协议 (ARP - Address Resolution Protocol)。我喜欢把这个过程想象成一个快递员(数据包)在送货。

  1. 跨网络通信 (IP地址主导): 当一台计算机(比如A)想给另一台不同网络中的计算机(比如B)发送数据时,它首先知道B的IP地址。数据包会封装上B的IP地址作为目标地址。A会将数据包发送给它的默认网关(路由器)。路由器会根据目标IP地址,决定将数据包路由到哪个下一个网络。这个过程会重复多次,直到数据包到达B所在的局域网。

  2. 局域网内通信 (MAC地址主导,ARP辅助): 当数据包到达B所在的局域网后,路由器或发送方(如果A和B在同一局域网)需要知道B的MAC地址,才能将数据包精确地交付给B。这时候,ARP就登场了。

    • 发送方(或者路由器)会向局域网广播一个ARP请求,询问“谁是IP地址为 XXX.XXX.XXX.XXX 的设备?请告诉我你的MAC地址!”
    • 局域网中IP地址为 XXX.XXX.XXX.XXX 的设备(也就是B)收到ARP请求后,会回复一个ARP响应,告诉发送方“我是 XXX.XXX.XXX.XXX,我的MAC地址是 YY:YY:YY:YY:YY:YY。”
    • 发送方收到ARP响应后,就会将这个IP地址和MAC地址的映射关系存储在自己的ARP缓存中,以便后续快速查找。
    • 然后,发送方就可以构建一个数据帧,将数据包封装在其中,并使用目标MAC地址 YY:YY:YY:YY:YY:YY,通过局域网的交换机直接发送给B。

简单来说,IP地址负责将数据包从一个网络送到另一个网络,而MAC地址则负责在最终的局域网内,将数据包精确地投递到目标设备。它们就像是层层包裹的信件,IP地址是信封上的收件人地址,而MAC地址则是信件到达邮局后,邮递员根据具体门牌号进行最终投递的依据。没有其中任何一个,网络通信都无法顺利进行。

理论要掌握,实操不能落!以上关于《Linux查看MAC地址常用命令汇总》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

Python多列表合并技巧分享Python多列表合并技巧分享
上一篇
Python多列表合并技巧分享
JavaScript获取时间戳的几种方法
下一篇
JavaScript获取时间戳的几种方法
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ljg-skills -
    ljg-skills
    ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
    1168次使用
  • MELO音乐 - AI 音乐生成平台,支持多模态创作能力
    MELO音乐
    MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
    1121次使用
  • UniScribe - AI 免费在线音视频转文字平台
    UniScribe
    UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
    1059次使用
  • 剧云 - 免费 AI 智能中文剧本创作平台
    剧云
    剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
    1242次使用
  • 万象有声 - AI 一站式有声内容创作平台
    万象有声
    万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
    1239次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码