Existe uma maneira de percorrer todos os tipos disponíveis e mostrar todas as interfaces por tipo (usando ip link show type <type> ). A partir disso, é possível coletar as interfaces para todos os tipos e depois analisar a interface que se deseja conhecer. Não é elegante, mas funciona:
Usando o bash:
#!/bin/bash
# Arguments: $1: Interface ('grep'-regexp).
# Static list of types (from 'ip link help'):
TYPES=(bond bond_slave bridge dummy gre gretap ifb ip6gre ip6gretap ip6tnl ipip ipoib ipvlan macvlan macvtap nlmon sit vcan veth vlan vti vxlan)
iface="$1"
for type in "${TYPES[@]}"; do
ip link show type "${type}" | grep -E '^[0-9]+:' | cut -d ':' -f 2 | sed 's|^[[:space:]]*||' | while read _if; do
echo "${_if}:${type}"
done | grep "^${iface}"
done
Salve isso em um arquivo, torne-o executável e execute-o com sua interface que você deseja conhecer como argumento.
Para o exemplo de dum0.200 beeing do tipo vlan sobre o link eth0 (criado com ip link add link eth0 name dum0.200 type vlan protocol 802.1Q id 200 ), a saída seria dum0.200@eth0:vlan , indicando que é do tipo vlan . Observe que o @eth0 vem de ip link show e pode ser analisado se alguém desejar.
Como o argumento para este script é interpretado como grep -regexp, especificando nada lista tudo o que ip link show type <type> produz, ou especificando apenas um prefixo lista alguns, etc.