この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。Linuxのss(8)マニュアルとTCP RFC 9293を確認し、待受ポートとprocessを結び付けて見る診断手順として整理しています。検証ステータス:🧪 一次情報確認済み・Debian 13で0件/不正入力/LISTENのロジック確認済み・Ubuntu実機未確認
Ubuntuで「誰がこのポートを待ち受けている?」を調べる ― ssでsocketとprocessを結び付ける
Ubuntuで「5000番ポートを使っているのは誰?」を調べるなら、ss でTCPのLISTEN socketを絞り込み、必要に応じてprocess情報まで確認します。
ss -lntpH "sport = :5000"
この1行で、TCP・LISTEN中・数値表示・process表示・ヘッダーなしに絞れます。
オプションを分解する
| Option | 意味 |
|---|---|
-l | listening socketを表示 |
-n | service名へ変換せず、アドレスとportを数値で表示 |
-t | TCP socketを表示 |
-p | socketを利用するprocess情報を表示 |
-H | ヘッダー行を表示しない |
-H は見た目を短くするだけでなく、今回のスクリプトでは「該当socketが0件なら空出力」と判定しやすくするためにも使っています。
process → socket → IP:portで見る
flowchart LR
A[process / PID] --> B[TCP socket]
B --> C[LISTEN state]
C --> D[local IP : port]
D --> E[接続を待つ]
ポート番号だけを見るのではなく、どのprocessがどのlocal addressへbindし、そのsocketがLISTENしているかをつなげて見ると理解しやすくなります。
127.0.0.1と0.0.0.0は意味が違う
たとえば5000番が次のように見えたとします。
127.0.0.1:5000 0.0.0.0:5000 [::]:5000
127.0.0.1:5000はIPv4 loopbackでの待受です。基本的に同じPC内から使う構成です。0.0.0.0:5000はIPv4の未指定アドレスで、複数のローカルIPv4アドレスに対する待受として使われます。[::]:5000はIPv6の未指定アドレスです。IPv4接続も受けるかどうかはOSやsocket設定に依存するため、表示だけで決めつけません。
「ポート5000が開いている」という一言だけでは、外部から到達できるかまでは分かりません。bind先アドレス、firewall、ルーティングなどは別に確認します。
process情報が見えないことがある
-p を付けても、実行ユーザーの権限によって他processの詳細が十分に表示されない場合があります。
その場合は、まずsocket自体があるかを確認し、process情報が必要なら権限の必要性を考えたうえで sudo で再確認します。
sudo ss -lntpH "sport = :5000"
毎回sudoを前提にするより、何の情報が権限不足で見えていないのかを分ける方が安全です。
何も出ないとき
このフィルターで何も出なければ、「ローカルでTCP 5000番をLISTENしているsocketは、この確認では見つからなかった」と判断できます。
ただし、次は別問題です。
UDP 5000番を使っている →
-tでは表示されない別network namespace内にある
serviceが起動直後に落ちた
接続拒否や通信失敗の原因がfirewall等にある
「ssに出ない = アプリの設定が必ず間違っている」とまでは断定しません。
ローカルロジック確認
2026-09-07にDebian GNU/Linux 13、Bash 5.2.37、iproute2 6.15.0で、未使用ポート・不正入力・localhostの一時TCP LISTENの3ケースを確認しました。Ubuntu実機での確認は未実施です。
