システムに存在するインターフェースの名前(eth0
、wlan0
など)を含むいくつかのファイルを動的に構成する必要があるユースケースがあります。ただし、システムを変更すると、eth1
またはwlan1
に変更されることがあります。 Ubuntu 14.04以降、イーサネットインターフェイスはこのようにp2p1
、p1p1
と呼ばれ、ワイヤレスインターフェイスはwlan0
またはwlan1
と呼ばれます。
したがって、インターフェイス名は何でもかまいません。どの種類のインターフェイスにどのような名前が付けられているかがわかれば問題ありません。
そのための小さなスクリプトを作成しましたが、Linuxベースのすべてのシステムで機能するこれを見つけるためのより良い方法があるかどうかはわかりません。
#!/bin/bash
# check if directory exist
DIRECTORY=/sys/class/net
wifi_interface=""
lan_interface=""
if [ -d "$DIRECTORY" ]; then
cd $DIRECTORY
ilist=`ifconfig -s | awk '{print $1}' | tail -n +2`
# array length
ilist_len=`echo "${ilist[@]}" | wc -l`
# empty array
il=
# Iterating over interfaces
for i in $(seq 1 $ilist_len)
do
iname=`echo $ilist | sed -n "$i"p`
echo $iname
if [ "$iname" != "lo" ]; then
cur_dir=$DIRECTORY/$iname
cd $cur_dir
if [ -d "$cur_dir/wireless" ]; then
wifi_interface=$iname
else
lan_interface=$iname
fi
fi
pwd
cd ~
done
exit 0
else
echo "Can't find the directories ! Something went wrong "
exit 0
fi
上記のスクリプトでは、ディレクトリ/sys/class/net/<INTERFACE>/wireless
の有無に基づいてインターフェイスタイプを決定しました。このスクリプトは、イーサネットとワイヤレスに1-1インターフェイスのみが存在することを前提としています。
wireless
ディレクトリがすべてのワイヤレスインターフェイスに常に存在することは疑わしいです。たとえば、仮想ワイヤレスインターフェイスの場合。
今日、比較的最近のLinuxディストリビューションでは、最初はipコマンドを使用しようとしました。
ip link show
次に、出力をフィルタリングして、インターフェイスのリストを取得します。
ifconfig -a
を使用することもできますが、一部のディストリビューションの新しいリリースでは、デフォルトでこれがインストールされなくなりました。
同様に、netstat -i
が役立つ場合があります。
iwconfig
コマンドを使用して、インターフェイスがワイヤレスかどうかを判断できます
iwconfig ens160
ens160 no wireless extensions.