Linux

如何動態查找連接到系統的介面的名稱和類型

  • January 14, 2016

我有一個案例,我需要動態配置一些文件,其中包括系統中存在的介面的名稱,eth0比如wlan0. 但是,當我更改系統時,有時它會更改為eth1or wlan1。從 Ubuntu 14.04 開始,乙太網介面被命名為p2p1, p1p1like this 而無線介面被命名為wlan0or 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.

引用自:https://serverfault.com/questions/748998