まず結論:リスニングポートとプロセスを一覧表示する
rootまたはsudoで次のコマンドを実行すると、現在LISTENしているすべてのポートとプロセス名を即座に確認できます。
sudo ss -tlnp
出力例(AlmaLinux 9 / Ubuntu 22.04 環境):
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 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=5678,fd=6))
LISTEN 0 128 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=5678,fd=7))
LISTEN 0 128 127.0.0.1:5432 0.0.0.0:* users:(("postgres",pid=9012,fd=5))
ssはiproute2パッケージに含まれており、AlmaLinux 9・Rocky Linux 9・Ubuntu 22.04以降では標準搭載されています。かつて広く使われたnet-tools(netstatを含む)は多くのディストリビューションでデフォルトインストール対象外となっているため、新規環境ではssを使うのが現在の実務標準です。
主なオプションの組み合わせは次のとおりです。
| オプション | 意味 |
|---|---|
-t | TCPのみ表示 |
-u | UDPのみ表示 |
-l | LISTENポートのみ表示 |
-n | ポート番号を数値で表示(名前解決しない) |
-p | プロセス情報を表示(root / sudo 必須) |
UDPも含めて確認したい場合は -u を加えます。
sudo ss -tlnpu
出力フィールドの読み方
Local Address:Port 欄の表記に注目することで、サービスの公開範囲を把握できます。
| 表記例 | 意味 |
|---|---|
0.0.0.0:80 | 全インターフェースで待ち受け(外部からアクセス可) |
127.0.0.1:5432 | ループバックのみ(ローカルホストからしかアクセスできない) |
[::]:80 | 全インターフェースのIPv6で待ち受け |
PostgreSQLが 127.0.0.1:5432 でリッスンしているケースは、データベースへの外部アクセスを意図的に遮断している設定です。一方、意図せず 0.0.0.0 でリッスンしているサービスが見つかれば、ファイアウォール設定の見直し対象になります。セキュリティ監査や構成変更後の確認にも、このコマンドが役立ちます。
特定のポート番号に絞り込む
「80番ポートを誰が使っているか」だけを知りたい場合は、grepと組み合わせるのが手軽です。
sudo ss -tlnp | grep ':80'
lsof コマンドで同様の絞り込みをする場合は次のとおりです。
sudo lsof -i :80
出力例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 5678 root 6u IPv4 12345 0t0 TCP *:http (LISTEN)
nginx 5679 www 6u IPv4 12345 0t0 TCP *:http (LISTEN)
lsof は確立済みの接続(ESTABLISHED)も含めて表示するため、「今まさにこのポートで通信中のプロセス」まで確認できます。一覧の高速確認には ss、接続状態まで含めた詳細把握には lsof、という使い分けが実務では定着しています。
ポート競合が起きたときの実務対応
「サービスが起動しない」「Address already in use」というエラーが出たとき、最初に疑うのがポート競合です。ある運用現場では、Nginxが稼働しているサーバーにApacheを追加インストールしたことで80番ポートの競合が発生し、両サービスが起動不能になったケースが報告されています。
手順1:競合しているポートのプロセスを特定する
sudo ss -tlnp | grep ':80'
手順2:プロセス名からサービスの状態を確認する
systemctl status apache2
手順3:不要なサービスを停止・無効化する
sudo systemctl stop apache2
sudo systemctl disable apache2
stop だけでは再起動後に競合が再発します。不要なサービスは disable までセットで実行するのが実務上の重要なポイントです。
手順4:対象サービスを起動して競合解消を確認する
sudo systemctl start nginx
sudo ss -tlnp | grep ':80'
権限・IPv6・コンテナ環境の注意点
権限について:-p オプションでプロセス情報を表示するにはroot権限またはsudoが必要です。一般ユーザーで実行すると Process 列が空欄になり、どのプロセスが該当ポートを使っているか判断できません。不明な場合は sudo を付けて再実行してください。
IPv6について:IPv6専用ソケットも含めてすべてのリスニングポートを確認したい場合は次のコマンドを使います。
sudo ss -tlnp6
コンテナ環境について:DockerやPodmanで動かしているサービスのポートは、ホスト側の ss に表示されないことがあります。コンテナのポートマッピングは次のコマンドで別途確認します。
docker ps --format "table {{.Names}}\t{{.Ports}}"
コンテナ内のプロセスをホスト側から ss や lsof で追いかけようとするとポートが見えないケースがあるため、コンテナ環境では上記コマンドを組み合わせて確認する習慣をつけておくと混乱を防げます。
場面別:すぐコピペできるコマンド一覧
# 全リスニングポートとプロセスを確認(最もよく使う)
sudo ss -tlnp
# UDPも含めて確認
sudo ss -tlnpu
# 特定ポートのプロセスを絞り込む(例:443番)
sudo ss -tlnp | grep ':443'
# lsofで特定ポートを詳細確認(接続済みも含む)
sudo lsof -i :443
# 全ネットワーク接続を表示(確立済み接続も含む)
sudo lsof -i
# IPv6も含めたリスニングポートの確認
sudo ss -tlnp6
# コンテナのポートマッピング確認(Docker)
docker ps --format "table {{.Names}}\t{{.Ports}}"
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
