〜20個のリモートサーバー(各サーバーに2〜6個のNIC)から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アドレスがバインドされているインターフェイスにのみ適用されます。