首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何只获取物理以太网接口的名称?

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

Unix & Linux用户
提问于 2018-03-20 07:27:13
回答 4查看 16K关注 0票数 8

是否有一种方法只获取物理以太网接口的名称(即不获取虚拟以太网接口)?

为了给出一些背景信息,我试图让一些SBCs(RPi 3)将它们的IP地址写入DataBase。但是,由于不同SBCs上的物理以太网接口的名称通常不一样,我发现很难获得它们的IP地址。

解决这个问题的一种方法是给所有的SBCs以太网接口一个像eth0这样的通用名称。但这种方法有点笨重。那么,是否还有其他选择来获得物理以太网接口的名称呢?

EN

回答 4

Unix & Linux用户

发布于 2021-11-17 18:55:28

现有答案的启发,它命名了有用的/sys/class/net目录和告诫不要使用ls,以及我只需要查看名称而不查看周围的材料,因此我想出了以下单个命令:

代码语言:javascript
复制
find /sys/class/net -mindepth 1 -maxdepth 1 -lname '*virtual*' -prune -o -printf '%f\n'

这给出了所有非回送接口和非虚拟接口的列表:

代码语言:javascript
复制
$ find /sys/class/net -mindepth 1 -maxdepth 1 -lname '*virtual*' -prune -o -printf '%f\n'
eth1
eth0
票数 7
EN

Unix & Linux用户

发布于 2019-03-01 17:54:08

这将给出一个物理设备的名称。我认为awk不适用于多种设备。但是,去掉awk,您就会得到所有物理名称的列表。

lshw -class network | grep -A 1 "bus info" | grep name | awk -F': ' '{print $2}'

票数 3
EN

Unix & Linux用户

发布于 2021-10-13 15:06:21

我使用了下面的方法在python中获得它。

代码语言:javascript
复制
#!/usr/bin/env python3
from os import listdir
from os.path import islink, realpath, join

interfaces = [i for i in listdir("/sys/class/net") if islink(join("/sys/class/net", i))]
interfaces = [i for i in interfaces if not realpath(join("/sys/class/net", i)).startswith(("/sys/devices/virtual", "/sys/devices/vif"))]

print("Physical interfaces:", interfaces)

在我的案件中打印以下内容:

代码语言:javascript
复制
Physical interfaces: ['enp3s0']

请注意,虚拟网络设备并不总是通过路径“/sys/设备/虚拟”找到的。例如,在Xen节点上,也有“设备/vif-1-0/net/vif1.0”等设备,因此我也将它们排除在外。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/432245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档