Lista apenas os nomes dos dispositivos de todas as interfaces de rede disponíveis

18

Eu quero obter uma lista de todos os nomes de dispositivos de rede disponíveis no meu servidor Linux. Eu percebi que

ifconfig

faria o trabalho, no entanto ifconfig produz bastante saída:

eth0      Link encap:Ethernet  Hardware Adresse 08:00:27:fc:5c:98  
          inet Adresse:192.168.2.222  Bcast:192.168.2.255  Maske:255.255.255.0
          inet6-Adresse: fe80::a00:27ff:fefc:5c98/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:329 errors:0 dropped:0 overruns:0 frame:0
          TX packets:177 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000 
          RX bytes:41496 (40.5 KiB)  TX bytes:32503 (31.7 KiB)

eth1      Link encap:Ethernet  Hardware Adresse 08:00:27:e9:35:7d  
          [...]

eth2      Link encap:Ethernet  Hardware Adresse 08:00:27:ff:db:fe  
          [...]

lo        Link encap:Lokale Schleife  
          [...]

O que eu quero alcançar é uma lista como

eth0
eth1
eth2
lo

ou melhor ainda

eth0
eth1
eth2

Suponho que isso pode ser feito por uma combinação de "cat", "sed" e "grep", mas simplesmente não tenho idéia de como remover as informações desnecessárias.

    
por ftiaronsem 25.10.2010 / 22:41

14 respostas

16

Experimente:

ifconfig -a | sed 's/[ \t].*//;/^$/d'

Isso omitirá lo :

ifconfig -a | sed 's/[ \t].*//;/^\(lo\|\)$/d'
    
por 26.10.2010 / 04:57
18

Outra alternativa seria:

ip -o link show | awk -F': ' '{print $2}'

Ou talvez:

ls /sys/class/net
    
por 15.05.2014 / 00:07
13

Basta usar / sys / class / net e remover o caminho:

$ basename -a /sys/class/net/*
eth0
eth1
lo
ppp0
tun0
    
por 31.01.2017 / 13:30
5

Tente isto:

ifconfig | cut -c 1-8 | sort | uniq -u
  • cut -c 1-8 extrai os primeiros 8 caracteres de cada linha
  • sort classifica as linhas
  • uniq -u imprime somente linhas exclusivas que removerão as linhas em branco das linhas de descrição que possuem apenas espaços em seus primeiros oito caracteres

Isso funciona em duas máquinas linux que eu tentei, mas no meu MacBookPro (OS X 10.6.4), ifconfig usa guias em vez de espaços, então é um pouco mais complicado:

ifconfig | expand | cut -c1-8 | sort | uniq -u | awk -F: '{print $1;}'
  • expand converte guias em espaços
  • awk -F: '{print $1;}' imprime o primeiro campo antes de dois pontos.
por 26.10.2010 / 18:15
3

Usando /sys filesystem:

basename -a $(ls /sys/devices/**/net/* -d)

Usando ip e Perl:

ip -o l|perl -lane'$F[1]=~s/://g;print $F[1]'
    
por 21.11.2013 / 16:36
2
ls /sys/class/net/
eth0  eth1  eth2  lo

ou se você precisar apenas de eth *

ls /sys/class/net/ | grep ^eth
eth0
eth1
eth2
    
por 05.10.2014 / 11:13
1

Aqui está uma maneira de extrair os nomes das interfaces da ifconfig output:

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

Se você quiser excluir determinados nomes, uma maneira é filtrar ainda mais com grep :

ifconfig -a | sed -n 's/^\([^ ]\+\).*//p' | grep -Fvx -e lo

Se você quiser excluir mais nomes, adicione mais -e foo ao comando grep .

    
por 25.10.2010 / 22:58
1

para imprimir apenas a primeira coluna:

netstat -a | awk '{print $1}'

você pode incorporar outras regras no awk para adicionar ou remover entradas, conforme necessário.

EDIT: o mesmo acontece com o ifconfig (como o Doug apontou)

ifconfig | awk '{print $1}'

Este é um exemplo excluindo a interface 'lo'

ifconfig | awk '{if ($1 != lo) print $1}'
    
por 25.10.2010 / 22:45
1
/usr/sbin/ip addr show | awk '/^[1-9]/ {print $2}'

fornece

lo:
eth0:
eth1:
eth2:

como saída

    
por 12.07.2017 / 08:42
1

Mesmo que exista uma solução aceita, gostaria de apresentar minha solução para isso.

Eu tenho um monte de interfaces virtuais e gostaria de obter uma lista, utilizável em vários scripts bash.

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.137  netmask 255.255.255.192  broadcast 11.22.33.191
        inet6 fe80::a00:27ff:fe8c:6bd3  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)
        RX packets 2969136  bytes 2394432908 (2.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1378821  bytes 358960701 (342.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.189  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

eth0:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.190  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

eth0:3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.180  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 673768  bytes 277972236 (265.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 673768  bytes 277972236 (265.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Não estou interessado em loopback, pois sei que está lá:)

Este one-liner faz o trabalho:

ifconfig | egrep '^eth' | cut -f 1-2 -d ':' | cut -f 1 -d ' '| pcregrep -o1 "(((eth\d)(:\d))|(eth\d))"

Produz uma saída como:

eth0
eth0:1
eth0:2
eth0:3

Aproveite.

    
por 02.11.2017 / 10:44
1

Toda a solução acima funciona bem. Ainda assim você pode tentar isso

ifconfig | grep HW | cut -c 1-6

Como lo , que é loopback, não tem um endereço HW, ele não será exibido.

Saída -

root@glum:/home/amit# ifconfig | grep HW | cut -c 1-6
enp7s0
vmnet1
vmnet8
wlp6s0
    
por 12.11.2017 / 10:39
1

A solução mais fácil está no homem ifconfig (8)

man ifconfig (8) extrai o link :

The -l flag may be used to list all available interfaces on the system, with no other additional information. Use of this flag is mutually exclusive with all other flags and commands, except for -d (only list interfaces that are down) and -u (only list interfaces that are up).

Então, para ter a lista, use:

ifconfig -l

Os nomes serão separados por um espaço, então você tem que usar sed para substituir esses espaços por um \ n:

ifconfig -l | sed 's/ / /g'

    
por 17.07.2018 / 11:10
0

Nenhuma das soluções acima funcionou para mim, eis a minha solução:

ifconfig -a  | egrep "^[a-z]+" | sed "s/: .*//" | grep -v "lo"
  1. Listar todas as interfaces disponíveis
  2. Extraia apenas as linhas que contêm nomes de dispositivos (sem espaço no início)
  3. Remover a parte final não relacionada após o primeiro espaço
  4. Excluir lo interface

Saídas:

eth0
eth0:1
wlan0
    
por 20.04.2018 / 15:24
-1

ifconfig | grep flags | awk -F: '{print $1;}'

    
por 14.05.2014 / 23:34