检查网线是否插入而未打开接口


9

我正在尝试识别约20个远程服务器上的NIC(每个服务器上2-6个NIC)。首先,我想确定那些可供使用的和免费的。如何检查物理媒体的状态?我知道一些方法,其中包括ifconfig|grep RUNNINGethtoolcat /sys/class/net/eth0/carrier,但他们所需要的接口了。我不想提出所有接口。不知道为什么,但是我不喜欢启用但尚未配置网络中的接口。有办法避免这种情况吗?

还是我只是错了,所有接口都已启动(未配置)没有什么不好呢?即使已插入?

Answers:


5

ip link show,默认情况下显示所有接口,用于ip link show up仅显示正在运行的接口。您可以使用过滤器来获取差异。


啊哈 丢失的电缆将显示为NO-CARRIER,对吗?
minaev 2011年

答对了。谢谢。而且ip addr show即使增加了IP地址的输出。
minaev 2011年

2
这在我的机器上不起作用(Debian压缩,skge驱动程序):仅ip link show显示“ DOWN”。ip报告的信息ifconfig/sys/class/net/在任何情况下都相同,不是吗?您是否从中获得链接状态信息,ip而不是/sys/class/netifconfig机器中获得链接状态信息?还是您获得有关/sys/class/net(我得到/sys/class/net/eth0/carrier: Invalid argument)处于关闭状态的接口的链接状态?
吉尔(Gilles)“所以,别再邪恶了”,

如果接口关闭,则无法使用。
Vladimir Kunschikov 2015年

@Nikhil Mulley你所说的过滤器是什么意思?

2

这是我的脚本,用于根据连接状态实时更新默认路由。(在后台运行)可用于多个接口,我在/tmp/${iface}.metric文件中定义优先级,“最佳”连接接口将用于路由默认流量。

#!/bin/sh

/sbin/ip monitor link | while read -r line
do
    iface=$(echo $line | sed -ne 's/[^ ]* \([^ ]*\): .* state \([^ ]*\).*/\1/p')
    state=$(echo $line | sed -ne 's/[^ ]* \([^ ]*\): .* state \([^ ]*\).*/\2/p')
    if [ "$iface" != "" ] ; then
        echo "$iface is $state"
        if [ -f /tmp/${iface}.metric ] ; then
                echo "updating default route for ${iface}"
                if [ "$state" = "DOWN" ] ; then
                        ip route del default dev "${iface}"
                else
                        ip route add default dev "${iface}" metric `cat /tmp/${iface}.metric`
                fi
        fi
    fi
done

0

ip link show显示标志“ LOWER_UP”以指示电缆已插入。您还可以检查/ sys / class / net / eth * / operstate或运营商。但是,所有这些仅适用于绑定了IP地址的接口。


1
有趣的信息,但并未真正回答原始帖子。
X天

即使我没有eth插件,它也会说“ up”。
kangear
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.