http://www.serverwatch.com/tutorials/article.php/3822816/Recovering-Deleted-Files-With-lsof.htm

One of the more neat things you can do with the versatile utility lsof is use it to recover a file you've just accidentally deleted.

Tip of the Trade: Accidentally deleted files are easily recovered with lsof.

A file in Linux is a pointer to an inode, which contains the file data (permissions, owner and where its actual content lives on the disk). Deleting the file removes the link, but not the inode itself – if another process has it open, the inode isn't released for writing until that process is done with it.

To try this out, create a test text file, save it and then type less
test.txt
. Open another terminal window, and type rm
testing.txt
. If you try ls testing.txt you'll get an
error message. But! less still has a reference to the file. So:

> lsof | grep testing.txt
less 4607 juliet 4r REG 254,4 21
8880214 /home/juliet/testing.txt (deleted)

The important columns are the second one, which gives you the PID of the process that has the file open (4607), and the fourth one, which gives you the file descriptor (4). Now, we go look in /proc, where there will still be a reference to the inode, from which you can copy the file back out:

> ls -l /proc/4607/fd/4
lr-x------ 1 juliet juliet 64 Apr 7 03:19
/proc/4607/fd/4 -> /home/juliet/testing.txt (deleted)
> cp /proc/4607/fd/4 testing.txt.bk

Note: don't use the -a flag with cp, as this will copy the (broken) symbolic link, rather than the actual file contents.

Now check the file to make sure you've got what you think you have, and you're done!

最新文章

  1. 项目游戏开发日记 No.0x00000
  2. linux升级openssl
  3. PHP代码审计中你不知道的牛叉技术点
  4. 触动——beyond歌词
  5. gitlb gerrit jenkins CI整合调试
  6. DataGridView 的cell赋值没有线程间访问的限制吗?
  7. unix文件权限
  8. Hadoop课程介绍
  9. 十进制和n进制的转换(10进制转换为36进制)
  10. 自构BeanHandler(用BeansUtils)
  11. Java学习之DAO设计模式
  12. 懵懵懂懂初识J2EE
  13. 学习笔记TF041:分布式并行
  14. PHP消息队列实现及应用
  15. Http_4个新的http状态码:428、429、431、511
  16. 洛谷P3369 普通平衡树
  17. python基础学习(六)函数基础
  18. mosquitto centos安装配置
  19. shell脚本-删除当天日期前3个月的数据表
  20. linux c server and client 简单的通信

热门文章

  1. python元组,集合类型,及字典补充
  2. vi快速查找
  3. LuoGu P1541 乌龟棋
  4. Confluence 6 手动运行和修改
  5. linux之各目录作用
  6. Git 在webstrom上安装git
  7. LeetCode(93): 复原IP地址
  8. html 基本指令
  9. 小学生都看得懂的C语言入门(6): 字符串
  10. Nginx详解十七:Nginx深度学习篇之动静分离