Como verificar o status físico de uma porta Ethernet no Linux?

64

Quero verificar se um ethX especificado está fisicamente ativo ou inativo. Como faço isso com a linha de comando?

Jader Dias
fonte

Respostas:

68

$ ethtool <eth?>

Por exemplo:

$ ethtool eth0

fornece:

Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: on
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000001 (1)
        Link detected: yes
Destroyica
fonte
46

Verifique /sys/class/net/eth0/operstatee outros arquivos neste diretório.

Até onde eu sei, isso é específico do Linux 2.6+, mas fornece uma interface limpa para o driver do kernel.

A documentação completa para esta parte do syssistema de arquivos pode ser encontrada aqui:

https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-net

Linuxtraveler
fonte
10
/ sys / class / net / eth0 / carrier foi a resposta perfeita para esta pergunta para mim.
precisa saber é o seguinte
Ótima resposta. Um pequeno adendo: / run / network / ifstate também possui algumas informações úteis.
Paulo André Haacke
34

ethtool [interface]

última linha mostra o que você deseja:

# ethtool eth0
Configurações para eth0:
        Portas suportadas: [TP]
        Modos de link suportados: 10baseT / Half 10baseT / Full 
                                100baseT / Half 100baseT / Full 
                                1000baseT / Full 
        Suporta negociação automática: Sim
        Modos de link anunciado: 10baseT / Half 10baseT / Full 
                                100baseT / Half 100baseT / Full 
                                1000baseT / Full 
        Negociação automática anunciada: Sim
        Velocidade: 1000Mb / s
        Duplex: Completo
        Porta: Par Trançado
        PHYAD: 0
        Transceptor: interno
        Negociação automática: ativada
        Suporta Wake-on: g
        Despertar: d
        Nível de mensagem atual: 0x00000037 (55)
        Link detectado: sim
Kurt
fonte
4
Se você verificar isso: en.wikipedia.org/wiki/OSI_model . Você verá que a última linha é sobre outra camada: a camada de link. Acabei de testar isso. Com um cabo defeituoso, a camada física estava ativa, mas não a camada de link. Depois mudei para outro cabo e todas as camadas apareceram.
Jader Dias
25
ip link show

é outro. Bom velho

ifconfig dev_name

ou

ifconfig -a

também informará se a interface está ativa. NOTA: Tenha cuidado com esses métodos, pois eles podem mostrar informações desatualizadas sobre o estado do link.

goo
fonte
Eu acho que essa foi a melhor resposta - o ettool não é padrão na minha distribuição do Ubuntu, por isso não ajuda se estiver em uma caixa não conectada à rede.
usar o seguinte comando
4
Acredito que o ifconfig às vezes mostre dados desatualizados. Pode aparecer UP quando o link estiver inativo, mas a interface ethtool sempre mostrará as informações corretas do AFAIK.
sed_and_done
2
Eu acho que @sed_and_done está certo. Em uma VM da Red Hat, se eu desconectar a NIC, o ethtool é exibido imediatamente em Link detected: novez de Link detected: yes, e o link ip mostra em <NO-CARRIER,BROADCAST,MULTICAST,UP>vez de <BROADCAST,MULTICAST,UP,LOWER_UP>, mas ifconfig -a mostra UP BROADCAST MULTICAST MTU:1500 Metric:1, que é o mesmo que quando a NIC está conectada.
Adi Inbar
16
dmesg | grep eth

você deve ver todas as alterações de status

lepole
fonte
Este é o único que funciona se não houver privilégios de administrador.
Brian B
O dmesg requer root no Slackware 14.0
AnonymousLurker
Não, não faz. Acabei de verificar - enquanto ele funciona para mim no eth0dispositivo, mas não no eth2dispositivo.
Hi-Angel
9

Você também pode usar o mii-tool para verificar se o link está ativo e verificar a velocidade negociada.

# mii-tool
eth0: 100baseTx-FD negociado, link ok

Alakdae
fonte
4
O mii-tool está obsoleto e não funciona para interfaces GbE.
Dave Cheney
2
@DaveCheney# mii-tool eth0: negotiated 1000baseT-FD flow-control, link ok
stolsvik
A página de manual do mii-tool sugere o uso do ethtool. No entanto, o mii-tool continua fazendo seu trabalho, mais útil se for dada a opção -v (detalhada).
David Ramirez
3

Você pode ter detalhes completos com o comando abaixo

ethtool eth0

E se você quiser apenas ver o status do link, dê o comando abaixo

mii-tool eth0
Nikunj Ranpura
fonte
2

Se o seu sistema estiver usando ifplugd(por exemplo, em um Raspberry Pi com Raspbian), você poderá usar a ferramenta de status associada ifplugstatuspara obter o status do link de todas as interfaces:

ifplugstatus

ou uma interface específica (por exemplo, eth0):

ifplugstatus eth0
Pierz
fonte
2

O netplugd é um serviço que pode executar programas quando um cabo é conectado ou retirado. Portanto, a linha de comando seria grep / var / log / messages ou dmesg para a saída do netplugd.

rjt
fonte
Bem, não é exatamente a resposta solicitada, mas é interessante saber. Pelo menos para mim.
Sopalajo de Arrierez 28/10
2

Para adicionar rapidamente à resposta do @ goo , você deve interpretar o ip linkou da ip link show INTERFACEseguinte maneira.

Esta é uma porta que está administrativamente ativa, mas fisicamente inativa:

2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000

Em outras palavras, UPvocê pode ver indica que o sistema está configurado para tentar usar a NIC para rede. A NO-CARRIERseguir, informa qual é o problema que impede o funcionamento da rede.

Esta é uma porta que está administrativamente inativa (sua camada física é 'up', tecnicamente - é uma VM):

3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

Finalmente, esta porta está funcionando normalmente:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP mode DEFAULT group default qlen 1000

É administrativamente UP, LOWER_UPindica que a camada física está funcionando (ou seja, há uma operadora) e a segunda UPconfirma (com efeito) que a camada IP está ativa .

iwaseatenbyagrue
fonte