加微信:fuye-waiwang;免费试用梯子;副业承诺不收一毛佣金。
首先声明:lsof只能恢复哪些文件系统正在处理的,就是系统对其是打开状态的文件。
比如你自己删除一个txt文件,是很难恢复的。
好了,直接上干货
1、比如我建量一个脚本11.sh
#!/bin/bash
while true
do
sleep 1
echo t > test.txt
done
2、系统过来查看脚本运行的信息
~]# lsof|grep 11.sh
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /home/libyadm/.gvfs
Output information may be incomplete.
bash 17936 root 255r REG 253,0 80 134462272 /root/etcd/11.sh
3、删除脚本11.sh;再次查看。
~]# lsof|grep 11.sh
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /home/libyadm/.gvfs
Output information may be incomplete.
bash 17936 root 255r REG 253,0 80 134462272 /root/etcd/11.sh (deleted)
已经是删除状态了。
4、我们恢复这个文件
~]# cd /proc/17936/fd
attr/ cwd/ fd/ fdinfo/ map_files/ net/ ns/ root/ task/
查看
# ll
total 0
lrwx------ 1 root root 64 Nov 26 13:51 0 -> /dev/pts/2
lrwx------ 1 root root 64 Nov 26 13:51 1 -> /dev/pts/2
lrwx------ 1 root root 64 Nov 26 13:51 2 -> /dev/pts/2
lr-x------ 1 root root 64 Nov 26 13:51 255 -> /root/etcd/11.sh (deleted)
lrwx------ 1 root root 64 Nov 26 13:51 6 -> /dev/pts/2
我们这里恢复这个文件内容
cat 255 > /root/etcd/test/11.sh
至此,恢复工作ok量。只要系统一直打开这个文件就好说。比较适合用于数据库,系统日志之类的误删恢复操作。