我正在尝试识别 ~20 个远程服务器上的 NIC(每台服务器上有 2-6 个 NIC)。首先,我想确定那些可以使用的和免费的。如何检查物理介质的状态?我知道一些方法,包括ifconfig|grep RUNNING
,,,但ethtool
它们cat /sys/class/net/eth0/carrier
都要求接口打开。我不想调出所有接口。不知道为什么,但我不喜欢在网络中启用但未配置的接口。有什么办法可以避免这种情况吗?
或者我只是错了,所有接口都已启动(且未配置)并没有什么不好?即使它们已插入?
答案1
ip link show
,默认显示所有接口,使用ip link show up
时仅显示正在运行的接口。您可以使用过滤器来获得差异。
答案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
答案3
ip link show 显示标志“LOWER_UP”以指示电缆已插入。您还可以检查 /sys/class/net/eth*/operstate 或运营商。然而,所有这些仅适用于绑定了 IP 地址的接口。