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 há uma opção melhor? Talvez haja uma bandeira em ethtool que fará exatamente o que eu quero?

Rich
fonte

Respostas:

1

Eu acho que esta é talvez a melhor maneira de fazer isso. Você pode querer fazer algum 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 esta é definitivamente a melhor maneira de fazer isso.

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

jfmessier
fonte
2
As redes não usam mais classes e os dois-pontos não precisam ser ignorados
Dennis Williamson
onde você escreveu "para um endereço IP interno da classe C" Como eles não usam mais as classes, isso deve ler para um endereço IP interno / 24.
barlop
2

Verifique se a interface está ativa:

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

Verifique se tem 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 partidas.

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

grawity
fonte
1

o show comando de iproute-3.14.0-2 tem esta opção:

acima - exibir apenas interfaces em execução.

Então, se você correr ip link show eth0 up e a interface está inativa, a saída estará vazia.

Para verificar isso, veja a pergunta "teste se um comando retorna uma string ou nada em bash" do estouro de pilha. 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.

Cristian Ciupitu
fonte
0

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

dejo
fonte