Linux ユーザーとして、特定のプロセスがリッスンしているポート番号を知る必要がある場合があります。すべてのポートは、オペレーティング システムのプロセス ID またはサービスに関連付けられています。では、このポートをどのように見つけるのでしょうか?この記事では、プロセスがリッスンしているポートを見つけるために使用できる 3 つの異なる方法を紹介します。
この記事で説明されているコマンドと手順を Ubuntu 22.04 LTS システムで実行しました。
方法 1:netstat コマンドを使用する
ネットワーク統計ユーティリティである Netstat は、ネットワーク接続に関する情報を表示するために使用されます。これには、インターフェイスの統計情報、ルーティング テーブルなどに関する情報が含まれます。このユーティリティはほとんどの Linux システムで利用できるため、システム上の特定のプロセスが使用しているポートを調べるために使用します。
netstat コマンドを使用するには、net-tools ユーティリティがシステムにインストールされていない場合は、次のコマンドを使用してインストールする必要があります:
$ sudo apt install net-tools
次に、次のコマンドを実行します:
$ sudo netstat -ltnp
上記のコマンドは、次の機能に基づいて netstat 情報を提供します:
- l:リスニング ソケットのみを表示
- t:TCP 接続を表示
- n:アドレスを数値形式で表示
- p:プロセス ID/プログラム名を表示
たとえば、上記の netstat コマンドの出力では、プロセス ID 950 の Apache2 プログラムがポート番号 80 で実行されています。
コマンドに grep 関数を組み込むことで、特定のポートの統計をフィルタリングすることもできます。
例:
$ sudo netstat -ltnp | grep -w ':80'
このコマンドは、ポート番号 80 で実行されているプロセスを具体的に示します。
方法 2:lsof コマンドを使用する
lsof または List of Open Files ユーティリティは、Linux システムで開いているすべてのファイルを一覧表示するのに役立ちます。このユーティリティを使用して、特定のポートで開いているすべてのプロセスを表示できます。
lsof コマンドを使用するには、lsof ユーティリティがまだシステムにインストールされていない場合は、次のコマンドを使用してインストールする必要があります:
$ sudo apt install lsof
lsof を使用して、特定のポートでリッスンしているサービスを表示してみましょう。
例:
$ sudo lsof -i :80
このコマンドは、TCP ポート番号 80 を使用するすべてのプロセスを一覧表示します。
方法 3:fuser コマンドを使用する
fuser コマンドは、指定されたファイル、ソケット、またはファイル システムを使用しているプロセス ID を表示します。このコマンドを使用して、特定の TCP ポートで実行されているプロセス ID を表示できます。
fuser コマンドを使用するには、psmisc ユーティリティがまだシステムにインストールされていない場合は、次のコマンドを使用してインストールする必要があります:
$ sudo apt install psmisc
次のコマンドを使用して、TCP ポート 3306 で実行されているすべてのプロセス ID を表示してみましょう:
$ sudo fuser 3306/tcp
このコマンドで任意のポート番号を指定して、リッスンしているプロセスを表示できます。
上記の出力では、プロセス ID 975 が TCP 3306 をリッスンしていることがわかります。
このプロセス ID が対応するプログラムを表示するには、次のコマンドを実行します:
構文:
$ ps -p [processID] -o comm=
私たちの場合:
$ ps -p [975] -o comm=
出力は、プロセス ID 975 がプログラム名 MySDLd に対応することを示しています。したがって、プログラム MySQLd のプロセス ID 975 は、ポート番号 3306 でリッスンしています。
この記事で学習した 3 つの方法を使用すると、Linux 上の特定のプロセスがリッスンしている TCP ポートを簡単に確認できます。