2. lsof と fuser

USB ドライブのアンマウントを試みた際に、「デバイスまたはリソースがビジーです (Device or Resource Busy)」というエラーに遭遇したことはありませんか?この一般的な問題は、プロセスがまだデバイス上のファイルやディレクトリを使用している場合に発生します。これを解決するには、どのプロセスがそのリソースを保持しているかを特定する必要があります。このタスクのための強力なユーティリティが lsoffuser です。

lsof を使用して開いているファイルの一覧表示

Linux では、ディスク、パイプ、ネットワークソケット、デバイスなど、ほぼすべてのものがファイルとして扱われます。lsof コマンド("list open files" の略)は、開いているすべてのファイルとそのファイルを使用しているプロセスを詳細に一覧表示します。

現在のディレクトリ (.) をどのプロセスが使用しているかを確認するには、以下を実行します。

pete@icebox:~$ lsof .
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
lxsession 1491 pete  cwd    DIR    8,6     4096  131 .
update-no 1796 pete  cwd    DIR    8,6     4096  131 .
nm-applet 1804 pete  cwd    DIR    8,6     4096  131 .
xterm     2205 pete  cwd    DIR    8,6     4096  131 .
bash      2207 pete  cwd    DIR    8,6     4096  131 .
lsof      5914 pete  cwd    DIR    8,6     4096  131 .

出力には、各オープンファイルに関連付けられたコマンド (COMMAND)、プロセス ID (PID)、ユーザー (USER) が表示されます。この情報があれば、デバイスのアンマウントを妨げているプロセスを特定できます。

fuser コマンド

もう一つの優れたツールが fuser コマンド("file user" の略)です。このユーティリティは、特定のファイル、ソケット、またはファイルシステムを使用しているプロセスを特定します。linux fuser コマンドは、特定の特定のリソースにアクセスしているプロセスの PID を素早く確認する方法です。

-v (verbose) オプションを使用すると、より詳細な出力が得られます。

pete@icebox:~$ fuser -v .
                     USER        PID ACCESS COMMAND
/home/pete:         pete  1491 ..c.. lxsession
                     pete  1796 ..c.. update-notifier
                     pete  1804 ..c.. nm-applet
                     pete  2205 ..c.. xterm
                     pete  2207 ..c.. bash

ここでは、どのプロセスが現在のディレクトリを使用しているかが明確にわかります。ACCESS 列は、ファイルがどのように使用されているか(例:カレントディレクトリの場合は c)を示します。

fuser でプロセスを終了させる

fuser コマンドの重要な機能は、リソースを使用しているプロセスを終了させる能力です。fuser -k オプションは、指定されたファイルまたはファイルシステムにアクセスしているすべてのプロセスに SIGKILL シグナルを送信します。これは、ビジーなデバイスをアンマウントする際に特に役立ちます。

例えば、マウントポイント /mnt/usb を使用しているすべてのプロセスを強制終了するには、以下を実行します。

sudo fuser -k /mnt/usb

Linux で fuser -k を使用することは、リソースを解放するための迅速かつ効果的な方法です。

fuser vs lsof

では、fuserlsof のどちらを使うべきでしょうか?

  • lsof は詳細な調査に優れています。開いているすべてのファイルに関する広範な情報を提供するため、複雑なトラブルシューティングに最適です。
  • fuser はより直接的です。特定のファイルやマウントポイント上のプロセスを素早く特定し、必要に応じて終了させるのに最適です。fuser command は、「デバイスまたはリソースがビジーです」というエラーを解決するためのより速い選択肢となることがよくあります。

どちらのツールも、すべての Linux ユーザーにとって不可欠です。ファイルを効率的に管理し、プロセスを管理するために、これらに慣れておきましょう。

ログインして学習進捗を保存

サインイン

演習

練習あるのみです!リソース競合のトラブルシューティングとプロセスの管理に関する理解を深めるための実践的なラボをいくつか紹介します。

  1. Linux プロセスの管理と監視 - フォアグラウンドおよびバックグラウンドプロセスとの対話、ps を使用した検査、top を使用したリソースの監視、kill を使用した終了の練習を行います。このラボは、USB ドライブ上のファイルなど、リソースを保持している可能性のあるプロセスを特定し、管理するのに役立ちます。

クイズ

開いているファイルとその関連プロセス情報を一覧表示するために使用されるコマンドは何ですか? (回答は英語で、小文字のみを使用してください。)