「ssコマンドの出力が読めなくて、結局どのプロセスがどのポートを使っているか分からない…」
RHEL 7以降のLinuxでは、netstatに代わって ss がネットワーク確認の標準コマンドになりました。
この記事では、ssコマンドの実践的な使い方を解説します。
基本的な接続確認から、LISTENポートの一覧表示、特定ポートの絞り込み、プロセスの特定まで、現場で必要になる操作を網羅しています。
なぜnetstatではなくssコマンドなのか?
netstatは長年Linuxのネットワーク確認に使われてきましたが、RHEL 7/CentOS 7以降では net-tools パッケージに含まれる「非推奨」のコマンドという位置づけになりました。ssコマンドは iproute2 パッケージに含まれ、カーネルから直接ソケット情報を取得します。そのため、netstatより動作が高速で、大量のコネクションがあるサーバーでも瞬時に結果が返ってきます。
・netstat:/proc/net/tcpを解析するため、接続数が多いと遅くなる
・ss:netlinkソケット経由でカーネルから直接取得するため、高速に動作する
新しいディストリビューション(RHEL 8/9、Ubuntu 20.04以降など)では、net-toolsがデフォルトでインストールされていないことも多いため、ssコマンドの使い方を身につけておくことが実務上必須です。
ssコマンドの基本的な使い方
1. 全ソケット情報を表示する
まずはオプションなしで実行してみましょう。# すべてのソケット情報を表示する $ ss
2. LISTENポートを一覧表示する(ss -tlnp)
現場で最もよく使うのが、LISTENしているポートの一覧表示です。# TCP LISTENポートをプロセス名付きで表示する $ ss -tlnp State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3)) LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("httpd",pid=5678,fd=4)) LISTEN 0 128 0.0.0.0:443 0.0.0.0:* users:(("httpd",pid=5678,fd=6))
・-t:TCPソケットのみ表示
・-l:LISTEN状態のソケットのみ表示
・-n:ポート番号を数値のまま表示(名前解決しない)
・-p:ソケットを使用しているプロセスを表示
※ -p オプションでプロセス情報を表示するには root 権限が必要です。一般ユーザーで実行すると、自分のプロセスの情報しか表示されません。
3. ESTABLISHED(確立済み)接続を確認する
現在通信中のTCP接続を確認するには、-t オプションだけを付けます。# 確立済みのTCP接続を表示する $ ss -tnp State Recv-Q Send-Q Local Address:Port Peer Address:Port Process ESTAB 0 0 192.168.1.10:22 192.168.1.100:54321 users:(("sshd",pid=2345,fd=3)) ESTAB 0 0 192.168.1.10:80 203.0.113.50:48765 users:(("httpd",pid=5678,fd=8))
4. UDPソケットを確認する
DNSやNTP、syslogなどUDPを使うサービスの確認には -u オプションを使います。# UDP LISTENポートをプロセス名付きで表示する $ ss -ulnp State Recv-Q Send-Q Local Address:Port Peer Address:Port Process UNCONN 0 0 0.0.0.0:68 0.0.0.0:* users:(("dhclient",pid=890,fd=6)) UNCONN 0 0 127.0.0.1:323 0.0.0.0:* users:(("chronyd",pid=678,fd=5))
5. TCP・UDPの両方をまとめて確認する
TCPとUDPを一度に確認したい場合は -tu を使います。# TCP・UDP両方のLISTENポートをまとめて表示する $ ss -tulnp
特定ポートやアドレスに絞り込む方法
1. 特定のポート番号で絞り込む
ssコマンドにはフィルタ構文があり、特定のポートに絞った表示ができます。# ポート80を使っているソケットを表示する $ ss -tlnp sport = :80 # ポート443を使っているソケットを表示する $ ss -tlnp sport = :443 # ポート番号の範囲で絞り込む(1024未満のウェルノウンポート) $ ss -tlnp sport lt :1024
2. 特定のIPアドレスで絞り込む
# 特定のリモートIPからの接続を表示する $ ss -tnp dst 203.0.113.50 # 特定のローカルIPのソケットを表示する $ ss -tlnp src 192.168.1.10
3. 状態で絞り込む
# ESTABLISHED状態のTCP接続のみ表示する $ ss -tn state established # TIME-WAIT状態の接続を表示する $ ss -tn state time-wait # CLOSE-WAIT状態の接続を表示する(相手が切断したが自分側が閉じていない) $ ss -tn state close-wait
実務で使えるTips
ssの出力をgrepで絞り込む
フィルタ構文を覚えるのが面倒な場合は、grep との組み合わせでも十分です。# httpdプロセスのソケットだけ表示する $ ss -tlnp | grep httpd # ポート3306(MySQL)を使っているソケットを確認する $ ss -tlnp | grep 3306
接続数をカウントする
Webサーバーの同時接続数を確認するときに使えるワンライナーです。# ポート80のESTABLISHED接続数をカウントする $ ss -tn state established sport = :80 | wc -l # 接続元IPごとの接続数を集計する $ ss -tn state established sport = :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head
ssとlsofの使い分け
ポートを使っているプロセスを調べるにはlsofコマンドも使えます。使い分けの目安は以下のとおりです。・ss -tlnp:ソケット全体を俯瞰したいとき(高速)
・lsof -i :ポート番号:特定ポートのプロセスをファイルディスクリプタレベルで確認したいとき
どちらもroot権限で実行すると、すべてのプロセスの情報が表示されます。
「ss: command not found」が出た時の対処法
ssコマンドが見つからない場合は、iproute2パッケージがインストールされていない可能性があります。# RHEL/CentOS系の場合 $ sudo yum install iproute # Ubuntu/Debian系の場合 $ sudo apt install iproute2
「permission denied」でプロセス情報が表示されない場合
ss -p を一般ユーザーで実行すると、Process列が空欄になる場合があります。# 一般ユーザーで実行した場合(プロセス情報が表示されない) $ ss -tlnp State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* # root権限で実行する $ sudo ss -tlnp State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| TCP LISTENポートを一覧表示する | ss -tlnp |
| ESTABLISHED接続を確認する | ss -tnp |
| UDP LISTENポートを確認する | ss -ulnp |
| TCP・UDPの両方をまとめて確認する | ss -tulnp |
| 特定ポートのソケットを表示する | ss -tlnp sport = :80 |
| 特定IPからの接続を表示する | ss -tnp dst 203.0.113.50 |
| 特定の状態の接続を表示する | ss -tn state established |
| 接続数をカウントする | ss -tn state established sport = :80 | wc -l |
ssコマンドの出力を「読める」だけで終わっていませんか?
ポートの確認やプロセスの特定は、サーバー管理の基本中の基本です。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
登録10秒/自動返信でDL/合わなければ解除3秒
