fuser -
ファイルやソケットを使用しているプロセスを特定する
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
してインストールすれば避けることができるだろう。
しかしこの方法は、セキュリティやプライバシーの理由から望まれないことが
多いだろう。
udp と
tcp の名前空間と
UNIX
ドメインソケットは、
1.3.78
より古いカーネルでは見つけることができない。
udp と
tcp
は、現在のところ IPv4
でしか動作しない。
カーネルによるアクセスは
-v
オプションをつけないと表示されない。
-k
オプションはプロセスにしか有効でない。ユーザーが
kernel の 場合、
fuser
はそれなりの助言を表示するだろうが、それ以上の
動作は行わない。
Werner Almesberger <
[email protected]>
kill(1),
killall(1),
ps(1),
kill(2)