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

【Linux】オープンファイルを持つプロセスのプロセスIDをリストする:fuserコマンド

fuserコマンドの概要

 fuserコマンドは、指定したファイルやディレクトリを使用しているプロセスのプロセスID(PID)をリストアップするためのコマンドです。このコマンドを使用することで、特定のリソースを使用しているプロセスを確認し、必要に応じて対処することができます。

【構文】
fuser [オプション] 検索対象

主なオプションと説明

オプション説明
-k指定されたファイルやディレクトリを使用しているプロセスを強制終了する。
-mマウントされているファイルシステム全体を対象にする。
-n検索する領域を指定する。file、tcp、udpが指定できる。
-u検索結果にユーザー名を追加する。
-v詳細な情報を表示する
-aすべてのファイル名を表示する。
-iプロセスをkillする前に、ユーザーに確認を求める。オプション-kと共に使用する。
-lシグナル名を一覧表示する。
主なオプションと説明

コマンドの使用例と解説

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

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

管理者権限を取得します。

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

2./dev/sdb1を/mntにマウントする。

/dev/sdb1/mntにマウントしていなければ、次のコマンドを実行します。
既にマウントしている場合は、このコマンドを実行する必要はありません。

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

root@ubuntu-vm:~# mount /dev/sdb1 /mnt

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

「sdb1 8:17 0 1G 0 part /mnt」の出力から、/mntにマウントされていることが分ります。

root@ubuntu-vm:~# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
(省略)
sda      8:0    0    25G  0 disk 
├─sda1   8:1    0   512M  0 part /boot/efi
└─sda2   8:2    0  24.5G  0 part /var/snap/firefox/common/host-hunspell
                                 /
sdb      8:16   0    10G  0 disk 
└─sdb1   8:17   0     1G  0 part /mnt
sdc      8:32   0    10G  0 disk 
└─sdc1   8:33   0     1G  0 part 
(省略)

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

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

/mntディレクトリにカレントディレクトリを変更します。

root@ubuntu-vm:~# cd /mnt
root@ubuntu-vm:/mnt# 

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

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

 /mntディレクトリを使用しているプロセスのPIDを表示します。PIDの後ろの「c」は、このディレクトリがカレントディレクトリになっていることを示しています。

root@ubuntu-vm:/mnt# fuser /mnt
/mnt:                 3411c

5./mntをアンマウントします。

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

使用中のため、/mntのアンマウントは失敗します。

root@ubuntu-vm:/mnt# umount /dev/sdb1 /mnt
umount: /mnt: target is busy.
umount: /mnt: target is busy.

6.カレントディレクトリをホームディレクトリに移動します。

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

カレントディレクトリをホームディレクトリに変更します。

root@ubuntu-vm:/mnt# cd
root@ubuntu-vm:~# 

7./mntをアンマウントします。

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

使用中のプロセスがなくなったため、/mntのアンマウントが成功します。

root@ubuntu-vm:~# umount /dev/sdb1 /mnt
umount: /mnt: not mounted.

8./mntがアンマウントされたかどうかを確認します。

・「mount | grep mnt」コマンドを実行します。

/mntがアンマウントされたことを確認します。

root@ubuntu-vm:~# mount | grep mnt
nsfs on /run/snapd/ns/snapd-desktop-integration.mnt type nsfs (rw)

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

「sdb1 8:17 0 1G 0 part」の出力から、/mntのマウントが解除されていることが分ります。

root@ubuntu-vm:~# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
(省略)
sda      8:0    0    25G  0 disk 
├─sda1   8:1    0   512M  0 part /boot/efi
└─sda2   8:2    0  24.5G  0 part /var/snap/firefox/common/host-hunspell
                                 /
sdb      8:16   0    10G  0 disk 
└─sdb1   8:17   0     1G  0 part
sdc      8:32   0    10G  0 disk 
└─sdc1   8:33   0     1G  0 part 
(省略)

まとめ

 fuserコマンドは、ファイルやディレクトリを使用しているプロセスを特定するための便利なツールです。これを使うことで、リソースの使用状況を確認し、適切な対策を講じることができます。特にファイルシステムのアンマウントやリソースの解放に役立ちます。