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

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

2025-10-07 08:21:31 0浏览 收藏

想知道Linux系统下如何查看和修改MAC地址吗?本文为你提供一份详尽的Linux查MAC地址命令大全,助你轻松掌握。文章将介绍如何通过`ip a`、`ifconfig`等命令以及直接读取`/sys/class/net/接口名/address`文件来查询网卡的MAC地址。同时,还会教你如何区分物理网卡与虚拟网卡,通过接口名、驱动信息及OUI特征进行辨别。更重要的是,本文还提供了临时和永久修改MAC地址的方法,包括使用`ip link set`命令以及配置NetworkManager、netplan或ifcfg文件。最后,文章还深入解析了MAC地址与IP地址的区别,以及它们如何通过ARP协议协同工作,实现局域网内的精确通信,是Linux网络管理不可或缺的知识点。

使用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: <LOOPBACK,UP,LOWER_UP> 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: <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 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<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 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学习网公众号了解相关技术文章。

HTML5Server-SentEvents实现教程HTML5Server-SentEvents实现教程
上一篇
HTML5Server-SentEvents实现教程
Golang竞态检测-race参数使用教程
下一篇
Golang竞态检测-race参数使用教程
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之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推荐
  • ChatExcel酷表:告别Excel难题,北大团队AI助手助您轻松处理数据
    ChatExcel酷表
    ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
    3180次使用
  • Any绘本:开源免费AI绘本创作工具深度解析
    Any绘本
    探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
    3391次使用
  • 可赞AI:AI驱动办公可视化智能工具,一键高效生成文档图表脑图
    可赞AI
    可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
    3420次使用
  • 星月写作:AI网文创作神器,助力爆款小说速成
    星月写作
    星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
    4526次使用
  • MagicLight.ai:叙事驱动AI动画视频创作平台 | 高效生成专业级故事动画
    MagicLight
    MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
    3800次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码