Como posso encontrar interfaces de rede disponíveis?

88

Isso é em relação ao linux, mas se alguém souber de um método geral * nix, isso seria bom.

Inicializei um sistema ontem com um cabo Ethernet conectado. "NetworkManager" não está instalado; portanto, uma vez iniciado, fui procurar o nome da interface Ethernet ifconfigpara iniciar um cliente DHCP manualmente, mas não mostrou nada além de lo.

A NIC foi listada via lspcie o driver do kernel apropriado foi carregado. O sistema normalmente usa wifi, e eu conseguia lembrar o nome da interface wlan0. Quando tentei ifconfig wlan0 up, wlan0apareceu. Mas os únicos nomes de interface Ethernet que eu conseguia lembrar eram eth[N]e em[N]- nenhum dos quais funcionava.

Este documento refere-se a "nomes de interface previsíveis", mas não explica bem o que eles podem ser em termos simples. Refere-se a um pedaço de código-fonte que implica que o nome nesse caso pode ser deduzido dos números de barramento e slot do PCI, o que parece ser um incômodo desnecessariamente complicado.

Outras pesquisas ao redor me levaram a acreditar que isso pode ser determinado systemdem conjunto com udev, mas há quase 100 arquivos /usr/lib/udev/rules.de uma hora tentando determinar onde (e se ) existe um arquivo de configuração systemd para isso também parece ridículo.

Também seria bom saber com certeza que eles estão disponíveis, não apenas como eles podem ser nomeados se eles estão, para que eu possa descartar problemas de hardware, etc. Não há uma maneira simples de encontrar os nomes de interfaces de rede disponíveis no linux?

Cachinhos Dourados
fonte
Na pergunta, você afirma que usou, ip linkmas aceita uma resposta que sugere o ip link showque faz exatamente a mesma coisa. Por quê?
Pavel Šimerda
@ PavelŠimerda Você está certo. Na verdade, eu poderia ter usado ip route- escrevi essa pergunta no dia seguinte após a solução do problema (veja minha própria resposta); Eu não tenho o hábito de usar ipe não aprecio as páginas de manual excessivamente espartanas, então provavelmente desisti dela depois de uma tentativa e comecei a passar /sys, pois sabia que o kmod estava carregado etc. e isso era mais direto para mim. Vou remover isso completamente da pergunta.
Goldilocks
As páginas de manual do iproute2 são muito boas hoje em dia, acho que você está usando uma versão mais antiga do pacote.
Pavel Šimerda

Respostas:

93

O método mais simples que conheço para listar todas as suas interfaces é

ifconfig -a

EDITAR

Se você estiver em um sistema em que isso se tornou obsoleto, você pode usar

ip link show
Elliott Frisch
fonte
3
Se eu tivesse olhado para a página de manual! Seja interessante saber se iphá um paralelo, pois supostamente o ifconfig está sendo "obsoleto" em favor desse (IMO) comando mais obtuso e menos amigável.
precisa
2
Primeira coisa no meu man ifconfig: "NOTA Este programa está obsoleto! Para substituição, verifique o ip ..." Isso pode ser específico para o linux. Espero que eles tenham que retê-lo para compatibilidade com versões anteriores.
GOLDILOCKS
4
O ifconfig foi descontinuado, TMK, portanto, devemos tentar mostrar exemplos usando ip. Veja o artigo da Wikipédia ifconfig: en.wikipedia.org/wiki/Ifconfig .
Slm
3
@slm Embora a questão seja (era) específica para o Linux, um exemplo usando ambos parece bom, pois os usuários do BSD podem ter o hábito de ver as páginas "linux" de qualquer maneira - na verdade, tirarei o Linux do título e editarei um bit (originalmente isso foi respondido automaticamente e eu não achei que houvesse um método portátil).
precisa
5
ifconfig descontinuado? vamos. Este comando existe há 30 anos.
22714 Michael Michael Martinez
72

O kernel os lista por nome /sys, ambos separadamente (por exemplo) na árvore de dispositivos PCI - embora encontrá-los lá se você não sabe por onde começar, não é simples - e juntos por meio de links simbólicos /sys/class/net. Por exemplo:

> ls /sys/class/net
em1 lo wlp6so

Outro exemplo:

> ls /sys/class/net
lo p6s1 wlan0

Se você não tiver certeza de qual é qual, basta colocar todas elas em:

ifconfig [name] up 

Ou:

ip link set [name] up

E então observe as pistas (razoavelmente claras) listadas por ifconfig(sem argumentos). O código-fonte systemd vinculado no documento Freedesktop.org também se refere a:

Two character prefixes based on the type of interface:
 *   en -- ethernet
 *   sl -- serial line IP (slip)
 *   wl -- wlan
 *   ww -- wwan

Embora em um dos casos acima ( p6s1) não haja prefixo.

Cachinhos Dourados
fonte
O prefixo que recebo para ethernet é eth. Eu acredito que ené para LAN sem fio.
precisa saber é o seguinte
4
@kaushalmodi ethé uma coisa do kernel do linux; O systemd implementa através dos nomes de interface previsíveis do udev Freedesktop.org - os do kernel não são previsíveis no mesmo sentido, que é a causa de toda a confusão. A citação acima é explicitamente cortada e colada a partir daqui . Há mais do que isso, já que não tenho nenhuma máquina systemd usando enpara ethernet; o mais próximo é que emoutros são completamente diferentes. Você pode ler o link do Freedesk.org na pergunta para obter mais explicações.
23815 goldilocks
4
[Mais tarde] Em algum momento do ano passado, o Fedora ou o systemd corrigiram isso? Minha Ethernet PCI é agora eno1.
8256
10

Eu sempre faço cat /proc/net/devé simples e fácil de memorizar

Mohammad Rafiee
fonte
4
mas que só dá interfaces ativas, nem todas as interfaces
Grant Bowman
4

ifconfig= Solaris
ipconfig= Windows
ip= Linux

Isso eu sei, mas certamente estou aberto a adições e correções.

Mick Myhera
fonte
2
Hã? O ifconfig também é Linux.
precisa saber é o seguinte
4
@ fpmurphy1 Leia o primeiro parágrafo (após a sinopse) de man ifconfigum sistema Linux.
Goldilocks