web-dev-qa-db-ja.com

物理イーサネットインターフェイスの名前のみを取得するにはどうすればよいですか?

物理イーサネットインターフェイスの名前のみを取得する方法はありますか(つまり、仮想イーサネットインターフェイスではありません)。
背景を少し説明するために、いくつかのSBC(RPi 3)にIPアドレスをデータベースに書き込むようにしています。しかし、通常、異なるSBC上の物理イーサネットインターフェイスの名前は同じではないため、IPアドレスを取得するのが難しいと感じています。
これを解決する方法の1つは、すべてのSBCイーサネットインターフェイスにeth0のような共通の名前を付けることです。しかし、この方法は少し不格好に感じます。それでは、物理イーサネットインターフェイスの名前のみを取得する他の方法はありますか?

3
yash

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

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 から変更され、00:00:00:00:00:00のMACアドレスを持たないすべてのインターフェースの名前、つまり物理的な名前を出力します。

#!/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
7
dr_

これにより、1つの物理デバイスの名前が表示されます。 awkは複数のデバイスでは正しく機能しないと思います。ただし、awkを削除すると、すべての物理名のリストが表示されます。

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

1
Spellinator