当一个文件被删除后:
1.使用lsof查看是否有进程正在使用,不要重启此进程
2.找到打开此文件的pid及对应的文件描述符
3.进入/proc/进程号/fd/目录中
4.通过对应文件描述符恢复文件并立即重载/重启该进程
cat 6 > /var/log/messages;systemctl restart rsyslog
如果lsof查找不到,就不能使用此方法
示例:
下载lsof工具
# yum install lsof -y
查询是否有进程在使用secure
# lsof | grep secure
# lsof | grep secure //如果没有就不要继续下面的
7663是他的进程号,7w里面的7是句柄数,w是描述符。
rsyslogd 7663 root 7w REG 253,0 4996 33607855 /var/log/secure in:imjour 7663 7665 root 7w REG 253,0 4996 33607855 /var/log/secure rs:main 7663 7666 root 7w REG 253,0 4996 33607855 /var/log/secure
试着删除他,因为刚刚有进程在使用他,所以还在内存里面保存着,这时候不能重启系统和这个进程,重启就是释放内存里面的数据,就找不回了。
# rm -rf /var/log/secure
查看这个句柄里面的内容
# cat /proc/7663/fd/7
把这个内存里面的内容读取到原来的位置,并重启这个进程
# cat /proc/7663/fd/7 > /var/log/secure;systemctl restart rsyslog
# 查看是否成功