Linux
 Computer >> コンピューター >  >> システム >> Linux

【Linux入門】lsofコマンドで開いているファイルとプロセスを一覧表示する方法

【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
【Linux入門】lsofコマンドで開いているファイルとプロセスを一覧表示する方法

このコマンドにより、firefoxプロセスが開いたすべてのファイルが表示されます。

PIDで絞り込みたい場合は、-pオプションに続けてプロセスIDを指定します。プロセスIDはpsコマンドなどで調べることができます。

例えば、firefoxプロセスのPIDを取得するには、次のように実行します。

sudo ps aux | grep firefox

目的のプロセスのPIDがわかったら、lsofでそのプロセスが開いているファイルを表示しましょう。

sudo lsof -p 2121
【Linux入門】lsofコマンドで開いているファイルとプロセスを一覧表示する方法

上記のコマンドは、指定したPIDを持つプロセスが開いているファイルを出力します。

特定のユーザーで絞り込む方法

特定のユーザーが開いたファイルだけを表示したい場合は、-uフラグを使用します。例えば、「debian」ユーザーの利用状況を確認するには、次のコマンドを実行します。

sudo lsof -u debian
【Linux入門】lsofコマンドで開いているファイルとプロセスを一覧表示する方法

特定のファイルで絞り込む方法

逆に、ある特定のファイルがどのプロセスやどのユーザーによって開かれているのかを知りたい場合もあります。その場合は、ファイル名を直接lsofに渡すだけでOKです。

sudo lsof /bin/sleep
【Linux入門】lsofコマンドで開いているファイルとプロセスを一覧表示する方法

上記のコマンドは、指定されたファイルに関する情報のみを抽出し、関連するユーザー名、プロセスIDなどを返してくれます。

まとめ

本記事では、Linuxのlsofコマンドを使って、システム上の開いているファイルに関する情報を照会する方法を解説しました。プロセス名、PID、ユーザー、ファイルパスといったさまざまな条件でフィルタリングできるので、トラブルシューティングやシステム監視にも大いに役立つでしょう。ぜひ実際の環境で試してみてください。

  1. Linuxのteeコマンド使い方ガイド|画面表示とファイル保存を同時に実現

    Linuxシェルでパイプやリダイレクトを使っているなら、teeコマンドの出番もきっとあるはずです。teeは「標準出力に表示しながら、同時にファイルにも書き込む」ことができる便利なユーティリティです。この記事では、teeコマンドの基本操作から、sudoとの組み合わせ、追記モード、エラー出力の扱い方まで、実例を交えながら詳しく解説します。 teeコマンドとは何をするもの? まず、次のようなコマンドを見てみましょう。 ls このコマンドは、現在のディレクトリの内容を表示します。つまり、標準出力(stdout)へ出力するわけです。標準出力とは通常、画面、正確には仮想端末のディスプレイのことです

  2. LinuxとmacOSでfdコマンドを使ってファイルを素早く検索する方法

    fdは、従来のfindコマンドのシンプルな代替ツールです。簡潔な構文と短いコマンド体系を採用しており、入力の手間を大幅に減らせるのが特徴です。ただし、その簡潔さゆえに、初めて見たときには意味が分かりにくいという側面もあります。さらにfdは、標準のfindコマンドよりもパターンマッチングを高速に実行できる点も魅力です。この記事では、LinuxおよびmacOSでfdを使う方法を詳しく解説します。 Linuxへのfdのインストール fdは、デフォルトでインストールされているシステムは多くありません。お好みのパッケージマネージャーでダウンロード・インストールすれば、ターミナルからすぐに利用できるよう