単一のコマンドを使用してネットワークカードの速度を見つける

単一のコマンドを使用してネットワークカードの速度を見つける

サーバーの基本インターフェイスのネットワークカード速度をキャプチャする1行のコマンドを知っていますか?

例えば、eth0

  • 以下を使用してホスト名を取得します。uname -n
  • 以下を使用してIPを取得します。nslookup `uname -n`
  • IP を検索して、ifconfigどのインターフェイスに設定されているかを確認します。
  • 使用ethtool <interface captured in above command> | grep -i speed

上記のすべてのコマンドを単一のコマンドで実行できますか?

ベストアンサー1

努力する:

cat /sys/class/net/eth0/speed

基本インターフェイスが何を意味するのか分かりません。 IPv4スタックを持つホストでは、最初のデフォルトパスを持つインターフェイスを取得できます。

ip route show 0/0 | grep -Pom1 'dev +\K[^ ]+'

(GNU仮定grep)。だから:

cat "/sys/class/net/$(ip route show 0/0 | grep -Pom1 'dev +\K[^ ]+')/speed"

すべてのIPv4接続ホストにデフォルトパスがあるわけではありません。 8.8.8.8などの既知のインターネットインタフェースなどのインタフェースを介して特定のホストにアクセスすることを好む場合もあります。あるいは、これらのコマンドを実行すると、ssh接続が開始されるIPアドレスが表示されますssh(IPv4を介して接続すると仮定)。 IPv6 以外):

ip route show to match "${SSH_CLIENT%% *}" | grep -Pom1 'dev +\K[^ ]+'

もちろん、インターフェイスがイーサネットインターフェイスではない場合(通常たとえば、サーバーのインターフェース)。

別のヒューリスティックでは、次の仮想ではないインターフェイスの名前を取得できます。スピードそして、最大パケット数は以下のように送信されます。

readlink -f /sys/class/net/* | awk -F / '
   $4 != "virtual" && \
     getline speed < ($0 "/speed") && \
     getline state < ($0 "/operstate") && \
     state == "up" && \
     getline tx < ($0 "/statistics/tx_packets") {
       if (tx > max) {returned_speed=speed; max=tx}
     }
   END{print returned_speed}'

最後に、単一のコマンドを必要とするあなたのコメントについては、以下をsh参照してください。sshシェル。したがって、リモートシステムで実行されるコードはシェルコードです。ここでは、複数のコマンドと複数行のスクリプトを実行できます。ただし、コードはリモートユーザーのログインシェルによって解釈されるため、Bourneに似ているという保証はありません(最近、Linuxベースのシステムではしばしば発生します)。だからあなたはこれを行うことができます:

remote_code=$(cat << \end_of_script
  readlink -f /sys/class/net/* | awk -F / '
     $4 != "virtual" && \
       getline speed < ($0 "/speed") && \
       getline state < ($0 "/operstate") && \
       state == "up" && \
       getline tx < ($0 "/statistics/tx_packets") {
         if (tx > max) {returned_speed=speed; max=tx}
       }
     END{print returned_speed}'
end_of_script
)

for host in host1 host2 host3; do
  speed=$(ssh "$host" "$remote_code")
  printf '%20s: %s\n' "$host" "$speed"
done

rc上記のRemote_code構文はBourneとその系列シェルと互換性がfishありますが(t)csh

おすすめ記事