最終更新日 2025年2月1日

ssコマンドとは?基本概要と特徴
このセクションではSSコマンドの基本概要や特徴を解説します。
解説する内容は下記の4つです。

ネットワーク接続の詳細情報を取得可能
ss
(Socket Statisticsの略)コマンドは、Linuxでネットワークのソケット情報を表示するためのツールです。ネットワークの状態を調査する際に使用され、現在確立されている接続、リスニングしているポート、送受信キューの状態などを確認できます。
例えば、以下のような情報を取得できます。
- 現在開いているTCP/UDP接続
- 待ち受け中のポート(LISTEN状態)
- 接続中のリモートアドレスとポート番号
- ソケットの送受信キューサイズ
Linuxのサーバー管理やネットワークトラブルシューティングの際に非常に役立つコマンドです。
スポンサーリンク高速なデータ取得
ss
コマンドは、カーネルと直接通信するため、netstat
に比べて高速に情報を取得できます。特に大量の接続があるサーバー環境では、netstat
の出力に時間がかかることがある一方、ss
では瞬時に情報を表示できます。
例えば、大量のTCP接続を持つサーバーで netstat -an
を実行すると、処理が終わるまで数秒〜十数秒かかることがあります。しかし、同じ情報を ss -tan
で取得すると、一瞬で結果が表示されることがほとんどです。

詳細なフィルタリングが可能
ss
コマンドは、フィルタリング機能が非常に強力です。特定のポートやIPアドレス、接続状態を絞り込んで表示できるため、トラブルシューティングやセキュリティチェックに便利です。
- 特定のポート(80番)で待ち受けているプロセスを確認
ss -lnt '( sport = 80 )'
- 特定のIPアドレスとの接続を確認
ss -tan 'dst 192.168.1.100'
- 確立済み(ESTABLISHED)のTCP接続のみを表示
ss -tan state established
このように、ss
コマンドを活用すれば、必要な情報を効率的に取得でき、トラブルシューティングの時間を大幅に短縮できます。
次の章では、ssコマンドの具体的な使い方を解説します。

netstatとの違い
従来、Linuxでは netstat
コマンドが広く使用されていました。しかし、netstat
は procfs
から情報を取得するため、パフォーマンス面での課題がありました。一方、ss
コマンドは netlink
ソケットを使用して情報を取得するため、より高速にデータを取得できます。
主な違い
項目 | netstat | ss |
---|---|---|
データ取得方法 | /proc/net/tcp などの仮想ファイルシステムを参照 | netlink ソケット経由でカーネルから直接取得 |
速度 | 遅い(大量のデータを処理する際に負荷がかかる) | 高速(フィルタリングも柔軟に可能) |
詳細情報 | 基本的な接続情報のみ | より詳細なフィルタリングや統計情報が取得可能 |
開発の状況 | 非推奨(Linuxでは非推奨になりつつある) | 推奨(新しいシステムではssがデフォルト) |
そのため、現在では ss
コマンドが推奨されており、netstat
からの移行が進んでいます。

ssコマンドの基本的な使い方【オプション一覧】
ss
コマンドは、ネットワークのソケット情報を詳細に取得できる強力なツールです。基本的なオプションを理解しておけば、必要な情報を素早く取得でき、トラブルシューティングやパフォーマンス解析に役立ちます。
ss
コマンドには多くのオプションがありますが、ここでは特によく使われる下記5つのオプションを紹介します。
詳しいオプションの解説は↓の記事で紹介しているので興味があったら見てみてください!

❶ -t
(TCP接続の表示)
現在のTCP接続のみを表示します。
ss -t
これは、確立済みのTCP接続の状態を調査する際に便利です。

❷ -u
(UDP接続の表示)
現在のUDP接続のみを表示します。
ss -u
UDPはコネクションレスなプロトコルなので、TCPのような「確立済み(ESTABLISHED)」の概念はなく、基本的にはアクティブなポートが表示されます。

❸ -l
(リスニングソケットの表示)
サーバー側で待ち受け(LISTEN)状態になっているポートを表示します。
ss -l
特定のサービスが正しく待ち受けているか確認する際に役立ちます。

❹ -p
(プロセス情報の表示)
各ソケットに関連するプロセス情報を表示します。
ss -p
例えば、どのプロセスが特定のポートを使用しているかを調査できます。

❺ -s
(統計情報の表示)
ネットワークソケットの統計情報を要約表示します。
ss -s
ネットワークの接続状況をざっくり把握するのに便利です。

オプションの組み合わせ例
ss
コマンドの強みの一つは、複数のオプションを組み合わせて、詳細な情報をフィルタリングできる点です。今回は現場でよく使用される下記2つの組み合わせ例を紹介します。
SSコマンドでオプションと組み合わせた場合の詳細な解説は以下の記事で記載しているので良かったらみてみてください!
1. ss -tunlp
(全プロトコルのリスニングソケットを表示)
現在リスニングしている全てのポートと、関連するプロセスを表示します。
ss -tunlp
解説
-t
→ TCPを表示-u
→ UDPを表示-n
→ 数値でアドレスとポートを表示(DNS解決を行わないため高速)-l
→ リスニングソケットのみを表示-p
→ プロセス情報を表示
実行例
$ ss -tunlp
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
udp UNCONN 0 0 127.0.0.1:123 0.0.0.0:* users:(("ntpd",pid=5678,fd=4))
この例では、SSH(ポート22)とNTP(ポート123)がリスニングしていることがわかります。

2. ss -o state established dport = 22
(SSHの確立済み接続を確認)
確立済み(ESTABLISHED)のSSH接続のみを表示します。
ss -o state established dport = 22
解説
-o
→ 詳細なオプションを指定可能state established
→ 確立済みの接続を対象にするdport = 22
→ 宛先ポートが22(SSH)の接続のみ表示
実行結果
$ ss -o state established dport = 22
Netid Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 0 192.168.1.10:22 192.168.1.50:50123
tcp 0 0 192.168.1.10:22 192.168.1.51:50234
この結果から、192.168.1.50と192.168.1.51の2台がSSHで接続していることが分かります。

ssコマンドの出力結果を読み解く【ステータス解説】
ss
コマンドを実行すると、多くの情報が表示されます。
その出力結果を正しく理解できれば、ネットワークの状態を的確に把握し、トラブルシューティングやセキュリティ対策に役立てることができます。
ここでは、出力結果の各項目の意味と、接続ステータスの種類について解説します。

出力結果の各項目の意味
ss
コマンドの出力結果は、以下のような形式になっています。
$ ss -tan
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.1.10:22 192.168.1.50:50123
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
それぞれの列の意味を説明します。
State(ステータス)
現在の接続状態を示します。例えば、「ESTABLISHED(確立済み)」「LISTEN(待機中)」など、接続の進行状況を確認できます。
Recv-Q(受信キュー)
受信データがアプリケーションに処理される前に、一時的にキューに溜まるデータのサイズを示します。この値が大きい場合、アプリケーションの処理が追いついていない可能性があります。
Send-Q(送信キュー)
送信側が相手にデータを送る際に、一時的に保持されるデータのサイズを示します。この値が高い場合、ネットワークの遅延や相手側の受信遅れが原因で、データの送信が滞っている可能性があります。
Local Address:Port(ローカルアドレスとポート)
サーバーやクライアントの通信元となるIPアドレスとポート番号を示します。
Peer Address:Port(リモートアドレスとポート)
通信相手(接続先)のIPアドレスとポート番号を示します。

さらに詳細な出力結果や解釈の仕方は、下記の記事で詳しく解説しています!
スポンサーリンクssコマンドの実践的な使い方と事例
ss
コマンドは、サーバー管理やネットワークトラブルシューティングで非常に役立ちます。
ここでは、具体的なトラブルシューティングの事例と、システム監視への活用方法を5つ紹介します。
- WebサーバーでLISTENしているプロセスを特定する
- 特定のIPとの接続数が異常に多い原因を調査する
- CLOSE-WAITが多発している場合の対応
- cronと組み合わせた定期的な接続状況のログ取得
- watchコマンドを使ったリアルタイム監視
事例❶WebサーバーでLISTENしているプロセスを特定する
「Webサーバーが動いているはずなのに、ポート80で応答がない」というような状況で、どのプロセスが特定のポートをLISTENしているかを調査する方法です。
調査手順
❶ss
コマンドでポート80をLISTENしているプロセスを調べる
ss -ltnp | grep :80
実行結果
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
→ nginx
がポート80をLISTENしていることが分かります。
もし何も表示されない場合、Webサーバーが起動していないか、別のプロセスがポートを使用している可能性があります。
対策
- Webサーバーが起動していない場合は、
systemctl status nginx
やjournalctl -xe
でエラーログを確認 - 予期しないプロセスがポートを占有している場合は、
kill -9 <PID>
で強制終了し、正しいプロセスを起動

事例❷特定のIPとの接続数が異常に多い原因を調査
サーバーの負荷が高くなっている場合、特定のIPからの接続が原因である可能性があります。
ここでは、特定のIPアドレスとの接続数を確認し、問題の原因を調査する方法を紹介します。
調査手順
❶サーバーへの接続数をIPごとに集計する
実行コマンド
ss -tan | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
実行結果
100 192.168.1.50 45 203.0.113.10 12 198.51.100.25
→ 192.168.1.50 からの接続数が異常に多いことが分かります。
対策
iptables
やfirewalld
で一時的にアクセスを制限iptables -A INPUT -s 192.168.1.50 -j DROP
- サーバーのアクセスログ(
/var/log/nginx/access.log
など)を確認し、異常なリクエストがないか調査 - DDoS攻撃の可能性がある場合は、
fail2ban
などのツールを導入

事例❸CLOSE-WAITが多発している場合の対応
CLOSE-WAIT
状態の接続が大量に発生していると、システムリソースが消費され、パフォーマンス低下の原因になります。
調査手順
❶ss
コマンドで CLOSE-WAIT
状態の接続を確認
ss -tan state close-wait
実行結果
State Recv-Q Send-Q Local Address:Port Peer Address:Port CLOSE-WAIT
0 0 192.168.1.10:443 192.168.1.100:50123 CLOSE-WAIT
0 0 192.168.1.10:443 192.168.1.101:50234
→ CLOSE-WAIT
の接続が増え続けている場合、アプリケーションが正しく接続を閉じていない可能性がある。
対策
ss -tanp state close-wait
で、どのプロセスが影響を受けているか特定- アプリケーション側の
close()
やshutdown()
の実装を確認 net.ipv4.tcp_fin_timeout
の設定を調整して、不要な接続が残り続けないようにするsysctl -w net.ipv4.tcp_fin_timeout=10

事例❹cronと組み合わせた定期的な接続状況のログ取得
サーバーの接続状況を定期的に記録し、異常が発生した際に分析できるようにしておきましょう。
例えば、30分ごとに確立済みのTCP接続数を記録するには、以下の設定を /etc/crontab
に追加します。
*/30 * * * * root ss -s >> /var/log/ss_monitor.log
これにより、接続数の推移を後から確認できるようになります。

事例❺watch
コマンドを使ったリアルタイム監視
サーバーの接続状態をリアルタイムで監視する場合、watch
コマンドを使うと便利です。
リアルタイムで接続状況を確認
watch -n 1 ss -s
実行結果
Every 1.0s: ss -s
Total: 1280 (kernel 0)
TCP: 85 (estab 10, closed 70, orphaned 2, synrecv 0, timewait 65/0), ports 0
UDP: 12
これにより、接続数の変動をリアルタイムで監視でき、異常が発生した場合にすぐに対応できます。

より詳しい実践例については、下記の記事でで詳しく解説しています!
さらに詳しく知りたい場合の参考リンク
ssコマンドの詳細な使い方については、以下の記事でさらに詳しく解説しています。
基本的なオプションを詳しく知りたい方はこちら
複数のオプションを組み合わせた応用方法を詳しく知りたい方はこちら
出力結果の各ステータスの意味を知りたい方はこちら
実際の現場での活用事例を知りたい方はこちら

ゴリタン
インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。
CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。