zoukankan      html  css  js  c++  java
  • 误删重要文件后要肉定

      有时候手贱,一不小心输入rm -rf *,手一抖,如果没有重要文件还好,如果有,也要肉定。

      对于linux系统来说,有如下两个重要特征:

    1. 正在被进程open的文件,使用rm命令删除后,其在文件系统上的空间不会被真正释放;直到没有任何进程open这个文件(进程退出时,自动close打开的文件)。
    2. ext3文件系统,rm命令删除的文件,其内容不会被自动清除,仅删除了元数据。

    上面两点和主题有何关系?                                           

    你手贱,你删除一个重要文件~

    1 首先用lsof命令看是否有程序打开了该文件

    COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
    atop 17365 root 4w REG 8,8 1701448 2970 /var/log/atop/atop_atae-mo-slot1_20690318 (deleted)
    如果有,恭喜你,执行 cp -Lv /proc/进程id/fd/文件描述符 /some/dir/可恢复。
    下面示例,可以理解一下。
    atae-mo-slot1:~ # ll /proc/17365/fd
    total 5
    lr-x------ 1 root root 64 2069-03-18 12:29 0 -> /dev/null
    l-wx------ 1 root root 64 2069-03-18 12:29 1 -> /var/log/atop/daily.log
    l-wx------ 1 root root 64 2069-03-18 12:29 2 -> /var/log/atop/daily.log
    lr-x------ 1 root root 64 2069-03-18 12:29 3 -> /tmp/atop.d/atop.acct
    l-wx------ 1 root root 64 2069-03-18 12:29 4 -> /var/log/atop/atop_atae-mo-slot1_20690318 (deleted)
    atae-mo-slot1:~ # cp -Lv /proc/17365/fd/4 /tmp/test
    `/proc/17365/fd/4' -> `/tmp/test'
    atae-mo-slot1:~ # ll /tmp/test
    -rw-r--r-- 1 root root 1712574 2069-03-18 12:34 /tmp/test

    2 fuser -m /dirname                   

      如果你没有那么幸运,也要淡定,立刻停止写该分区的进程,fuser -m /dirname可查看哪些进程打开了该目录所在分区的文件。具体看帮助。

      umount文件所在的分区,千万不要在该文件系统中新增文件,否则会覆盖删除的文件,无法恢复了。
    ext3文件系统可用附件的ext3grep命令(suse10 64bit系统可用)恢复,开源的东东,具体可google。
    具体恢复多少,看命了。
    ext3grep /dev/sdc1 --ls --inode 2
    ext3grep /dev/sdc1 --restore-file filename

  • 相关阅读:
    Java——enum与int的转换——转载
    Java——JScrollPane设置透明——转载
    Java——JFrame与JButton添加背景
    Java——模态对话框
    u-boot_2010.6 nandflash驱动彻底分析
    linux 常用命令整理----权限管理
    linux 常用命令整理----链接文件
    linux 常用命令整理----文件操作
    linux 常用命令整理----目录操作
    linux 进程运行状态
  • 原文地址:https://www.cnblogs.com/people/p/3342700.html
Copyright © 2011-2022 走看看