初めに #
Linuxシステムを運用していると、現在どれだけのファイルが開かれているか(ファイルのオープン数)を確認したい場面があります。
例えば、サーバプログラムがエラーを起こした際に、同時に開いているファイルの数が上限に達していないかを調べる必要が出てくることがあります。
こうした場合に役立つのが lsof コマンド です。
lsofは List Open Files の略称で、開いているファイルの情報を一覧表示できる強力なコマンドです。
本記事では、Linux初心者向けにこの lsof コマンドの使い方を解説し、Linuxで開いているファイル数を確認する具体的な方法をご紹介します。
基本的な使い方 #
lsof コマンドの基本的な使い方は以下の通りです。
lsof
何もオプションを付けずにコマンドを実行した場合、Linux上で現在開かれているすべてのファイル情報が一覧表示されます。
出力される内容にはプロセス名やPID、ユーザー名などの情報が含まれています。
以下は出力される情報の一覧となります。
| 項目名 | 意味 |
|---|---|
| COMMAND | ファイルを開いているプロセスの名前 |
| PID | プロセスID |
| USER | 該当プロセスを実行しているユーザー名 |
| FD | ファイルディスクリプタ |
| TYPE | ファイルの種類 |
| DEVICE | デバイス番号 |
| SIZE/OFF | ファイルサイズまたはオフセット |
| NODE | iノード番号(ファイルシステム上の一意な識別子) |
| NAME | ファイルのパスまたは名前 |
多くのLinuxディストリビューションでは標準でlsofがインストールされていますが、環境によってはインストールが必要な場合があります。
環境にインストールされていない場合は以下のコマンドを利用しインストールを実行してください。
dnf install lsof
以下は lsof の公式リポジトリとなっております。
LiSt Open Files
-hでオプションを表示する #
-h オプションは多くのコマンドで「ヘルプ表示(使い方ガイド)」として利用されています。
lsofコマンドでも同様に、以下のように実行することで利用可能な全オプションの一覧を確認できます。
lsof -h
以下は主なオプション一覧となっております。
ご利用の lsof のバージョンやディストリビューションによって、一部のオプションが存在しない、または動作が異なる場合があります。
詳細はご利用環境の lsof -h または man lsof をご確認ください。
| オプション | 説明 |
|---|---|
-h または -? |
ヘルプを表示 |
-a |
複数の条件をANDで組み合わせる |
-b |
カーネルのブロックを回避(安全性向上) |
-c <文字列> |
コマンド名が一致するプロセスを表示 |
-d <FD> |
指定したファイルディスクリプタに一致するものを表示 |
-i |
ネットワーク関連のファイル(IPv4/IPv6ソケット)を表示 |
-n |
ホスト名の逆引きを行わず、IPアドレスで表示 |
-p <PID> |
指定したプロセスIDの情報のみ表示 |
-u <ユーザー> |
指定ユーザーのプロセスまたはUIDを表示 |
-t |
出力を簡潔に表示(PIDのみなど) |
+d <ディレクトリ> |
指定ディレクトリ直下のファイルを開いているプロセスを表示 |
+D <ディレクトリ> |
指定ディレクトリ配下すべて(再帰)のファイルを開いているプロセスを表示 |
-F |
スクリプト向けに出力形式を制御(フィールド指定) |
-v |
バージョン情報を表示 |
-V |
詳細モードで検索情報を表示 |
-l |
UIDを数値で表示(ユーザー名ではなく) |
-P |
ポート番号を名前でなく数値で表示 |
-R |
親プロセスID(PPID)を表示 |
-U |
UNIXドメインソケットに関する情報を表示 |
-- |
オプションの終了を明示(ファイル名の誤認識を防ぐ) |
lsofでファイルオープン数を確認する方法 #
lsof コマンドを使って、システム上で現在開かれているファイル数を確認するには、wc コマンド(行数カウント)と組み合わせて使用するのが一般的です。
lsof | wc -l
48362
この例では、lsof が出力する行数を wc -l でカウントし、現在オープンされているファイル数が 48362 件 であることを示しています。
また、以下のように実行することで特定のユーザーが開いているファイルに絞って合計を取得することができます。
lsof -u apache | wc -l
1429
この例では、apache ユーザーが現在開いているファイル数をカウントし 1429 件であることを示しています。
-u オプションでは、ユーザー名だけでなく UID での指定も可能です。
これにより、スクリプト内で動的に UID を扱う場合や、ユーザー名が重複・不明な環境でも対象を絞り込むことができます。
注意点 #
一般ユーザでの実行 #
lsof コマンドを一般ユーザーにて実行した場合、自分自身のプロセスが開いているファイル情報しか取得できません。
システム全体のプロセスや他ユーザーの状況を確認したい場合は、以下のように sudo を付けて実行するのが推奨されます。
sudo lsof
出力件数に注意 #
何もオプションを付けずに lsof コマンド実行すると、数万件以上の情報が一気に出力されることがあります。
そのためまずは、head や wc -l で絞って段階的な確認を行うことをお勧めします。