20台までのリモートサーバー上のNIC(すべてのサーバーで2〜6枚のNIC)を識別しようとしています。まず、すぐに使えるものと無料のものを特定したいと思います。物理メディアの状態を確認するにはどうすればよいですか? ifconfig|grep RUNNING
、ethtool
、cat /sys/class/net/eth0/carrier
など、いくつかの方法は知っていますが、インターフェースが稼働している必要があります。すべてのインターフェースをアップしたくありません。理由は不明ですが、ネットワーク内で有効にしたいが設定されていないインターフェースを使用したくありません。これを回避する方法はありますか?
それとも私は間違っているのでしょうか?接続されていても?
ip link show
は、デフォルトですべてのインターフェースを表示します。実行中のインターフェースのみを表示するには、ip link show up
を使用します。フィルターを使用して違いを取得できます。
realtimeの接続の状態に基づいてデフォルトルートを更新するスクリプトを次に示します。 (バックグラウンドで実行)は複数のインターフェースで動作します。/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
ip link showは、ケーブルが接続されていることを示すフラグ「LOWER_UP」を表示します。/sys/class/net/eth */operstateまたはCarrierを確認することもできます。ただし、これらはすべて、IPアドレスがバインドされているインターフェースに対してのみ機能します。