如何恢复被rm删除的正在使用中的日志文件

doMore 1,046 2020-05-29

如何恢复被 rm 删除的正在使用中的日志文件?(也就是的程序正在往这个日志文件中写日志,但是被不小心删除了),这种情况下,日志文件是不会重新被创建出来的,想要查看应该怎么恢复呢?

根据以上的描述,就引发出另一个问题, rm 删除一个文件,是不是真的就被删除了,占用的空间就被释放了?

其实不是的,在 Linux 中只有当一个文件的引用计数为0的时候,才可能被删除,只要他不是0,就不会被删除。 所以说,问题中说的删除,只不过是文件名到 inode 的链接被删除了。

应该怎么恢复呢?

  1. 查看当前进程 pid
ps -ef | grep <进程名> | grep -v grep | awk '{ print $2 }'
  1. 查看当前进程所有的文件句柄或者直接查看被 '(deleted)'标记的句柄
ll /proc/{pid}/fd
ll /proc/{pid}/fd | grep deleted
# 以下就是一条查出的数据例子
l-wx------ 1 root root 64 5月 29 14:23 134 -> *.log (deleted)
  1. 恢复文件
# 此处的134 需要与上一条命令查出来的 时间之后的数字相一致
cp /proc/18387/fd/134 /**/*.log

注意:这种方法恢复日志文件之后,程序接下来产生的日志并不会写在恢复文件中,只能通过重启程序的方法让日志继续写在该文件。