资讯

展开

lsof命令恢复打开但被删除的文件

作者:快盘下载 人气:

在linux下,一切皆文件。

再linux下文件删除了。但是被某个进程打开,句柄还没有释放,文件其实还是没有被删除的 。


lsof |grep deleted
Xorg      1131 root  125u      REG                0,5        4      61026 /memfd:xshmfence (deleted)
Xorg      1131 root  126u      REG                0,5        4      62913 /memfd:xshmfence (deleted)
Xorg      1131 root  129u      REG                0,5        4      74609 /memfd:xshmfence (deleted)


恢复打开但被删除的文件

前面我们可以找到被删除但是仍然被打开的文件,实际上文件并没有真正的消失,如果是意外被删除的,我们还有手段恢复它。以/var/log/syslog文件为例,我们先删除它

rm /var/log/syslog


然后使用lsof查看那个进程打开了该文件:

$ lsof |grep syslog
rs:main    993 1119           syslog    5w      REG               8,10     78419     528470 /var/log/syslog (deleted)


可以找到进程id为993的进程打开了该文件,我们知道每个进程在/proc下都有文件描述符打开的记录:

$ ls -l /proc/993/fd
lr-x------ 1 root   root   64 3月   5 18:30 0 -> /dev/null
l-wx------ 1 root   root   64 3月   5 18:30 1 -> /dev/null
l-wx------ 1 root   root   64 3月   5 18:30 2 -> /dev/null
lrwx------ 1 root   root   64 3月   5 18:30 3 -> socket:[15032]
lr-x------ 1 root   root   64 3月   5 18:30 4 -> /proc/kmsg
l-wx------ 1 root   root   64 3月   5 18:30 5 -> /var/log/syslog (deleted)
l-wx------ 1 root   root   64 3月   5 18:30 6 -> /var/log/auth.log


这里就找到了被删除的syslog文件,文件描述符是5,我们把它重定向出来:


$ cat /proc/993/fd/5 > syslog
$ ls -al /var/log/syslog
-rw-r--r-- 1 root root 78493 3月   5 19:22 /var/log/syslog

这样我们就恢复了syslog文件。



加载全部内容

相关教程
猜你喜欢
用户评论
快盘暂不提供评论功能!