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

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

物理イーサネットインターフェイスの名前(仮想イーサネットインターフェイスではない)のみを取得する方法はありますか?
いくつかの背景知識を提供するために、一部の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

答え2

からインスピレーションを受ける既存の回答、有用な/sys/class/netディレクトリの名前を指定し、lsを使用しないでください警告そして周辺資料ではなく名前だけを見ればいいので、次のような単一のコマンドを思い出しました。

find /sys/class/net -mindepth 1 -maxdepth 1 -lname '*virtual*' -prune -o -printf '%f\n'

これにより、すべての非ループバックおよび非仮想インターフェイスのリストが表示されます。

$ find /sys/class/net -mindepth 1 -maxdepth 1 -lname '*virtual*' -prune -o -printf '%f\n'
eth1
eth0

答え3

これにより、物理デバイスの名前が提供されます。私はawkが複数のデバイスで動作しないと思います。ただし、awkを削除すると、すべての実際の名前のリストが表示されます。

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

答え4

ループバックのない「クリーンなインターフェイスのリスト」が必要です。

私は「仕事」だと思う2つの方法を思い出しました。

find /sys/class/net -type l -execdir basename '{}' ';' | grep -v "^lo$"

(指示:udevがシンボリックリンクを作成したすべての物理デバイスを見つけて、ファイル名とインターフェース名「basename」を取得します。|「lo」の行をすべて削除します。)

! ! ! Bashスクリプトで "ls"を使用しないでください

そして

arp | awk '{ if ( NR > 1  ) { print } }' | awk '{print $5}' | sed '/^$/d'| sort -u

(指針: arp テーブル情報提供 | 行 1 が arp テーブルタイトルの場合は印刷しない | 5 列目のみ印刷 | 空行削除 | 重複項目をアルファベット順にソートして削除)

arpコマンドを使用すると、「イーサネット」デバイスを指定できます。

arp -t ether

これが「仮想デバイス」を削除するかどうかはわかりません。確かに私のWi-Fiネットワークインターフェイスが含まれています。 「きれいな名前のリスト」を使用すると、他のほとんどのコマンドに接続し、すべてゼロのMACアドレスまたは仮想属性をテストできます。

"ls"解析に多くの答えがあります。本当にしてはいけないことです。ネットワークインターフェイスの名前は、一般的な方法を壊さないように指定されている可能性があります(空白、改行、その他の奇妙な文字など)。さらに、find、arp、awk、sed、および sort は通常、すべての Linux デバイスにすでに存在します。

私はKubuntuノートブックでのみコマンドをテストしました。誰も私にお金を払わず、それが今日私が持っている時間です。また、ネットワークインターフェイスの名前も知っておく必要があり、個々のネットワークデバイスを認識せず、存在全体が完全に抽象的なインスタンスでarpインターフェイスを使用します。

関連情報