サーバーの基本インターフェイスのネットワークカード速度をキャプチャする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
。