「オープン中のファイルを調べる」の編集履歴(バックアップ)一覧はこちら
「オープン中のファイルを調べる」(2010/11/29 (月) 22:56:00) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
オープン中のファイルをしりたい場合には、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
オープン中のファイルをしりたい場合には、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
----
#comment()
----