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

書式

fuser [-a|-s] [-n space] [-signal] [-kimuv] name ... [-] [-n space] [-signal] [-kimuv] name ...
fuser -l
fuser -V

説明

fuser は,引数としてわたされたファイルやファイルシステムを使用しているプロ セスの PID を表示する。デフォルトの表示モードでは、それぞ れのファイル名の後に、アクセスの形式を示す以下の文字が表示される:
c
カレントディレクトリ。
e
実行中のファイル。
f
オープンしているファイル。 f はデフォルトの表示モードで は省略される。
r
ルートディレクトリ。
m
mmap されたファイルか共有ライブラリ。

引数としてわたされたファイルが一つもアクセスされていないときや、致命的 なエラーが発生した場合には、 fuser は 0 以外の値を返す。引数とし て指定したファイルがどれかひとつでもアクセスされていれば、 fuser はゼロを返す。

TCP と UDP のソケットを使用しているプロセスを探す場合には、名前空間を -n オプションによって選択しなければならない。このオプションを用 いれば、ソケットはローカルとリモートのポート、およびリモートのアドレス によって指定できる (複数のソケットを指定することもできる)。すべてのフィー ルドは省略可能であるが、省略したフィールドの前にはコンマを置かなければ ならない。

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

IP アドレスにもポート番号にも、シンボルによる記述と数値による記述の両 方が可能である。

オプション

-a
コマンドラインで渡されたすべてのファイルを表示する。デフォルトでは、一 つ以上のプロセスからアクセスされているファイルのみが表示される。
-k
指定したファイルにアクセスしているプロセスを kill する。 -signal で変更しなければ SIGKILL が送られる。 fuser プロセスは自分自身を kill することはできないが、他の fuser プロ セスを kill することはできる。 fuser を実行しているプロセスの実 効ユーザー ID は、 kill を行う前に、その実ユーザー ID にセットされる。
-i
プロセスを kill する前にユーザーに確認する。 このオプションは、-k オプションが指定されていない時には無視される。
-l
使用できる signal すべてをリストアップする。
-m
filename には、マウントされたファイルシステム上のファイルか、マウ ントされたブロックデバイスを指定する。そのファイルシステム上のファイル にアクセスしているすべてのプロセスが表示される。ディレクトリファイルが 指定されると、それは自動的に name/. に変換され、そのディレクトリ にマウントされているファイルシステムが用いられるようになる。
-n space
別の名前空間を選択する。サポートされている名前空間は、 file (ファ イル名。これがデフォルト), udp (ローカルの UDP ポート), tcp (ローカルの TCP ポート) である。ポートの指定には、ポート番号 とシンボル名の両方が使える。重複がなければ、省略記法 name/space (例えば name/proto) を用いることも できる。
-s
表示を抑制する。 -u, -v はこのモードでは無視される。 -a オプションは -s オプションと同時に使ってはならない。
-signal
プロセスを kill する時に、 SIGKILL 以外のシグナルを指定する。シグナル の指定は名前 (例: -HUP) 数字 (例: -1) のどちらでも良い。
-u
それぞれの PID にプロセスの所有者名を追加する。
-v
饒舌 (verbose) モード。プロセスは ps のような形式で表示される。 PID, USER, COMMAND の各フィールドは,ps と同じような内容である。 ACCESS は、プロセスがどのようにファイルへアクセスしているかを示す。 アクセスがカーネルによって行われている場合 (たとえばマウントポイントや スワップファイルなど) には、 PID の代わりに kernel と表示される。
-V
バージョン情報を表示する。
-
すべてのオプションをリセットし、送るシグナルを SIGKILL にセットする。

ファイル

/proc   location of the proc file system
/proc   proc ファイルシステムの場所

fuser -km /home は、 /home ファイルシステムにアクセスしている すべてのプロセスを kill する。

if fuser -s /dev/ttyS1; then :; else something; fi は、 他のプロセスが /dev/ttyS1 を使っていない場合に限って something を実行する。

fuser telnet/tcp は、(ローカルの) TELNET ポートにアクセスしている すべてのプロセスを表示する。

制限

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

同一のオブジェクトがコマンドラインで二回以上指定されても、 それらのエントリは無視される。

ルート権限で実行しない限り、 fuser が得ることのできる情報は 部分的なものである。したがって、他のユーザーのプロセスによってオープンされた ファイルは表示されないし、実行ファイルは mapped に分類されるだけになるだろう。

情報が部分的にしか得られないことによって生じるこの問題は、 fuser を root に SUID してインストールすれば避けることができるだろう。 しかしこの方法は、セキュリティやプライバシーの理由から望まれないことが 多いだろう。

udptcp の名前空間と UNIX ドメインソケットは、 1.3.78 より古いカーネルでは見つけることができない。

udptcp は、現在のところ IPv4 でしか動作しない。

カーネルによるアクセスは -v オプションをつけないと表示されない。

-k オプションはプロセスにしか有効でない。ユーザーが kernel の 場合、 fuser はそれなりの助言を表示するだろうが、それ以上の 動作は行わない。

著者

Werner Almesberger <[email protected]>