Linux
如何動態查找連接到系統的介面的名稱和類型
我有一個案例,我需要動態配置一些文件,其中包括系統中存在的介面的名稱,
eth0
比如wlan0
. 但是,當我更改系統時,有時它會更改為eth1
orwlan1
。從 Ubuntu 14.04 開始,乙太網介面被命名為p2p1
,p1p1
like this 而無線介面被命名為wlan0
orwlan1
。所以我們可以說介面名稱可以是任何東西,只要我們能找到給什麼樣的介面起什麼名字就可以了。
我為此編寫了一個小腳本,但我不知道是否有更好的方法來找到它,它適用於所有基於 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.