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