Arch linux obter nomes de interfaces de rede

1

Eu preciso obter todos os nomes de inteface no Arch Linux. Se eu emitir o comando ifconfig, obtenho a seguinte resposta:

[root@pi ~]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.154  netmask 255.255.255.0  broadcast 192.168.0.255
        ether b8:27:eb:3c:03:fe  txqueuelen 1000  (Ethernet)
        RX packets 119099  bytes 96958556 (92.4 MiB)
        RX errors 0  dropped 8  overruns 0  frame 0
        TX packets 18304  bytes 5456443 (5.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 0  (Local Loopback)
        RX packets 285  bytes 88221 (86.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 285  bytes 88221 (86.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Isso é tudo ok, mas eu só preciso de nomes de interface. Como obtenho apenas nomes de interface?

    
por KernelPanic 10.12.2014 / 15:10

2 respostas

5

Uma maneira seria usar ifconfig com -s (lista curta) e cortar a parte que você precisa:

$ ifconfig -a -s
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0  1374267176      0 116420 0      2848281091      0      0      0 BMRU
lo        65536 0  761767047      0      0 0      761767047      0      0      0 LRU
vboxnet0   1500 0         0      0      0 0             0      0      0      0 BM
virbr0     1500 0         0      0      0 0             0      0      0      0 BMU
$ ifconfig -s -a | awk '$1 !~ /Iface/ {print $1}'
eth0
lo
vboxnet0
virbr0

Ou um método semelhante com ip :

$ ip -o link show | awk -F': ' '{print $2}'
lo
eth0
virbr0
vboxnet0
    
por 10.12.2014 / 15:25
4

Você pode analisar a saída de ifconfig . Isso funciona em muitas variantes unix.

ifconfig -a | sed -n 's/^\([[:alnum:]]*\):.*//p'

Se você não se importa em ser estritamente somente Linux, você pode usar o comando mais simples

ls /sys/class/net/

Se você não quiser listar interfaces que estão inativas, use ifconfig em vez de ifconfig -a . Com /sys , é mais obscuro: você precisa verificar se o IFF_UP está definido para esta interface. Como IFF_UP é o bit de menor ordem, você precisa testar se flags é um número ímpar.

grep -l '[13579bdf]$' /sys/class/net/*/flags | sed 's!.*/!!'
    
por 11.12.2014 / 00:27