Quero obter uma lista de todos os nomes de dispositivos de rede disponíveis no meu servidor Linux. Eu percebi isso
ifconfig
faria o trabalho, no entanto, o ifconfig produz bastante resultado:
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 possa ser feito por uma combinação de "gato", "sed" e "grep", mas simplesmente não tenho idéia de como remover as informações desnecessárias.
*nix
utilitários diferentes , mas é lamentável que essa solução não funcione em um Mac :( #ifconfig
está obsoleto, use emip
vez dissoifconfig -a | sed -E 's/[[:space:]:].*//;/^$/d'
Outra alternativa seria:
Ou talvez:
fonte
ls /sys/class/net
é uma solução melhor nos/etc/local.d
scripts emopenrc
- assed
soluções acima acabam com um extra:
no final de cada interface quando executadas/etc/init.d/local
(mas não quando o script é executado diretamente).-o
- não sabia disso #Basta usar / sys / class / net e remover o caminho:
fonte
Tente o seguinte:
cut -c 1-8
extrai os 8 primeiros caracteres de cada linhasort
classifica as linhasuniq -u
imprime apenas linhas únicas que removerão as linhas em branco das linhas de descrição que possuem apenas espaços nos oito primeiros caracteresIsso funciona em duas máquinas Linux que eu tentei, mas no meu MacBookPro (OS X 10.6.4),
ifconfig
use guias em vez de espaços, por isso é um pouco mais complicado:expand
converte guias em espaçosawk -F: '{print $1;}'
imprime o primeiro campo antes de dois pontos.fonte
| grep -v lo
:-)ou se você precisar apenas de eth *
fonte
Usando
/sys
sistema de arquivos:Usando ip e Perl:
fonte
Aqui está uma maneira de extrair os nomes de interface da
ifconfig
saída:Se você deseja excluir determinados nomes, uma maneira é filtrar ainda mais com
grep
:Se você deseja excluir mais nomes, adicione mais
-e foo
aogrep
comandofonte
para imprimir apenas a primeira coluna:
você pode incorporar outras regras no awk para adicionar ou remover entradas, conforme necessário.
EDIT: o mesmo acontece com ifconfig (como Doug apontou)
Este é um exemplo excluindo a interface 'lo'
fonte
awk
irá ignorar o espaço em branco à esquerda e imprimir a primeira palavra em cada linha subseqüente.fornece
como saída
fonte
Embora exista uma solução aceita, gostaria de apresentar minha solução a isso.
Eu tenho várias interfaces virtuais e gostaria de obter uma lista, utilizável em vários scripts bash.
Não estou interessado em loopback, pois sei que está lá :)
Este one-liner faz o trabalho:
Produz uma saída como:
Desfrutar.
fonte
Toda a solução acima funciona bem. Ainda assim, você pode tentar isso
Como o
lo
loopback não está atribuído a um endereço HW, ele não será exibido.Resultado -
fonte
A solução mais fácil está no man ifconfig (8)
man ifconfig (8) extract http://www.manpagez.com/man/8/ifconfig/ :
Portanto, para ter a lista, use:
ifconfig -l
Os nomes serão separados por um espaço, então você precisará usar sed para substituir esses espaços por \ n:
ifconfig -l | sed 's/ / /g'
fonte
Melhorado:
fonte
grep -v '^lo$'
; seu comando atual excluirá o (exemplo hipotético)logical
e asridiculous
interfaces.Nenhuma das soluções acima funcionou para mim, aqui está a minha solução:
lo
interfaceSaídas:
fonte
"ifcongif -l" deve fazer o trabalho. sua saída é assim "lo0 gif0 stf0 en0 ..." sem nova linha.
Encontrei-o em algum site, mas não consigo mais encontrá-lo. e ainda estou procurando o significado dessa bandeira "-l".
fonte
Às vezes, o nettools não está instalado por padrão. Então, eu gosto de usar comandos internos que têm mais garantia de serem encontrados em / bin, / usr / bin e / usr / sbin sem precisar se preocupar com pacotes pós-instalados.
endereço IP: mostre / manipule roteamento, dispositivos, roteamento de política e túneis (endereço)
grep: encontre um espaço e depois qualquer coisa depois de unitl:
cut: use (:) como delimitador e obtenha o campo 2
tr: exclua todos os espaços
fonte
Testado no macOS, o seguinte funcionou. Eu precisava encontrar todas as interfaces que estavam UP. Isso se baseia na resposta de Dennis Williamson acima.
ifconfig -a | grep UP | sed 's/:.*//;/^$/d'
fonte
ifconfig | grep flags | awk -F: '{print $1;}'
fonte