名前

fuser - ファイルやソケットを使用しているプロセスを特定する

書式

fuser [-fuv] [-a|-s] [-4|-6] [-c|-m|-n space] [ -k [-i] [-M] [-w] [-SIGNAL] ] name ...
fuser -l
fuser -V

説明

fuser は、指定されたファイルまたはファイルシステムを使用しているプロセスの PID を表示します。 デフォルトの表示モードでは、それぞれのファイル名の後に、アクセスの形式を示す以下の文字が表示されます。

c

カレントディレクトリ。

e

実行中のファイル。

f

オープンしているファイル。 f はデフォルトの表示モードでは省略されます。

F

書き込み用としてオープンしているファイル。 F はデフォルトの表示モードでは省略されます。

r

ルートディレクトリ。

m

mmap されているファイルまたは共有ライブラリ。

.

プレースホルダー。 デフォルトの表示モードでは省略されます。

指定されたファイルのどれに対してもアクセスがない場合、あるいは致命的なエラーが発生した場合、 fuser はゼロ以外のコードを返します。 ファイルへのアクセスが 1 つでもあれば、 fuser はゼロを返します。

TCP と UDP ソケットを使用するプロセスを探すには、-n オプションを用いてそれぞれの名前空間を選択しておく必要があります。 デフォルトで fuser は IPv6 と IPv4 の両方のソケットを探します。 このデフォルトの動作を変えるには -4 または -6 オプションを用います。 ソケットの指定には、ローカルやリモートのポート、あるいはリモートのアドレスを用いることができます。 フィールドはすべて任意指定ですが、指定しないフィールドの前にはカンマを記述する必要があります。

[lcl_port][,[rmt_host][,[rmt_port]]]

IP アドレスとポート番号には、シンボルによる記述、数値による記述の両方を用いることができます。

fuser の出力のうち PID だけは stdout に出力され、これ以外は stderr に出力されます。

オプション

-a, --all

コマンドライン上に指定されたファイルをすべて表示します。 デフォルトでは、最低でも 1 つのプロセスからアクセスされているファイルしか表示されません。

-c

-m オプションと同様。 POSIX との互換性のために用いられます。

-f

単に無視されます。 POSIX との互換性のために用いられます。

-k, --kill

ファイルにアクセスしているプロセスを kill します。 -SIGNAL を使って変更しない限り、 SIGKILL が送信されます。 fuser が自身のプロセスを kill することはありませんが、 別の fuser プロセスであれば kill します。 fuser を実行しているプロセスの実質的なユーザー ID は、 実際のユーザー ID にセットされてから kill 処理が行われます。

-i, --interactive

プロセスを kill する前にユーザーへの確認を行います。 このオプションは -k オプションがともに指定されていなければ無視されます。

-I, --inode

名前空間 file においては、 指定されたファイルの比較は i ノードに基づいて行われます。 たとえネットワークベースのファイルシステムであっても、 ファイル名に基づいた比較は行われません。

-l, --list-signals

使用できる signal をすべて一覧表示します。

-m NAME, --mount NAME

NAME には、マウントされたファイルシステム上のファイルか、またはマウントされているブロックデバイスを指定します。 そのファイルシステム上のファイルにアクセスしているプロセスがすべて一覧表示されます。 ディレクトリが指定された場合は、自動的に name/ に変換されます。 そして、そのディレクトリにマウントされているファイルシステムが対象になります。

-M, --ismountpoint

NAME がマウントポイントを表している場合にのみ、処理実行されます。 NAME がファイルシステムを示していなかった場合に、マシンを破壊しかねないため、本オプションは極めて重要です。

-w

書き込みアクセスを行っているプロセスのみ kill します。 このオプションは -k オプションがともに指定されていなければ無視されます。

-n NAMESPACE, --namespace NAMESPACE

別の名前空間を選択します。 名前空間は file (デフォルトでファイル名のこと), udp (ローカルの UDP ポート), tcp (ローカルの TCP ポート) がサポートされています。 ポートの指定にあたっては、ポート番号かシンボル名を用いることができます。 あいまいな指定にならなければ name/space (つまり 80/tcp) といったように短く記述することもできです。

-s, --silent

表示を行いません。 このモードにおいて -u-v のオプションは無視されます。 -a オプションは -s オプションと同時に使うことはできません。

-SIGNAL

プロセスを kill するシグナルとして SIGKILL ではない、指定したシグナルを用います。 シグナルの指定は、その名前 (たとえば -HUP) か番号 (たとえば -1) を用いることができます。 このオプションは -k オプションがともに指定されていなければ無視されます。

-u, --user

プロセスの所有者であるユーザー名を、各 PID に追加します。

-v, --verbose

詳細 (verbose) モード。 プロセス表示は ps のような形式で行われます。 PID, USER, COMMAND の各項目は ps の場合と同様です。 ACCESS は、プロセスがどうようにしてファイルにアクセスしているかを示します。 詳細モードではさらに、マウントポイント、knfs エクスポート、スワップファイルとしてファイルがアクセスされている場合にそれを表示します。 この場合は PID の代わりに kernel が表示されます。

-V, --version

バージョン情報を表示します。

-4, --ipv4

IPv4 ソケットのみを検索します。 このオプションは -6 オプションと同時に用いることはできません。 また名前空間を tcp または udp にしていなければ動作しません。

-6, --ipv6

IPv6 ソケットのみを検索します。 このオプションは -4 オプションと同時に用いることはできません。 また名前空間を tcp または udp にしていなければ動作しません。

ファイル

/proc

proc ファイルシステムがあるディレクトリ。

fuser -km /home

ファイルシステム /home にアクセスしているプロセスすべてを、強制的に kill します。

if fuser -s /dev/ttyS1; then :; else command; fi

/dev/ttyS1 を利用するプロセスがない場合に command を実行します。

fuser telnet/tcp

(ローカルの) TELNET ポートにアクセスしているプロセスを一覧表示します。

制限

同一のファイルやファイルシステムに対して、 同じ方法で複数回アクセスしているものは、 1 つだけ表示されます。

同一のオブジェクトがコマンドラインから複数指定されても、 その入力は無視される場合があります。

fuser をルート権限で実行していないと、 fuser は部分的な情報しか取得することができません。 したがって他のユーザーのプロセスからオープンしているファイルは表示されません。 また実行ファイルは mapped に分類されるだけです。

fuser は、 ファイル記述子テーブルを参照する権限のないプロセスについて、 報告をすることはできません。 一般にこの問題がよく発生するのは、 root 以外のユーザーによって fuser を実行して、 TCP ソケットや UDP ソケットを探すときです。 この場合 fuser はアクセスがないと報告します。

fuser を SUID ルートによりインストールしていれば、 部分的な情報しか得られない問題は回避できます。 ただしセキュリティやプライバシー上の理由から、 好ましくない場合があります。

udptcp の名前空間、 および UNIX ドメインソケットは、 カーネルバージョンが 1.3.78 よりも古い場合には検索できません。

カーネルによるアクセスは -v オプションをつけた場合だけ表示されます。

-k オプションはプロセスに対してのみ動作します。 ユーザーがカーネルであった場合、fuser からはアドバイスが表示されるだけで、それ以上の処理は行われません。

バグ

fuser -m /dev/sgX は、 すべてのプロセスを表示します (-k フラグをつければ kill します)。 これはそのデバイスを設定していなくても可能です。 デバイスの中には、 設定を行うものもあるかもしれません。

マウントオプション -m は、 同一デバイス内において、 指定したファイルに一致したものすべてを対象とします。 マウントポイントのみを指定するのであれば、 -M オプションも同時に用いてください。

関連項目

kill(1), killall(1), lsof(8), pkill(1), ps(1), kill(2).