システムの現在のTCP接続数を取得します。

システムの現在のTCP接続数を取得します。

これに加えてwc -l /proc/net/tcpより速い方法はありますか?

総 TCP 接続数が必要です。

答え1

詳細なしで番号のみを取得するには、からデータを読み取ることができます/proc/net/sockstat{,6}。絶対的な接続数を得るには、これら2つの値を組み合わせる必要があることに注意してください。

カーネル自体から情報を取得するには、 NETLINK_INET_DIAGカーネルから情報を読み取るのではなく、カーネルでGetInfoを使用できます。/proc

答え2

より速い方法?この方法では、答えを取得するのに1秒もかかりません。実際、私のコンピュータでは0.009秒しかかかりません!

タイピングがあまり必要ない方法をお探しですか?この場合は、次のエイリアスを設定します。

alias tcpcount="wc -l /proc/net/tcp"

これで、別名(例tcpcountで使用したものなど)を入力してこの番号を取得できます。

ログインするたびにエイリアスが定義されるように、.bashrcにこの行を入力または追加します。

次のコマンドは、接続数が多い場合は速く実行できます(または接続数が非常に少ない場合は少し遅くなる可能性があります)。

#!/bin/bash
/usr/bin/tail -1 /proc/net/tcp | (IFS=:
read COUNT DISCARD
echo $COUNT
)

または多分...

awk 'END {print NR}' /proc/net/tcp

どちらのソリューションも、「wc」が行数にのみ適していないと仮定します。私のテストでは、この仮定が正しいことがわかりました。

最初のコマンドは、tailコマンドが不要なデータを削除するのに本当にうまく機能するという前提で機能し、追加のサブシェルを作成し、環境変数を使用して追加の操作を実行するのを補完します。これは、/proc/net/tcpの行にすでに番号が付けられているという事実を利用して、行数を数える必要がないようにします。最終的な解決策は、awkが複数のプロセスを生成するよりも大きなプログラムをロードすることによって生じるすべての欠点を相殺するのに十分であると仮定します。 awkソリューションには、単純な1行エイリアス定義に適しているという追加の利点があります(これはスクリプトを呼び出す必要がないため、追加のシェルプロセスブランチがないため、追加のミリ秒の利点を提供するという追加の利点を提供します)。

答え3

ss -s詳細な回答を得るには、コマンドを使用してください。

関連情報