Вы можете указать, какие интерфейсы являются виртуальными, с помощью
ls -l /sys/class/net/
, который дает вам этот вывод:
[root@centos7 ~]# ls -l /sys/class/net/
total 0
lrwxrwxrwx. 1 root root 0 Mar 20 08:58 ens33 ->../../devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/ens33
lrwxrwxrwx. 1 root root 0 Mar 20 08:58 lo ->../../devices/virtual/net/lo
lrwxrwxrwx. 1 root root 0 Mar 20 08:58 virbr0 ->../../devices/virtual/net/virbr0
lrwxrwxrwx. 1 root root 0 Mar 20 08:58 virbr0-nic ->../../devices/virtual/net/virbr0-nic
Оттуда вы можете grep фильтровать только не -виртуальные интерфейсы:
ls -l /sys/class/net/ | grep -v virtual
Другим вариантом является использование этого небольшого скрипта, адаптированного из этого ответа , который печатает имена всех интерфейсов, у которых нет MAC-адреса 00 :00 :00 :00 :00 :00 т.е. физический:
#!/bin/bash
for i in $(ip -o link show | awk -F': ' '{print $2}')
do
mac=$(ethtool -P $i)
[[ $mac != *"00:00:00:00:00:00"* ]] && echo "$i"
done