ど忘れしていたのでメモです。
LinuxでApacheのログローテート時に、プロセスをgracefulしたつもりが何らかの原因によりできていなくて、その後古いログファイルを圧縮して、いらなくなったその生ログファイルをrmしたつもりが、プロセスはそのログファイルのinodeを掴みっぱなしになっていて、古いログファイルにログを吐き続けていて困ったみたいな事があると思います。
その場合に、そのまま古いログファイルに吐き出さされているログをもう一度参照したいこともあります。差分がでてしまいますからね。
これinodeは掴みっぱなしだし、ディレクトリエントリからファイル名は消えているけど、fdもわかるから簡単にファイル内容取得できるはずだけどどうやるんだったかなーと思って試していたら、非常に簡単に取得できましたというメモです。
対象のプロセスからPIDを取得して、
ls -l /proc/PID/fd/
をして、rmしたつもりのファイルが(deleted)になっているのを確認し、そのfdの番号に対して、
cp /proc/PID/fd/${fdの番号} old_log_file
とかしてやると、rmしたつもりのファイルにrm後も継続して吐き出されているログを無事得る事ができました。
めでたしめでたし。