web-dev-qa-db-ja.com

インターフェイスを起動せずにネットワークケーブルが接続されているかどうかを確認する

20台までのリモートサーバー上のNIC(すべてのサーバーで2〜6枚のNIC)を識別しようとしています。まず、すぐに使えるものと無料のものを特定したいと思います。物理メディアの状態を確認するにはどうすればよいですか? ifconfig|grep RUNNINGethtoolcat /sys/class/net/eth0/carrierなど、いくつかの方法は知っていますが、インターフェースが稼働している必要があります。すべてのインターフェースをアップしたくありません。理由は不明ですが、ネットワーク内で有効にしたいが設定されていないインターフェースを使用したくありません。これを回避する方法はありますか?

それとも私は間違っているのでしょうか?接続されていても?

9
minaev

ip link showは、デフォルトですべてのインターフェースを表示します。実行中のインターフェースのみを表示するには、ip link show upを使用します。フィルターを使用して違いを取得できます。

5
Nikhil Mulley

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
2
user211708

ip link showは、ケーブルが接続されていることを示すフラグ「LOWER_UP」を表示します。/sys/class/net/eth */operstateまたはCarrierを確認することもできます。ただし、これらはすべて、IPアドレスがバインドされているインターフェースに対してのみ機能します。

0
julien