如何在UNIX中检测NIC是否已启动?


1

我目前正在编写一个bash脚本(对于Nagios),我希望能够检测特定的网卡是否已启动。

我最好的猜测是做这样的事情:

ifconfig eth0 | grep UP | wc -l

要么:

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

如果网卡正常运行,或者是否有更好的选择,是这两种可靠的测试方式吗?也许有一面旗帜ethtool可以正是我想要的?

Answers:


1

我认为这可能是最好的方法。您可能希望在卡上执行一些更具体的处理,例如您使用“检测到链接:是”建议的grep。确保你转义特殊字符,如冒号,以确保找到它。您也可以在其IP地址段上进行grep,例如“192.168.25”。用于C类内部IP地址。这将基于您的内部网络,无论它是什么。但我认为这绝对是最好的方法。

可能还有一些方法可以实际检测到更改,并触发某些事件。


2
网络不再使用课程和冒号不需要逃脱
丹尼斯威廉姆森2010年

你在哪里写“为一个C类内部IP地址”因为他们不再使用类,这应该读取/ 24内部IP地址。
barlop 2014年

2

检查接口是否已启动:

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

检查是否分配了任何IPv4地址:

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

一般来说,如果你想要匹配计数,grep | wc -l应该替换grep -c

或者,grep -qs如果您只想根据退出代码“匹配/不匹配”:if stuff | grep -qs stuff; then ... fi


1

showiproute-3.14.0-2 的命令有这个选项:

up - 仅显示运行接口。

因此,如果您运行ip link show eth0 up并且接口已关闭,则输出将为空。

要检查它,请参阅Stack Overflow中的“测试命令是否在bash中返回字符串”。基本上这样的事情应该可以解决这个问题:

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

如果eth0已启动,则退出状态为0。


0

我认为link detected…还不够。您还应该grep for the inet addr因为即使链接可以从交换机检测到,NIC也可能没有有效的IP地址。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.