Linuxで使用中のポートを確認する方法|開発やセキュリティ対策に役立つ!

Linux

「サーバーが立ち上がらない…」
「このポート、他のサービスが使ってる?」

そんなときに真っ先に確認したいのが「使用中のポート」の情報です。

Linux環境では、ターミナルコマンドを使って簡単にポートの使用状況を確認することが可能です。

この記事では、初心者にもわかりやすく、Linuxで現在使用中のポートを調べる複数の方法を解説します。Web開発やサーバー管理、トラブルシュート時にきっと役立ちます!

スポンサーリンク

方法①:ssコマンドで確認する

ss(socket statistics)は netstat よりも高速で、最新のLinuxディストリビューションでは推奨されているコマンドです。

sudo ss -tuln

オプションの意味:

オプション内容
-tTCP接続のみ表示
-uUDP接続のみ表示
-lリッスン中のポートのみ表示(待ち受け)
-nホスト名・サービス名を数値で表示

出力例:

Netid  State    Recv-Q  Send-Q  Local Address:Port    Peer Address:Port
tcp    LISTEN   0       128     0.0.0.0:80            0.0.0.0:*
tcp    LISTEN   0       128     127.0.0.1:3306        0.0.0.0:*
tcp    LISTEN   0       128     0.0.0.0:22            0.0.0.0:*

この例では、ポート80(HTTP)、3306(MySQL)、22(SSH)が使用中であることがわかります。

使いやすいvsメモリ効率

# 見やすく整形した出力(プロセス情報も表示)
sudo ss -tulnp

# さらに詳細な統計情報を表示
sudo ss -tuln --info

方法②:netstat コマンドで確認(古いけどまだ使われる)

sudo netstat -tuln

netstat は古くからあるツールですが、ss に比べて非推奨のディストリビューションもあります。

ただし、まだ多くのサーバーで利用可能です。

出力例:

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN

プロセス情報も表示するには:

sudo netstat -tulnp

これにより、各ポートを使用しているプロセス名とPIDも表示されます。

方法③:特定ポートを使っているプロセスを調べる lsof

lsof は「List Open Files」の略で、ポートとプロセスを直接関連付けて確認できる便利なコマンドです。

例:ポート3000が使われているか確認

sudo lsof -i :3000

出力例:

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node     1234   user   20u  IPv6 123456      0t0  TCP *:3000 (LISTEN)

この場合、プロセスID 1234 の node がポート3000を使用中であることがわかります。

全ポートの確認:

sudo lsof -i -P

-P オプションは、ポート番号をサービス名に変換せずにそのまま表示します。

リスニング状態(待ち受け)のポートのみ表示:

sudo lsof -i -P | grep LISTEN

方法④:プロセスID(PID)から確認する

ポートを使っているプロセスのID(PID)がわかったら、以下のようにして詳細を確認できます。

ps -p 1234 -o pid,comm,user

または、

top -p 1234

で動作中の様子をリアルタイムで確認できます。

プロセスの詳細情報:

# さらに詳しい情報を表示
ps -fp 1234

# メモリ使用量なども確認
ps -p 1234 -o pid,comm,user,%cpu,%mem,start

各コマンドの違いと使い分け

コマンド特徴おすすめの用途
ss高速で最新、詳細な情報表示可能全体的なポート状況確認に最適
netstat古いが広く使われているレガシーシステムでの確認に
lsofファイルとポートの関連付けが得意特定ポートのプロセス特定に便利

ポートの競合でトラブルが発生したときの対処法

プロセスを強制終了する(慎重に)

sudo kill -9 1234

ただし、本当に不要なプロセスか確認してから行いましょう。重要なシステムプロセスを止めてしまうと、サーバーに影響が出る可能性があります。

より安全な終了方法:

# まずは通常の終了シグナル
sudo kill 1234

# それでも終了しなければ強制終了
sudo kill -9 1234

プロセス名から終了する方法:

sudo pkill -f node

これは「node」という名前のすべてのプロセスを終了させます。慎重に使用してください。

実践例:よくあるトラブルシューティング

例1:Webサーバーがポート80で起動できない

# ポート80の使用状況を確認
sudo lsof -i :80

# 結果に基づいて対処(例:Apacheが使っていた場合)
sudo systemctl stop apache2
# または
sudo service apache2 stop

例2:自分のNode.jsアプリが3000番ポートで起動できない

# ポート3000の使用状況確認
sudo ss -tulnp | grep 3000

# 結果に基づいて対処
# a) プロセスを終了
sudo kill <PID>
# b) 別のポートを使用
# アプリの設定やコマンドラインオプションでポート番号を変更

セキュリティの観点から

使用中のポートは、サーバーの「開いている窓」のようなものです。不要なポートが開いていると、攻撃者に侵入口を提供してしまう可能性があります。

# インターネットに公開されている可能性のあるポートを確認
sudo ss -tuln | grep '0.0.0.0'

定期的に使用中のポートを確認し、必要のないサービスは停止することをお勧めします。

まとめ

Linuxでポートの使用状況を確認できるようになると、アプリケーションの競合トラブルをすぐに把握・対処できるようになります。

本記事のおさらい:

  • ss -tuln:もっとも推奨される確認方法
  • lsof -i :ポート番号:プロセスとポートの対応をチェック
  • kill コマンドでプロセスの停止も可能(慎重に)
  • 各コマンドを状況に応じて使い分ける

実践的なコマンド集

# よく使われるポートの状態チェック
sudo ss -tuln | grep -E ':(22|80|443|3306|5432|6379|27017)'

# 特定のアプリケーションが使っているポートを確認
sudo lsof -i -P | grep -i node

# 待ち受け中ポートとプロセスの一覧取得
sudo ss -tulnp

コメント

タイトルとURLをコピーしました