【Linux入門】lsofコマンドで開いているファイルとプロセスを一覧表示する方法
Linuxの魅力の一つは、起動プロセスからソフトウェアパッケージのインストールまで、システム上のあらゆる情報を簡単に確認・管理できる点にあります。本記事では、Linuxでlsofコマンドを使って開いているファイルや、それらを使用しているプロセスを確認する方法を詳しく解説します。この知識を身につければ、システムの動作原理への理解が深まり、特定のプロセスに対して必要な対応を取れるようになります。
lsofコマンドとは
開いているファイルと、それらに関連するユーザーやプロセスを確認するには、lsof(List Open Files)ユーティリティを使用します。多くのディストリビューションでは、lsofはデフォルトでプリインストールされています。
もしインストールされていない場合は、パッケージマネージャーを使って簡単に導入できます。以下に、主要なディストリビューション別のインストールコマンドを紹介します。
Debian/Ubuntuの場合
Debian系ディストリビューションでは、以下のコマンドを実行します。
sudo apt-get install lsof
Arch/Manjaroの場合
ManjaroなどArch系のディストリビューションでは、pacmanを使ってインストールします。
sudo pacman -S lsof
CentOS/RHEL/Fedoraの場合
CentOSやRHELファミリーのディストリビューションでは、dnfコマンドが利用できます。
sudo dnf install lsof
lsofコマンドで開いているファイルを一覧表示する
他の多くのLinuxコマンドと同様、lsofは非常にシンプルに使えます。まずは引数なしでlsofコマンドを実行してみましょう。
sudo lsof
このコマンドを実行すると、システム上で開かれているすべてのファイルに関する情報が出力されます。
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 8,48 4096 2 / init 1 root rtd DIR 8,48 4096 2 / init 1 root txt REG 0,19 632048 281474976743906 /init init 1 root 0u CHR 1,3 0t0 15362 /dev/null init 1 root 1u CHR 1,3 0t0 15362 /dev/null init 1 root 2u CHR 1,3 0t0 15362 /dev/null init 1 root 3w CHR 1,11 0t0 15367 /dev/kmsg init 1 root 4u sock 0,8 0t0 22689 protocol: AF_VSOCK init 1 root 5r REG 0,4 0 4026532185 mnt init 1 root 6r REG 0,4 0 4026532201 mnt init 1 root 7r DIR 8,48 4096 240 /home/cap init 1 root 8u DIR 8,48 4096 2 / init 1 root 9u sock 0,8 0t0 21853 protocol: AF_VSOCK
注意: 一部のファイルで「permission denied(アクセス権限がありません)」エラーが表示されるのを防ぐため、sudo権限をお持ちの方は必ずsudoを付けて実行することをおすすめします。
上記の出力結果には、以下のような列が含まれています。
| 列名 | 意味 |
|---|---|
| COMMAND | 対象のファイルを使用しているプロセスの名前。 |
| PID | そのファイルを使用しているプロセスの一意な識別子。 |
| TID | スレッド識別子(Thread ID)。 |
| TASKCMD | タスクコマンドの名前。 |
| USER | プロセスを実行しているユーザー名またはUID。 |
| FD | ファイルディスクリプタおよびモード。 |
| TYPE | 対象ファイルに関連付けられたノードの種類。 |
| DEVICE | カンマ区切りのデバイス番号。 |
| SIZE/OFF | ファイルサイズ(バイト)またはオフセットサイズ。 |
| NODE | ローカルファイルのinode値。statコマンドでも同様の情報を確認できます。 |
| NAME | ファイルのマウントポイントまたはパス。 |
出力内容の意味がわかったところで、次に特定の情報だけを絞り込んで表示する方法を見ていきましょう。
特定のプロセスで絞り込む方法
特定のプロセスが開いたファイルだけを表示したい場合は、プロセス名またはPID値を使ってフィルタリングできます。
例えば、firefoxプロセスが使用しているファイルを表示するには、次のコマンドを使用します。
sudo lsof -c firefox
このコマンドにより、firefoxプロセスが開いたすべてのファイルが表示されます。
PIDで絞り込みたい場合は、-pオプションに続けてプロセスIDを指定します。プロセスIDはpsコマンドなどで調べることができます。
例えば、firefoxプロセスのPIDを取得するには、次のように実行します。
sudo ps aux | grep firefox
目的のプロセスのPIDがわかったら、lsofでそのプロセスが開いているファイルを表示しましょう。
sudo lsof -p 2121
上記のコマンドは、指定したPIDを持つプロセスが開いているファイルを出力します。
特定のユーザーで絞り込む方法
特定のユーザーが開いたファイルだけを表示したい場合は、-uフラグを使用します。例えば、「debian」ユーザーの利用状況を確認するには、次のコマンドを実行します。
sudo lsof -u debian
特定のファイルで絞り込む方法
逆に、ある特定のファイルがどのプロセスやどのユーザーによって開かれているのかを知りたい場合もあります。その場合は、ファイル名を直接lsofに渡すだけでOKです。
sudo lsof /bin/sleep
上記のコマンドは、指定されたファイルに関する情報のみを抽出し、関連するユーザー名、プロセスIDなどを返してくれます。
まとめ
本記事では、Linuxのlsofコマンドを使って、システム上の開いているファイルに関する情報を照会する方法を解説しました。プロセス名、PID、ユーザー、ファイルパスといったさまざまな条件でフィルタリングできるので、トラブルシューティングやシステム監視にも大いに役立つでしょう。ぜひ実際の環境で試してみてください。
-
Linuxのteeコマンド使い方ガイド|画面表示とファイル保存を同時に実現
Linuxシェルでパイプやリダイレクトを使っているなら、teeコマンドの出番もきっとあるはずです。teeは「標準出力に表示しながら、同時にファイルにも書き込む」ことができる便利なユーティリティです。この記事では、teeコマンドの基本操作から、sudoとの組み合わせ、追記モード、エラー出力の扱い方まで、実例を交えながら詳しく解説します。 teeコマンドとは何をするもの? まず、次のようなコマンドを見てみましょう。 ls このコマンドは、現在のディレクトリの内容を表示します。つまり、標準出力(stdout)へ出力するわけです。標準出力とは通常、画面、正確には仮想端末のディスプレイのことです
-
LinuxとmacOSでfdコマンドを使ってファイルを素早く検索する方法
fdは、従来のfindコマンドのシンプルな代替ツールです。簡潔な構文と短いコマンド体系を採用しており、入力の手間を大幅に減らせるのが特徴です。ただし、その簡潔さゆえに、初めて見たときには意味が分かりにくいという側面もあります。さらにfdは、標準のfindコマンドよりもパターンマッチングを高速に実行できる点も魅力です。この記事では、LinuxおよびmacOSでfdを使う方法を詳しく解説します。 Linuxへのfdのインストール fdは、デフォルトでインストールされているシステムは多くありません。お好みのパッケージマネージャーでダウンロード・インストールすれば、ターミナルからすぐに利用できるよう