У меня есть вариант использования, когда мне нужно динамически настраивать некоторые файлы, которые включают имя интерфейсов, присутствующих в системе, например eth0
, wlan0
. Однако, когда я меняю систему, иногда ее меняют на eth1
или wlan1
. Начиная с Ubuntu 14.04 интерфейсы Ethernet называются 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
. Сценарий предполагает, что для Ethernet и беспроводной сети присутствует только интерфейс 1-1.
Я сомневаюсь, что wireless
каталог всегда присутствует во всех беспроводных интерфейсах. Например, в случае виртуальных беспроводных интерфейсов.
Сегодня для относительно современного дистрибутива Linux я бы сначала попробовал использовать команду ip
ip link show
а затем отфильтруйте его вывод, чтобы получить список интерфейсов.
Вы также можете использовать ifconfig -a
но новые выпуски некоторых дистрибутивов больше не устанавливают это по умолчанию.
так же netstat -i
может быть полезно.
Вы можете использовать iwconfig
команда, чтобы определить, является ли интерфейс беспроводным или нет
iwconfig ens160
ens160 no wireless extensions.