如何dynamic查找连接到系统的接口的名称和types

我有一个用例,我需要dynamicconfiguration一些文件,其中包括系统中存在的接口的名称eth0wlan0 。 但是,当我改变系统有时它改为eth1wlan1 。 从Ubuntu 14.04开始,以太网接口被命名为p2p1p1p1而无线接口则被命名为wlan0wlan1

所以我们可以说接口的名字可以是任何东西,只要我们可以find什么名字给了什么样的接口就无所谓了。

我为此写了一个小脚本,但是我不知道是否有更好的方法来find这个适用于所有基于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决定接口types。 该脚本假定只有1-1接口用于以太网和无线。

我怀疑wireless目录总是存在于所有的无线接口中。 例如在虚拟无线接口的情况下。

今天,对于一个相对现代化的Linux发行版,我最初会尝试使用ip命令

 ip link show 

然后过滤输出以获取接口列表。

你也可以使用ifconfig -a但是一些发行版的更新版本不再默认安装。

同样, netstat -i可能会有用。

您可以使用iwconfig命令来确定接口是否是无线的

 iwconfig ens160 ens160 no wireless extensions.