物理イーサネットインターフェイスの名前だけを取得する方法は?

物理イーサネットインターフェイスの名前だけを取得する方法は?

物理イーサネットインターフェイスの名前(仮想イーサネットインターフェイスではない)のみを取得する方法はありますか?
いくつかの背景知識を提供するために、一部のSBC(RPi 3)がそのIPアドレスをデータベースに書き込もうとします。しかし、異なるSBCの物理イーサネットインターフェイスは名前が異なる場合が多いため、対応するIPアドレスを取得することは困難でした。
この問題を解決するために私が考えることができる1つの方法は、すべてのSBCイーサネットインターフェイスにeth0などの共通名を割り当てることです。しかし、この方法はやや薄暗い感じがします。もしそうなら、物理イーサネットインターフェイスの名前を取得する代替手段はありますか?

ベストアンサー1

どのインターフェイスが仮想かを知ることができます。

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

別のオプションは、以下で修正されたこの小さなスクリプトを使用することです。この回答、これは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

おすすめ記事