Como posso detectar se uma NIC é UP no UNIX?

1

No momento, estou escrevendo um script bash (para o Nagios) e gostaria de poder detectar se placas de rede específicas estão ativas ou não.

Meu melhor palpite é fazer algo assim:

ifconfig eth0 | grep UP | wc -l

ou:

 ethtool eth0 | grep "Link detected: yes" | wc -l

As duas maneiras confiáveis de teste são / se a placa de rede está ativa ou existe uma opção melhor? Talvez haja um sinalizador em ethtool , que fará exatamente o que eu quero?

    
por Rich 17.09.2010 / 14:11

4 respostas

1

Acho que esta é talvez a melhor maneira de fazer isso. Você pode querer fazer um processamento mais específico no cartão, como o grep que você sugeriu com "Link detected: yes". Certifique-se de que você escape de caracteres especiais, como os dois pontos, para garantir que ele seja encontrado corretamente. Também você pode grep em seu segmento de endereço IP, como "192.168.25". para um endereço IP interno de classe C. Isso seria baseado em sua rede interna, seja ela qual for. Mas acho que essa é definitivamente a melhor maneira de fazer isso.

Também pode haver algumas maneiras de detectar uma alteração e disparar algum evento.

    
por 17.09.2010 / 14:19
2

Verifique se a interface está ativa:

ip link show eth0 | grep -qs "[<,]UP[,>]"

Verifique se há algum endereço IPv4 atribuído:

ip -4 addr show eth0 | grep -Eqs "^\s"

Em geral, grep | wc -l deve ser substituído por grep -c se você quiser a contagem de correspondências.

Ou grep -qs se você quiser apenas "correspondência / não correspondência" com base no código de saída: if stuff | grep -qs stuff; then ... fi

    
por 17.09.2010 / 17:20
1

O comando show do iproute-3.14.0-2 tem essa opção:

up - only display running interfaces.

Portanto, se você executar ip link show eth0 up e a interface estiver inativa, a saída estará vazia.

Para verificar isso, consulte a pergunta "teste se um comando retorna uma string ou nada no bash" do Stack Overflow. Basicamente, algo assim deveria fazer o truque:

test -n "'ip link show eth0 up'"

Ele sai com um status 0 se a eth0 estiver ativa.

    
por 25.05.2014 / 03:29
0

Acho que link detected… não é suficiente. Você também deve grep para o inet addr porque mesmo que um link possa detectar a partir do switch, o NIC pode não ter um endereço IP válido.

    
por 14.02.2011 / 18:31