※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

オープン中のファイルをしりたい場合には、lsofコマンドを使えばよい。
オプションなしで実行すると、全プロセス(実行ユーザが所有するプロセスのみ)のオープンしているファイルを表示する。
以下のようなオプションでフィルタすることができる。

1.指定したPIDのプロセスがオープンしているファイル
 lsof -p プロセスID

2.指定したプロセス名のプロセスがオープンしているファイル
 lsof -c プログラム名

3.指定したユーザーで起動されたプロセスがオープンしているファイル
 lsof -u ユーザー名

また、オプションの値の前に'^'を付けると、指定した値以外の意味になる。
例えば「bash」意外のプログラムがオープンしているファイルを表示する場合は以下のようにする。
 lsof -c ^bash

複数のオプションを指定すると、or条件となるようで、オプションの最初に-aを付けるとand条件となる。
例えばユーザー「user1」でプログラム名「bash」がオープンしているファイルは以下のようにする。
 lsof -a -u user1 -c bash

lsofは普通のFDをもつファイル以外にも、プロセスがリンクしているライブラリや実行ファイルなども表示されてしまう。
lsofはFDでもフィルタリングができ、共有ライブラリなどはlsofでみるとFDがmemなどと表示される。
そのような特殊なFDになにがあるかは説明が見当たらない。
「lsof -F f」で使われているFDを表示できるので、rootで実行してみた。
すると、数字以外では以下のFDが表示された。
 DEL、cwd、mem、rtd、txt
なので、これらをフィルタリングして除くと数字のFDでオープンされているファイルがわかる。
ためしに以下を実行してみた。0,1,2は標準入出力、エラー出力で、255は調べてみるとbashが使用しているttyへのコネクションだそう。
 $ lsof -a -p 3265 -d ^DEL -d ^cwd -d ^mem -d ^rtd -d ^txt
 COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
 bash    3265 testuser    0r   CHR  136,2      0t0    5 /dev/pts/2
 bash    3265 testuser    1u   CHR  136,2      0t0    5 /dev/pts/2
 bash    3265 testuser    2u   CHR  136,2      0t0    5 /dev/pts/2
 bash    3265 testuser  255u   CHR  136,2      0t0    5 /dev/pts/2

ちなみに、プロセスがオープンしている数字のFDに何があるかは、以下を見るとよい。
 /proc/<調べたいプロセスのPID>/fd

例えば、上記例で満たPID=3265でみてみると、たしかに0,1,2,255が見つかる。
 $ ls /proc/3265/fd
 0  1  2  255

逆に、ファイル名から使用しているプロセスやFDがしりたい場合は、しりたいファイルやディレクトリを指定する。
なお、ファイル名から使用しているプロセス名がしりたい場合は、fuserコマンドも使える。

 $ lsof /proc
 COMMAND    PID     USER   FD   TYPE DEVICE SIZE/OFF       NODE NAME
 gnome-pow 1960 testuser   17u   REG    0,3        0 4026532013 /proc/stat
 nautilus  1989 testuser   30r   REG    0,3        0      98412 /proc/1989/mountinfo
 bash      3265 testuser  cwd    DIR    0,3        0     534062 /proc/3265/fd
 lsof      3929 testuser  cwd    DIR    0,3        0     534062 /proc/3265/fd
 lsof      3929 testuser    3r   DIR    0,3        0          1 /proc
 lsof      3929 testuser    6r   DIR    0,3        0     850443 /proc/3929/fd
 lsof      3930 testuser  cwd    DIR    0,3        0     534062 /proc/3265/fd


名前:
コメント: