fuserコマンドで使用中のファイル・ポートを占有するプロセスを特定する方法|umount時のtarget is busy解消


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips, Linuxトラブルシューティング > fuserコマンドで使用中のファイル・ポートを占有するプロセスを特定する方法|umount時のtarget is busy解消
「アンマウントしようとしたら target is busy と出た」「どのプロセスが/mntを掴んでいるのか分からない」——
そんな場面で、いきなりサーバーを再起動していませんか?

fuserコマンドを使えば、ファイルやディレクトリ、さらにはTCP/UDPポートを占有しているプロセスを一発で特定できます。
必要ならそのプロセスにシグナルを送って終了させることも可能です。

この記事では、RHEL 9.4 / Ubuntu 24.04 LTSで動作確認した上で、fuserコマンドの実践的な使い方を解説します。
umount時のbusyエラー解消、ポート占有プロセスの特定、安全なプロセス終了まで、現場で使う場面を一通りカバーします。

この記事のポイント

・fuser /mnt でマウントポイントを掴むプロセスを特定できる
・fuser -v でユーザー・コマンド名付きの詳細表示になる
・fuser -k -TERM /mnt でプロセスにSIGTERMを送って終了できる
・fuser 80/tcp でポート占有プロセスを特定できる(要root)


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

なぜfuserコマンドが必要なのか?

umountしようとして「target is busy」、httpdを起動しようとして「Address already in use」——
これらはいずれも、あるリソース(ファイル・ディレクトリ・ポート)を別のプロセスが占有していることが原因です。

psやtopではプロセス一覧は見られますが、「どのプロセスが/var/logを掴んでいるのか」までは分かりません。
そこで登場するのがfuserコマンドです。

fuserはpsutilsパッケージ(Ubuntu)またはpsmiscパッケージ(RHEL系)に含まれており、
ほぼ全てのLinuxディストリビューションに標準で入っています。

ファイル/ディレクトリの占有確認:umount時やディスクメンテナンス時に必須
ポート占有確認:サービス起動前に競合プロセスを特定
プロセス強制終了:-kオプションで一括kill可能

似たコマンドとしてlsofがありますが、fuserは「このリソースを誰が使っているか」に特化しており、出力がシンプルで素早い判断に向いています。
より詳細な情報が必要な場合はLinux ポート確認の全コマンドも併せて参照してください。

基本的な使い方

1. ファイル・ディレクトリを使用中のプロセスを確認する

最もよく使うのが、あるディレクトリを掴んでいるプロセスの確認です。

# /mnt を使用中のプロセスを表示 fuser /mnt # 実行結果の例 /mnt: 2841c 2841e 3127c

出力の数字の後ろに付くアルファベットは「アクセス種別」を表します。

c:カレントディレクトリ(cd /mnt している)
e:実行中の実行ファイルがそこにある
f:ファイルをopen中(通常表示されない)
r:ルートディレクトリ(chroot)
m:mmapまたは共有ライブラリ

プロセスIDだけ見てもコマンド名が分からないので、次の-vオプションを併用するのが実務的です。

2. -v オプションで詳細表示する

# 詳細表示(USER・PID・ACCESS・COMMAND) fuser -v /mnt # 実行結果の例 USER PID ACCESS COMMAND /mnt: root 2841 ..c.. bash apache 3127 ..c.. httpd

USER列でどのユーザーが掴んでいるか、COMMAND列でコマンド名がわかるため、調査の9割はこの-vで済みます。

3. ディレクトリ配下を再帰的にチェックする

ディレクトリそのものだけでなく、配下のファイル全てをまとめて確認したい場合は-mオプションを使います。

# /mnt 配下のマウント全体を使用しているプロセスを表示 fuser -vm /mnt # 実行結果の例(/mntにマウントされたFS全体を掴む全プロセス) USER PID ACCESS COMMAND /mnt: root kernel mount /mnt root 2841 ..c.. bash apache 3127 ..c.. httpd root 4521 F.... tail

-mはumount前の調査に最も役立つオプションです。対象ファイルシステム全体を掴むプロセスを漏れなく拾えます。

なおマウント関連の基本操作はmount コマンドの使い方を参照してください。

umount時の「target is busy」を解消する実践手順

現場で最も頻出するのがこのケースです。NFSやUSB、ループバックデバイスをumountしようとして失敗する時の対処を順に見ていきます。

1. まずは誰が掴んでいるかを特定する

# umountが失敗する umount /mnt/nfs # umount: /mnt/nfs: target is busy. # fuserで原因プロセスを特定 fuser -vm /mnt/nfs

ここでバックグラウンドジョブやログ監視のtailが残っているケースが非常に多いです。

2. プロセスを安全に終了させる

業務プロセスでない(バッチ残骸・ゾンビ・デバッグ残り)と確認できたら、SIGTERMで終了させます。

# SIGTERM(デフォルト)で穏やかに終了させる fuser -k -TERM -m /mnt/nfs # SIGTERMで止まらない場合のみ、SIGKILLを使う fuser -k -KILL -m /mnt/nfs

注意:-kオプションは指定リソースを掴む全プロセスに一括でシグナルを送ります。重要プロセスまで巻き込む可能性があるため、必ず先に-vで確認してから実行してください。

3. 対話モードで確認しながらkillする

本番サーバーでは、1プロセスずつ確認しながら終了させる-i(interactive)オプションが安全です。

# 対話的に「このプロセスをkillしますか?」と確認してくれる fuser -k -i -TERM -m /mnt/nfs # 実行結果の例 USER PID ACCESS COMMAND /mnt/nfs: root 4521 F.... tail Kill process 4521 ? (y/N) y

-iは業務中のサーバーでfuser -kを使う時の事実上の必須オプションです。

4. それでもumountできない場合はlazy unmount

プロセスをkillしても解消しないケース(NFSサーバー側が落ちている等)では、umount -l(lazy unmount)でマウントを切り離せます。

# 参照している全プロセスがファイルを閉じた時点でumountされる umount -l /mnt/nfs

ただし-lは「見えなくするだけ」で、内部ではまだマウントが継続しています。可能な限りfuser -kで根本解決してから通常umountを試みてください。

ポート占有プロセスを特定する(fuser n/tcp)

fuserはTCP/UDPポートを掴むプロセスも調査できます。httpdやnginxを起動しようとして「Address already in use」が出た時の定番の使い方です。

# 80/tcp を使っているプロセスを特定(root権限が必要) sudo fuser -v 80/tcp # 実行結果の例 USER PID ACCESS COMMAND 80/tcp: root 1823 F.... nginx nginx 1824 F.... nginx nginx 1825 F.... nginx

ポイント:
・ポート指定には必ずroot権限(sudo)が必要です
・80/tcp のように「ポート番号/プロトコル」で指定します
・UDPなら 53/udp、IPv6は特に指定不要(自動的に含まれる)

ポート番号での調査はssやlsofでも可能ですが、fuserは「そのポートを掴むプロセス」を最短で特定できます。

応用・実務Tips

デバイスファイル指定でブロックデバイスを調査

/dev/sdb1 などのブロックデバイスを直接指定すると、そのデバイスを使っているプロセスが分かります。

# /dev/sdb1 を使用中のプロセスを確認 sudo fuser -v /dev/sdb1

ディスク交換前やLVMリサイズ前のチェックに有効です。

SIGHUPでサービスを再起動させる

killの代わりにSIGHUPを送ることで、多くのデーモンを設定再読込させられます。

# /etc/nginx/nginx.conf を開いているnginxにSIGHUPを送る sudo fuser -k -HUP /etc/nginx/nginx.conf

lsofとの使い分け

やりたいこと コマンド
指定リソースを掴むプロセスを素早く特定 fuser -v /mnt
プロセスに直接killシグナルを送る fuser -k -TERM -m /mnt
あるプロセスが開いている全ファイルを一覧 lsof -p PID
削除済みだが開かれたままのファイルを探す lsof +L1
fuserは「リソース→プロセス」の方向に特化、lsofは「プロセス→開いているもの全て」を見るのに向いています。

「fuser: command not found」が出た時の対処法

最近のミニマルなコンテナイメージやクラウドVMでは、fuserがデフォルトで入っていない場合があります。

# RHEL / Rocky Linux / AlmaLinux / CentOS系 sudo dnf install psmisc # Ubuntu / Debian系 sudo apt install psmisc

pstree、killallと同じpsmiscパッケージに含まれているので、1コマンドで揃います。

「Specified filename /xxx does not exist」

fuserに存在しないファイルパスを指定するとこのエラーになります。typoの可能性が高いですが、
シンボリックリンクの先が消えているケースもあります。ls -lで実体を確認してください。

root以外でポート指定した時の「Cannot stat」

ポート番号指定での調査にはroot権限が必須です。一般ユーザーで実行すると、他ユーザーのプロセス情報が見えずに不完全な結果になります。必ずsudoを付けてください。

本記事のまとめ

fuserコマンドは「誰がこれを掴んでいるのか?」を一発で答えてくれる、トラブル対応の必須ツールです。
20年以上サーバー運用を続けてきた経験から言うと、umount失敗やポート競合の9割はfuser -vで原因が分かります。
再起動やlazy unmountに逃げる前に、まずfuserで原因プロセスを可視化する習慣をつけてください。
やりたいこと コマンド
ディレクトリを掴むプロセスを表示 fuser -v /mnt
マウントポイント配下を全て調査 fuser -vm /mnt
対話的にプロセスを終了させる fuser -k -i -TERM -m /mnt
ポート占有プロセスを特定 sudo fuser -v 80/tcp
設定ファイルを開くデーモンにSIGHUP sudo fuser -k -HUP /etc/nginx/nginx.conf
パッケージインストール(RHEL系) sudo dnf install psmisc

「target is busyに焦らず対処できる自信がありますか?」

fuserは現場で頻発するトラブルに即効性のあるコマンドですが、本当に重要なのはその先です。マウント設計、プロセス管理、ポート運用まで、原因を最短で切り分けて直せる体系的な知識が実務の自信につながります。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。