系统相关
首页 > 系统相关> > linux – 如何只获取物理以太网接口的名称?

linux – 如何只获取物理以太网接口的名称?

作者:互联网

有没有办法只获得物理以太网接口的名称(即不是虚拟以太网接口)?
为了给出一些背景知识,我试图让一些SBC(RPi 3)将其IP地址写入DataBase.但由于不同SBC上物理以太网接口的名称通常不相同,我发现很难获得它们的IP地址.
我能想到解决这个问题的一种方法是给所有SBC以太网接口一个像eth0这样的通用名称.但这种方法感觉有点笨重.那么,还有其他替代方法只能获得物理以太网接口的名称吗?

解决方法:

您可以确定哪些接口是虚拟的

ls -l /sys/class/net/

这给你这个输出:

[root@centos7 ~]# ls -l /sys/class/net/
total 0
lrwxrwxrwx. 1 root root 0 Mar 20 08:58 ens33 -> ../../devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/ens33
lrwxrwxrwx. 1 root root 0 Mar 20 08:58 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx. 1 root root 0 Mar 20 08:58 virbr0 -> ../../devices/virtual/net/virbr0
lrwxrwxrwx. 1 root root 0 Mar 20 08:58 virbr0-nic -> ../../devices/virtual/net/virbr0-nic

从那里,你可以grep只过滤非虚拟接口:

ls -l /sys/class/net/ | grep -v virtual

另一种选择是使用这个从this answer改编的小脚本,它打印所有没有MAC地址为00:00:00:00:00:00的接口的名称,即物理:

#!/bin/bash

for i in $(ip -o link show | awk -F': ' '{print $2}')
do
    mac=$(ethtool -P $i)
    [[ $mac != *"00:00:00:00:00:00"* ]] && echo "$i"
done

标签:linux,networking,network-interface
来源: https://codeday.me/bug/20190816/1665059.html