このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Linux】オープンしているファイルを一覧表示する:lsofコマンド

lsofコマンドの概要

 lsof(List Open Files)コマンドは、システム上でオープンされているすべてのファイルと、それらに関連するプロセスを一覧表示するためのコマンドです。ファイルには通常のファイル、ディレクトリ、ソケット、ネットワーク接続などが含まれます。lsofコマンドは、特定のプロセスが使用しているファイルを特定したり、特定のファイルを使用しているプロセスを特定したりするのに役立ちます。

【構文】
lsof [オプション] [パス名]

主なオプションと説明

オプション説明
-nホスト名の解決を行わずに、IPアドレスそのままで表示します。
-p指定したプロセスIDに関連するファイルを表示します。
-u指定したユーザーがオープンしているファイルを表示します。
主なオプションと説明

コマンドの使用例と解説

1.rootユーザーに切り替えます。

・「su -」コマンドを実行します。

システムの管理権限が必要な操作を行うために、rootユーザーに切り替えます。

user01@ubuntu-vm:~$ su -
パスワード:
root@ubuntu-vm:~#

2.全プロセスを表示する。

・「lsof」コマンドを実行します。

 オプションを指定しないでコマンドを実行すると、システム上でオープンされているすべてのファイルとプロセスを表示します。どのプロセスがどのファイルを使用しているかを確認するのに便利です。

root@ubuntu-vm:~# lsof
(省略)
8,2    147800     926339 /var/cache/fontconfig/99864424-7aea-4e8f-919a-d4b55442e89a-le64.cache-7
gjs       3032                         user01  mem       REG                8,2     11504     917946 /var/cache/fontconfig/705899d0-19cd-40d1-90b3-617d458c590d-le64.cache-7
gjs       3032                         user01  mem       REG                8,2     23763     673933 /usr/share/locale-langpack/ja/LC_MESSAGES/gdk-pixbuf.mo
(省略)

3.ユーザーを指定する。

・「lsof -u user01」コマンドを実行します。

 user01というユーザーがオープンしているすべてのファイルを表示します。特定のユーザーがどのファイルを使用しているかを確認できます。

root@ubuntu-vm:~# lsof -u user01
(省略)
gvfs-udis 2643 user01  mem       REG                8,2    197136     526397 /usr/share/glib-2.0/schemas/gschemas.compiled
gvfs-udis 2643 user01  mem       REG                8,2   6784496     401123 /usr/lib/locale/locale-archive
gvfs-udis 2643 user01  mem       REG                8,2     63552     422925 /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so
(省略)

4./mntディレクトリに対してlsofコマンドを実行する。

・「cd /mnt」コマンドを実行します。

/mnt」ディレクトリに移動します。

root@ubuntu-vm:~# cd /mnt

・「lsof /mnt」コマンドを実行します。

 /mntディレクトリおよびそのサブディレクトリにあるオープンファイルと、それらを使用しているプロセスを表示します。特定のディレクトリがどのプロセスによって使用されているかを調べる際に有用です。

root@ubuntu-vm:/mnt# lsof /mnt
lsof: WARNING: can't stat() fuse.portal file system /run/user/1000/doc
      Output information may be incomplete.
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    4422 root  cwd    DIR   8,17        6  128 /mnt
lsof    4452 root  cwd    DIR   8,17        6  128 /mnt
lsof    4453 root  cwd    DIR   8,17        6  128 /mnt

まとめ

 lsofコマンドは、システム上のオープンファイルとそれに関連するプロセスを詳細に確認するための強力なツールです。ファイルのロック状況を確認したり、特定のプロセスが使用しているファイルを特定したりするのに役立ちます。これにより、ファイルシステムのトラブルシューティングやセキュリティチェックを行うことができます。