回答:
番号を取得するだけで、詳細が必要ない場合は、からデータを読み取ることができます/proc/net/sockstat{,6}
。接続の絶対数を取得するには、両方の値を組み合わせる必要があることに注意してください。
カーネル自体から情報を取得する場合は、カーネルから情報を取得するために使用NETLINK_INET_DIAG
することができます。 /proc
より速い方法ですか?そのようにすると、ほんの数秒で答えが得られます。実際、私のコンピューターでは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」が行数を数えるだけではあまり最適ではないと想定しています。私のテストでは、この仮定が正しいことが示されています。
1つ目は、tailコマンドが不要なデータの破棄に非常に優れているという前提で機能するため、追加のサブシェルの作成と環境変数の追加作業を補います。/ proc / net / tcpの行にすでに番号が付けられているという事実を活用して、行をカウントする必要をなくします。最後のソリューションでは、awkが十分にカウントされ、より大きなプログラムのロードと複数のプロセスの作成に起因する不利益を相殺することを前提としています。awkソリューションには、単純な1行のエイリアス定義にうまく適合するという追加の利点があります(スクリプトが呼び出されないため、追加のシェルプロセスが分岐せず、ミリ秒の利点が追加されるという追加の利点があります)。
/proc/net/tcp
。試してみることができますnetstat -n -t | wc -l
が、私の推測では、netstatからも読み取ります/proc/net/tcp
netstat -nt
約180.000の接続で1分以上かかるようになりました。私はそれがとても遅くする必要がありますない理由を見ない...(読み取りが/proc/net/tcp
非常に遅いもある)
awk
は、アプローチが非常に遅いことを示していwc
ます。tail
と同等のようwc
です。
ss -s
コマンドを使用して詳細な回答を取得します。
ss -s