Linuxのssコマンド徹底解説!オプション・出力の見方・実践的な使い方まで完全ガイド

最終更新日 2025年2月1日

スポンサーリンク

ssコマンドとは?基本概要と特徴

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

  1. ネットワーク接続の詳細情報を取得可能
  2. 高速なデータ取得
  3. 詳細なフィルタリングが可能
  4. netstatとの違い
ssコマンドとは?基本概要と特徴
ssコマンドは、ネットワークのソケット情報を取得し、現在の接続状況やリスニングポート、送受信キューの状態を調査できる強力なツールです。
ネットワーク詳細情報
ssコマンドは、現在開いているTCP/UDP接続、待ち受け中のポート、送受信キューの状態を詳細に表示します。特にネットワークのトラブルシューティング時に有用です。
高速なデータ取得
ssコマンドはカーネルと直接通信するため、高速に情報を取得できます。これは特に大量の接続があるサーバー環境で大きなメリットがあります。
ssコマンドの基本概要と特徴

ネットワーク接続の詳細情報を取得可能

ssSocket Statisticsの略)コマンドは、Linuxでネットワークのソケット情報を表示するためのツールです。ネットワークの状態を調査する際に使用され、現在確立されている接続、リスニングしているポート、送受信キューの状態などを確認できます。

例えば、以下のような情報を取得できます。

  • 現在開いているTCP/UDP接続
  • 待ち受け中のポート(LISTEN状態)
  • 接続中のリモートアドレスとポート番号
  • ソケットの送受信キューサイズ

Linuxのサーバー管理やネットワークトラブルシューティングの際に非常に役立つコマンドです。

スポンサーリンク

高速なデータ取得

ss コマンドは、カーネルと直接通信するため、netstat に比べて高速に情報を取得できます。特に大量の接続があるサーバー環境では、netstat の出力に時間がかかることがある一方、ss では瞬時に情報を表示できます。

例えば、大量のTCP接続を持つサーバーで netstat -an を実行すると、処理が終わるまで数秒〜十数秒かかることがあります。しかし、同じ情報を ss -tan で取得すると、一瞬で結果が表示されることがほとんどです。

高速なデータ取得の補足
ssコマンドはカーネルと直接通信し、高速に情報を取得。特に大量の接続があるサーバー環境で効果を発揮します。
高速なデータ取得
ssコマンドはカーネルと直接通信するため、netstatに比べて情報取得が非常に速いです。このため、サーバーの負荷を軽減しつつ迅速なデータ取得が可能になります。サーバー管理におけるパフォーマンス向上が期待できます。
大量接続時に効果
ssコマンドは、大量の接続がある状況下でも、高速なデータ取得性能を維持します。netstatでは遅延が発生する場合がありますが、ssコマンドなら瞬時に結果を表示し、効率的なネットワーク管理が可能です。
高速なデータ取得の補足

詳細なフィルタリングが可能

ss コマンドは、フィルタリング機能が非常に強力です。特定のポートやIPアドレス、接続状態を絞り込んで表示できるため、トラブルシューティングやセキュリティチェックに便利です。

  • 特定のポート(80番)で待ち受けているプロセスを確認
    ss -lnt '( sport = 80 )'
  • 特定のIPアドレスとの接続を確認
    ss -tan 'dst 192.168.1.100'
  • 確立済み(ESTABLISHED)のTCP接続のみを表示
    ss -tan state established

このように、ss コマンドを活用すれば、必要な情報を効率的に取得でき、トラブルシューティングの時間を大幅に短縮できます。

次の章では、ssコマンドの具体的な使い方を解説します。

詳細なフィルタリングが可能
ssコマンドを使えば、特定のポートやIPアドレス、接続状態を簡単に絞り込め、トラブルシューティングが迅速かつ効果的に行えます。
ポート番号でのフィルタ
特定のポート番号(例:80)を使用している接続を表示するには、「ss -lnt 'sport = :80'」のようにフィルタリングできます。これにより、特定のサービスの接続状態を迅速に把握できます。
IPアドレスでのフィルタ
特定のIPアドレス(例:192.168.1.100)との接続を絞り込むには、「ss -tan 'dst 192.168.1.100'」を使用します。これにより、問題のあるIPアドレスとの接続をすばやく確認できます。
接続状態でのフィルタ
確立済みの接続のみを表示する場合、フィルタ「ss -tan state established」を使用します。この方法で、接続の状態を詳細に監視し、異常を迅速に発見できます。
スポンサーリンク

netstatとの違い

従来、Linuxでは netstat コマンドが広く使用されていました。しかし、netstatprocfs から情報を取得するため、パフォーマンス面での課題がありました。一方、ss コマンドは netlink ソケットを使用して情報を取得するため、より高速にデータを取得できます。

主な違い

項目netstatss
データ取得方法/proc/net/tcp などの仮想ファイルシステムを参照netlink ソケット経由でカーネルから直接取得
速度遅い(大量のデータを処理する際に負荷がかかる)高速(フィルタリングも柔軟に可能)
詳細情報基本的な接続情報のみより詳細なフィルタリングや統計情報が取得可能
開発の状況非推奨(Linuxでは非推奨になりつつある)推奨(新しいシステムではssがデフォルト)

そのため、現在では ss コマンドが推奨されており、netstat からの移行が進んでいます。

netstatとの違い
ssコマンドは高速で詳細な情報が取得可能なため
従来のnetstatコマンドに対してより高性能です。
高速なデータ取得
ssコマンドはnetlinkソケットを利用し、カーネルから直接情報を取得します。そのため、大量の接続がある環境でも瞬時に結果を表示します。これにより、トラブルシューティングの効率が向上します。
詳細なフィルタリング
ssコマンドは詳細なフィルタリング機能を持ち、特定のポートや接続状態を指定して情報を絞り込むことができます。これにより、必要なデータを迅速かつ正確に取得できます。
netstatの欠点改善
netstatはprocfsを経由して情報を取得するため、処理が遅く、大量データの処理に時間がかかります。一方で、ssコマンドはこの問題が改善され、高速かつ効率的に情報を提供します。
スポンサーリンク

ssコマンドの基本的な使い方【オプション一覧】

ss コマンドは、ネットワークのソケット情報を詳細に取得できる強力なツールです。基本的なオプションを理解しておけば、必要な情報を素早く取得でき、トラブルシューティングやパフォーマンス解析に役立ちます。

ss コマンドには多くのオプションがありますが、ここでは特によく使われる下記5つのオプションを紹介します。

  1. -t(TCP接続の表示)
  2. -u(UDP接続の表示)
  3. -l(リスニングソケットの表示)
  4. -p(プロセス情報の表示)
  5. -s(統計情報の表示)

詳しいオプションの解説は↓の記事で紹介しているので興味があったら見てみてください!

ssコマンドの基本的な使い方
ssコマンドの基本オプション5つを理解し
ネットワークの状態を迅速に把握できるようになりましょう。
-t(TCP接続表示)
現在のTCP接続のみを表示します。確立済みのTCP接続状態を迅速に調査する際に特に便利です。
-u(UDP接続表示)
現在のUDP接続のみを表示します。コネクションレスなUDPプロトコルのアクティブなポートを把握するのに役立ちます。
-l(リスニング表示)
サーバーで待ち受け状態のリスニングソケットを表示します。サービスが正しく待機しているか確認できます。
ssコマンドの基本的な使い方
スポンサーリンク

-t(TCP接続の表示)

現在のTCP接続のみを表示します。

ss -t

これは、確立済みのTCP接続の状態を調査する際に便利です。

Centosにおけるss -tコマンドの実際の出力結果
Centosにおけるss -tコマンドの実際の出力結果

-u(UDP接続の表示)

現在のUDP接続のみを表示します。

ss -u

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

Centosにおけるss -uコマンドの実際の出力結果
Centosにおけるss -uコマンドの実際の出力結果

-l(リスニングソケットの表示)

サーバー側で待ち受け(LISTEN)状態になっているポートを表示します。

ss -l

特定のサービスが正しく待ち受けているか確認する際に役立ちます。

Centosにおけるss -lコマンドの実際の出力結果
Centosにおけるss -lコマンドの実際の出力結果
スポンサーリンク

-p(プロセス情報の表示)

各ソケットに関連するプロセス情報を表示します。

ss -p

例えば、どのプロセスが特定のポートを使用しているかを調査できます。

Centosにおけるss -pコマンドの実際の出力結果
Centosにおけるss -pコマンドの実際の出力結果

-s(統計情報の表示)

ネットワークソケットの統計情報を要約表示します。

ss -s

ネットワークの接続状況をざっくり把握するのに便利です。

Centosにおけるss -sコマンドの実際の出力結果
Centosにおけるss -sコマンドの実際の出力結果
スポンサーリンク

オプションの組み合わせ例

ss コマンドの強みの一つは、複数のオプションを組み合わせて、詳細な情報をフィルタリングできる点です。今回は現場でよく使用される下記2つの組み合わせ例を紹介します。

  1. ss -tunlp(全プロトコルのリスニングソケットを表示)
  2. ss -o state established dport = 22 (SSHの確立済み接続を確認)

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)がリスニングしていることがわかります。

Centosにおけるss -tunlpコマンドの実際の出力結果
Centosにおけるss -tunlpコマンドの実際の出力結果
スポンサーリンク

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で接続していることが分かります。

Centosにおけるss -o state established dport = 22の実際の出力結果
Centosにおけるss -o state established dport = 22の実際の出力結果
スポンサーリンク

ssコマンドの出力結果を読み解く【ステータス解説】

ss コマンドを実行すると、多くの情報が表示されます。
その出力結果を正しく理解できれば、ネットワークの状態を的確に把握し、トラブルシューティングやセキュリティ対策に役立てることができます。

ここでは、出力結果の各項目の意味と、接続ステータスの種類について解説します。

ssコマンドの出力結果を読み解く
ssコマンドの出力結果の各項目を理解し、ネットワーク状態の詳細を正確に把握するために役立てましょう。
ステータスの意味
ステータス(State)は接続の進行状況を示します。例えば、ESTABLISHED(確立済み)、LISTEN(待機中)など、各接続がどの状態にあるのかを確認できます。
受信キューと送信キュー
受信キュー(Recv-Q)はアプリケーションが処理中の受信データのサイズ、送信キュー(Send-Q)は送信保留中のデータのサイズを示します。高い値は遅延や処理遅れの兆候です。
アドレスとポート
ローカルアドレスとポートは通信元のIPアドレスとポート番号、リモートアドレスとポートは接続先のIPアドレスとポート番号を示します。これにより通信対象を特定できます。
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コマンドの各出力項目の意味を理解し
ネットワーク状態の理解に役立てましょう。
State(ステータス)
現在の接続状態を示します。例えば、ESTABLISHED(確立済み)やLISTEN(待機中)など、接続の進行状況を確認するのに重要です。
Recv-Q(受信キュー)
受信データがアプリケーションに処理される前にキューに溜まるデータのサイズを示します。この値が大きい場合、アプリケーションの処理が遅れている可能性があります。
Local Address:Port
サーバーやクライアントの通信元となるIPアドレスとポート番号を示します。これにより、どのIPアドレスとポートで通信を行っているかを確認できます。
出力結果の意味

さらに詳細な出力結果や解釈の仕方は、下記の記事で詳しく解説しています!

スポンサーリンク

ssコマンドの実践的な使い方と事例

ss コマンドは、サーバー管理やネットワークトラブルシューティングで非常に役立ちます。
ここでは、具体的なトラブルシューティングの事例と、システム監視への活用方法を5つ紹介します。

  1. WebサーバーでLISTENしているプロセスを特定する
  2. 特定のIPとの接続数が異常に多い原因を調査する
  3. CLOSE-WAITが多発している場合の対応
  4. cronと組み合わせた定期的な接続状況のログ取得
  5. 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 nginxjournalctl -xe でエラーログを確認
  • 予期しないプロセスがポートを占有している場合は、kill -9 <PID> で強制終了し、正しいプロセスを起動
事例❶の要点
Webサーバーがポート80で応答しない場合、ssコマンドを使ってLISTENしているプロセスを特定する手順を解説します。
調査手順
ssコマンドを使用してポート80をLISTENしているプロセスを特定します。
まず、ss -ltnp | grep :80 コマンドを実行します。これにより、ポート80で待機しているプロセス情報を確認できます。
実行結果
ss -ltnp | grep :80 の実行結果から、ポート80をLISTENしているプロセス(例えば、nginx)が特定されます。何も表示されない場合、ポート80で応答するプロセスが存在しない可能性があります。
対策
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 からの接続数が異常に多いことが分かります。

対策

  • iptablesfirewalld で一時的にアクセスを制限
    iptables -A INPUT -s 192.168.1.50 -j DROP
  • サーバーのアクセスログ(/var/log/nginx/access.log など)を確認し、異常なリクエストがないか調査
  • DDoS攻撃の可能性がある場合は、fail2ban などのツールを導入
事例❷の要点
サーバー負荷が高い場合、特定のIPアドレスとの接続数を確認し、
問題の原因を調査する。
IPアドレスの接続数を確認
`ss -tan | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head`コマンドを実行し、IPアドレス毎の接続数を集計・表示します。
異常な接続数の確認
実行結果から接続数の多いIPを特定し、その原因を調査。必要に応じてアクセス制限を検討します。サーバーのアクセスログを確認し、異常なリクエストがないかも調査します。
事例❷の要点
スポンサーリンク

事例❸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
事例❸の要点
CLOSE-WAITが多発する場合の影響と対策
事象の確認
CLOSE-WAIT状態の接続を確認するために、ss -tan state close-waitコマンドを実行します。これは、接続がアクティブに閉じられているかどうかを特定するために非常に重要です。
原因特定
ss -tanp state close-waitコマンドを用いて、CLOSE-WAIT状態の接続が増加している場合、どのプロセスが影響を受けているかを特定することが可能です。
対策実施
アプリケーションのclose()やshutdown()の実装を確認し、net.ipv4.tcp_fin_timeoutを調整して、不要な接続が残らないよう設定変更を行います。
事例❸の要点
スポンサーリンク

事例❹cronと組み合わせた定期的な接続状況のログ取得

サーバーの接続状況を定期的に記録し、異常が発生した際に分析できるようにしておきましょう。
例えば、30分ごとに確立済みのTCP接続数を記録するには、以下の設定を /etc/crontab に追加します。

*/30 * * * * root ss -s >> /var/log/ss_monitor.log

これにより、接続数の推移を後から確認できるようになります。

事例❹の補足
cronを使用した定期的な接続状況のログ取得により、
異常発生時の分析が可能になる
cronジョブの設定
cron配置ファイル(/etc/crontab)に、定期的なssコマンドの実行スケジュールを記載します。例として、30分ごとに接続状況をログに記録します。
ssコマンドの実行例
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

これにより、接続数の変動をリアルタイムで監視でき、異常が発生した場合にすぐに対応できます。

事例❺の補足
watchコマンドを用いて、リアルタイムに接続状況を監視する方法
watchコマンドの基本
watchコマンドは指定したコマンドを定期的に実行し、結果を更新し続けるツールです。リアルタイム監視に適しており、異常の早期発見が可能です。
接続状況監視の実行方法
例えば、1秒ごとにssコマンドを実行して接続状況を監視するには、「watch -n 1 ss -s」と入力します。これによりネットワーク状態を即座に確認できます。
即時対応手順
リアルタイム監視で異常を検知した場合、即座に対応策を講じることが可能です。例としてiptablesでの即時アクセス制限があります。
事例❺の補足


より詳しい実践例については、下記の記事でで詳しく解説しています!

スポンサーリンク

さらに詳しく知りたい場合の参考リンク

ssコマンドの詳細な使い方については、以下の記事でさらに詳しく解説しています。

基本的なオプションを詳しく知りたい方はこちら

複数のオプションを組み合わせた応用方法を詳しく知りたい方はこちら

出力結果の各ステータスの意味を知りたい方はこちら

実際の現場での活用事例を知りたい方はこちら

ゴリタンが愛用しているLinuxの教科書たち
https://amzn.to/4hBQa2y
https://a.r10.to/hkpc1F

この記事も参考になるかも!
この記事を書いた人!

ゴリタン

インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。

CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。

あなたにオススメの広告
スポンサーリンク
Linux教科書