2007-04-09

Linuxで動作中のプロセスがどのファイルを開いているか知る方法

運用中のシステムで、運用上の都合によりファイルを削除したい時とか、移動したいとき。
動作中のプロセスが使っているファイルに触らない方が良いのは自明。
でも、どのファイルが今まさに使われているのか知るにはどうしたらいいのだろう。

実は Linuxの /proc ファイルシステムに情報がある。

たまたま手元のホストで MySQLがプロセス番号 4316として動作中なのでそれを例にとろう。

cd /proc/4316/fd

このディレクトリには4316番のプロセスが使用しているファイルディスクリプタが投影されている。中身をみてみよう。

# ls -l
lr-x------ 1 root root 64 Apr 9 00:54 0 -> /dev/null
l-wx------ 1 root root 64 Apr 9 00:54 1 -> /usr/local/var/aeka.err
lrwx------ 1 root root 64 Apr 9 00:54 10 -> /usr/local/var/ib_logfile1
l-wx------ 1 root root 64 Apr 9 00:54 11 -> /usr/local/var/mysql-bin.000055
(略)
lrwx------ 1 root root 64 Apr 9 00:54 26 -> /usr/local/var/mysql/procs_priv.MYD
lrwx------ 1 root root 64 Apr 9 00:54 3 -> /usr/local/var/mysql-bin.index
lrwx------ 1 root root 64 Apr 9 00:54 4 -> /usr/local/var/ibdata1
lrwx------ 1 root root 64 Apr 9 00:54 5 -> /tmp/ibeOA5lt (deleted)
lrwx------ 1 root root 64 Apr 9 00:54 6 -> /tmp/ibPbPkSe (deleted)
lrwx------ 1 root root 64 Apr 9 00:54 7 -> /tmp/ibiyDAo0 (deleted)
lrwx------ 1 root root 64 Apr 9 00:54 8 -> /tmp/ibTg0jXL (deleted)
lrwx------ 1 root root 64 Apr 9 00:54 9 -> /usr/local/var/ib_logfile0

少なくともここにリストアップされているファイルは、MySQLによってオープンされているので削除やら移動やらをしてはいけないということになる。(もちろんこういうものはプログラムが動作している限り刻一刻と変化するので参考のひとつとして考えるべき)

この情報は、誰かの作ったプログラムを他の場所へ移して実行したい場合に、実行バイナリ以外に一体どんなファイルを必要としているのかを調べるために参照することも有用だ。

0 件のコメント:

コメントを投稿

<< ホーム