自分用の備忘録です。
はじめに
「ローカルサーバーを起動したが、接続先ポートが分からなくなった」
「どのアプリケーションが、どのポートを使っているか調べたい」
がターミナルで解決する方法を記事にまとめました。
待受ポートを一覧表示するコマンド
lsof -nP -iTCP -sTCP:LISTEN
なにをしてくれるコマンドなのか
- TCP接続を待っているプロセスを一覧表示する
- ローカルサーバーが実際に起動しているか確認できる
- 使用中のポート番号を確認できる
コマンドのオプションを分解する
lsof
「List Open Files」の略
macOSやLinuxではネットワーク接続もファイルとして扱われる
-n
IPアドレスをホスト名へ変換しない
名前解決を省略して、結果を素早く表示する
-P
ポート番号をサービス名へ変換しない
httpではなく80のように数値で表示する
-iTCP
TCP通信に絞り込む
-sTCP:LISTEN
接続待ちのポートだけに絞り込む
実行例
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 1234 user 20u IPv6 ... 0t0 TCP *:3000 (LISTEN)
com.docke 5678 user 50u IPv6 ... 0t0 TCP *:5433 (LISTEN)
読み方
| 列 | 意味 |
|---|---|
COMMAND |
ポートを使用しているプログラム |
PID |
プロセスID |
USER |
プロセスを実行しているユーザー |
FD |
ファイルディスクリプタ |
TYPE |
IPv4またはIPv6 |
NAME |
IPアドレス、ポート番号、状態 |
例えば
node 1234 user ... TCP *:3000 (LISTEN)
- Node.jsが動いている
- プロセスIDは1234
- 3000番ポートで接続を待っている
- 接続先は
http://localhost:3000
まとめ
-
lsof -nP -iTCP -sTCP:LISTENで待受ポートを一覧表示できる -
COMMANDでプログラム、PIDでプロセス、NAMEでポートを確認する - Next.jsでは通常nodeと3000を探す
- 3000番が表示されなければ、サーバーが起動していない可能性がある
- ポート競合時は、使用中のプロセスを確認するか別ポートで起動する