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より)