Linuxで使用中のファイル(ポート)を確認する方法(lsof)

Linuxで使用中のファイル(ポート)を確認する方法(lsof)

Linuxでは、一般的なファイルだけでなく、ネットワークソケット・デバイスドライバー・プロセスなども「ファイル」として扱われるため、lsofコマンドで開いているファイルを調べることで、どのプロセスがファイルやネットワークソケットを開いているかを確認することができます。

そこでここでは、lsofコマンドの基本的な使用方法を紹介します。

lsofコマンドの書式とオプション

最小構成でインストールしたCentOS 7にはlsofコマンドはないので、yumでインストールする必要があります。

書式

lsof [オプション[:[ポート番号|サービス]] [ファイル|プロセス]

主なオプション

オプション 説明
-P ポート番号をサービス名に変換しません。
-c プロセス名を指定します。
-i ネットワークソケットファイルを表示します。
-n 名前解決せずにIPアドレスで表示します。
-p プロセスIDを指定します。
-a AND条件で絞り込みます。

出力項目

出力項目 説明
COMMAND 実行中のプログラム
PID プロセス番号
USER 実行ユーザー
FD ファイルディスクリプタ
TYPE ファイル種別
DEVICE デバイス番号
SIZE/OFF ファイルサイズ
NODE プロトコル
NAME ファイルまたはポート

lsofコマンドの使用例

lsofコマンドで表示できるファイルやポートは、lsofコマンドを実行するユーザーに対し読み取り権限が与えられているものに限られるため、管理者権限での実行をおすすめします。

すべての使用中ファイルを表示するときは、以下のようにコマンドを実行します。

# lsof

特定のプロセスIDが使用中のファイルを調べるときは、以下のようにコマンドを実行します。

# lsof -p 12345

特定のプロセス名が使用中のファイルを調べるときは、以下のようにコマンドを実行します。

# lsof -c httpd

特定のユーザが使用中のファイルを調べるときは、以下のようにコマンドを実行します。

# lsof -u hoge

特定のファイルを開いているプロセスを調べるときは、以下のようにコマンドを実行します。

# lsof /root/sample.txt

特定のファイルを開いているプロセスに、HUPシグナルを送るときは、以下のようにコマンドを実行します。

# kill -HUP `lsof -t /root/sample.txt`

特定のプロセスIDが開いているIPv4ソケットファイルを調べるときは、以下のようにコマンドを実行します。

# lsof -i 4 -a -p 1234

次のいずれかの条件に一致するプロセス、もしくはユーザーによってい開かれているファイルを調べるときは、以下のようにコマンドを実行します。

  • プロセスIDが456、123、789のいずれか
  • ユーザー名がhoge
  • ユーザーIDが1234
# lsof -p 456,123,789 -u 1234,hoge

開いている(待受けている)ポートを調べるときは、以下のようにコマンドを実行します。

# lsof -i -sTCP:LISTEN -P

あとがき

 lsofコマンドは「list open files」という言葉に由来しているようです。(manより)