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