登录
首页 >  文章 >  软件教程

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

时间:2025-10-21 13:12:28 190浏览 收藏

学习文章要努力,但是不要急!今天的这篇文章《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: <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学习网公众号也会发布文章相关知识,快来关注吧!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>