Linuxでは、一般的なファイルだけでなく、ネットワークソケット・デバイスドライバー・プロセスなども「ファイル」として扱われるため、lsofコマンドで開いているファイルを調べることで、どのプロセスがファイルやネットワークソケットを開いていかを確認することができます。
そこでここでは、lsofコマンドの基本的な使用方法を紹介します。
目次
動作環境
この記事は、以下の環境で実行した結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。
# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
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
特定のプロセス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より)