我有一个用例,我需要动态配置一些文件,其中包括系统中存在的接口名称,例如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
目录是否始终存在于所有无线接口中。例如在虚拟无线接口的情况下。
答案1
今天,对于一个相对较新的 Linux 发行版,我首先会尝试使用 ip 命令
ip link show
然后过滤其输出以获取接口列表。
您也可以使用,ifconfig -a
但某些发行版的较新版本不再默认安装它。
同样也netstat -i
可能有用。
您可以使用该iwconfig
命令来确定接口是否是无线的
iwconfig ens160
ens160 no wireless extensions.