メインコンテンツへスキップ
  1. ブログ/

lsofとは?Linuxでファイルオープン数を調べる基本コマンド解説

·
Linux コマンド Lsof
目次

lsofとは?Linuxでファイルオープン数を調べる基本コマンド解説
lsofとは?Linuxでファイルオープン数を調べる基本コマンド解説

初めに
#

Linuxシステムを運用していると、現在どれだけのファイルが開かれているか(ファイルのオープン数)を確認したい場面があります。

例えば、サーバプログラムがエラーを起こした際に、同時に開いているファイルの数が上限に達していないかを調べる必要が出てくることがあります。

こうした場合に役立つのが lsof コマンド です。

lsofList 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 の公式リポジトリとなっております。

lsof-org/lsof

LiSt Open Files

C
509
122

-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 コマンド実行すると、数万件以上の情報が一気に出力されることがあります。

そのためまずは、headwc -l で絞って段階的な確認を行うことをお勧めします。

関連記事

【簡単実行】curl -d オプションの使い方|POST送信・Webhook・JSON対応まで解説
Linux ネットワーク コマンド Curl
【簡単】Linuxでディレクトリを中身ごと削除する方法
Linux コマンド Rm Rmdir
【コピペ可】findコマンドでファイルの中身を検索する方法
Linux コマンド
【保存版】Linuxでログアウト後も処理を継続させる方法
Linux コマンド
ログ取得にも便利!teeコマンドで標準出力を保存する方法
Linux コマンド
WHOISサーバーを指定してドメイン情報を検索する方法
Linux コマンド ドメイン