web-dev-qa-db-ja.com

システムに接続されているインターフェースの名前とタイプを動的に見つける方法

システムに存在するインターフェースの名前(eth0wlan0など)を含むいくつかのファイルを動的に構成する必要があるユースケースがあります。ただし、システムを変更すると、eth1またはwlan1に変更されることがあります。 Ubuntu 14.04以降、イーサネットインターフェイスはこのようにp2p1p1p1と呼ばれ、ワイヤレスインターフェイスは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ディレクトリがすべてのワイヤレスインターフェイスに常に存在することは疑わしいです。たとえば、仮想ワイヤレスインターフェイスの場合。

4
Ankit Kulkarni

今日、比較的最近のLinuxディストリビューションでは、最初はipコマンドを使用しようとしました。

ip link show

次に、出力をフィルタリングして、インターフェイスのリストを取得します。

ifconfig -aを使用することもできますが、一部のディストリビューションの新しいリリースでは、デフォルトでこれがインストールされなくなりました。

同様に、netstat -iが役立つ場合があります。

iwconfigコマンドを使用して、インターフェイスがワイヤレスかどうかを判断できます

iwconfig ens160
ens160    no wireless extensions.
4
user9517