ssコマンドはソケットの情報を表示するコマンドです。今まではnetstatコマンドが使われていたが、netstatコマンドが使えない環境も多くなっているので、ssコマンドも使えるようになった方が良いでしょう。
主なオプション
オプション | 概要 |
---|---|
-x | UNIXドメインソケットを表示 |
-4 | IPv4のソケットだけを表示 |
-6 | IPv6のソケットだけを表示 |
-t | TCPソケットを表示 |
-u | UDPソケットを表示 |
-a | 接続待ち状態(LISTEN)のソケットと接続待ち状態ではないソケットの両方を表示 |
-l | 接続待ち状態(LISTEN)のソケットだけを表示 |
state フィルタ名 | 指定した状態のソケットを表示する |
-n | 名前解決を行わない |
-e | ソケットの詳細情報を表示 |
-p | ソケットを使用しているプロセスも表示 |
-i | 内部のTCP情報も表示 |
-s | 統計の概要を表示する |
コマンド例
ソケットの種類を指定する
指定したソケットの種類だけに表示を制限する方法を見て見ましょう。
IPv4またはIPv6のソケットの情報だけを表示するには次のように実行します。
# ss -4 # ss -6
TCPまたはUDPのソケットの情報だけを表示するするには次のように実行します。
# ss -t # ss -u
ソケットの状態を指定する
ソケットには接続待ち(LISTEN)や接続中(ESTAB)といった状態があります(TCPの場合)。次のように実行すると特定の状態を表示することができます。
# ss # ss -l # ss -a
ssコマンドを引数なしで実行すると、「接続中(ESTAB)」または「終了処理中(CLOSE-WAIT、FIN-WAIT-2など)」のソケットを表示します。
「-l」オプションを指定すると、「接続待ち(LISTEN)」のソケットだけを表示します。
「-a」オプションを指定すると、接続待ちを含め全ての状態のソケットを表示します。
またstateを使うと、指定した状態のソケットだけ表示することもできます。
# ss -t state established
TCPの状態で指定できるものには以下のものがあります。
established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait, closed, close-wait, last-ack, listening, closing
その他に指定できるものについてはドキュメントを参照ください。
ポート番号の名前解決を行わない
デフォルトでポート番号は名前解決されて(サービス名で)表示される。これがわかりづらいときは名前解決を行わないで、ポート番号を表示するには「-n」オプションを使います。
# ss -n
オプションを組み合わせて使う
通常は、確認したい情報を絞り込むために、今までのオプションを組み合わせて使います。
# ss -tl # ss -4tan
最初の例はTCPの接続待ち状態のソケットを表示します。次の例はIPv4のTCPソケット全てを表示します(そして名前解決は行わない)。
そのほかの情報を表示
# ss -e # ss -p # ss -i
これらのオプションは、さらにいくつかの情報を確認するために使います。
ssコマンドの表示結果の見方
ssコマンドを実行すると「State」、「Recv-Q」、「Send-Q」、「Local Address:Port」、「Peer Address:Port」、「Process」の情報が表示されます。
# ss -tn | head State Recv-Q Send-Q Local Address:Port Peer Address:Port Process ESTAB 0 0 127.0.0.1:45856 127.0.0.1:6640 ESTAB 0 0 10.0.2.15:43934 10.0.2.15:5672 ESTAB 0 0 10.0.2.15:6642 10.0.2.15:42370 ESTAB 0 0 10.0.2.15:43760 10.0.2.15:5672 ESTAB 0 0 10.0.2.15:3306 10.0.2.15:53368 ESTAB 0 0 10.0.2.15:58830 10.0.2.15:3306 ESTAB 0 0 10.0.2.15:58836 10.0.2.15:3306 ESTAB 0 0 10.0.2.15:3306 10.0.2.15:58836 ESTAB 8 0 10.0.2.15:33930 10.0.2.15:5672
それぞれの意味は次の通りです。
State
ソケットの状態を表します。ESTAB(接続中)、LISTEN(接続待ち)などの状態を示します。
Recv-QとSend-Q
Recv-QとSend-Qの意味はソケットの状態で意味が変わります。
LISTEN状態の場合、Recv-Qは送信したSYN(でそれに対するACKを受信できていない)の数、Send-Qは最大値です。
ESTAB状態の場合、Send-Qは送信パケットのうち、ACKを受信していないパケットの総byte数、Recv-Qは受信パケットでACKを返していないパケットの総byte数です。
Local Address:PortとPeer Address:Port
「Local Address:Port」と「Peer Address:Port」は、それぞれローカル側とリモート側のソケットの「IPアドレス」と「ポート番号」です。
# ss -ltn ... LISTEN 0 128 0.0.0.0:22 0.0.0.0:* ... LISTEN 0 128 *:80 *:* ... LISTEN 0 128 [::]:22 [::]:*
「0.0.0.0」、「[::]」、「*」は任意のIPアドレスの接続を受け付けるという意味です。「0.0.0.0」はIPv4の任意のIPアドレスを受け付ける、「[::]」はIPv6の任意のIPアドレスを受け付ける、「*」はIPv4とIPv6の任意のIPアドレスを受け付けるという意味です。詳細は調べていませんが、ソケットの作成の仕方が違うんでしょうかね。。。
Process
Processの情報は通常表示されませんが、「-p」を指定するとProcessの状態も確認できます。