物理イーサネットインターフェイスの名前のみを取得する方法はありますか(つまり、仮想イーサネットインターフェイスではありません)。
背景を少し説明するために、いくつかのSBC(RPi 3)にIPアドレスをデータベースに書き込むようにしています。しかし、通常、異なるSBC上の物理イーサネットインターフェイスの名前は同じではないため、IPアドレスを取得するのが難しいと感じています。
これを解決する方法の1つは、すべての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 から変更され、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
これにより、1つの物理デバイスの名前が表示されます。 awkは複数のデバイスでは正しく機能しないと思います。ただし、awkを削除すると、すべての物理名のリストが表示されます。
lshw -class network | grep -A 1 "bus info" | grep name | awk -F': ' '{print $2}'