linux恢复己删除文件的方法

当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志。有时可以通过lsof来恢复这些文件。

当进程打开了某个文件时,只要该进程保持,打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。

在/proc 目录下,其中包含了反映内核和进程树的各种文件。/proc目录挂载的是在内存中所映射的一块区域,所以这些文件和目录并不存在于磁盘中,因此当我们对这些文件进行读取和写入时,实际上是在从内存中获取相关信息。大多数与lsof 相关的信息都存储于以进程的PID 命名的目录中,即/proc/1234 中包含的是PID 为1234 的进程的信息。每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信息。lsof 程序使用该信息和其他关于内核内部状态的信息来产生其输出。所以lsof 可以显示进程的文件描述符和相关的文件名等信息。也就是我们通过访问进程的文件描述符可以找到该文件的相关信息。

当系统中的某个文件被意外地删除了,只要这个时候系统中还有进程正在访问该文件,那么我们就可以通过lsof从/proc目录下恢复该文件的内容。 假如由于误操作将/var/log/messages文件删除掉了,那么这时要将/var/log/messages文件恢复的方法如下:

首先使用lsof来查看当前是否有进程打开/var/logmessages文件,如下:

 代码如下 复制代码

[root@station90 yum.repos.d]# lsof | grep /var/log/messages

syslogd   2699      root    1w      REG                8,2   480817     330592 /var/log/messages (deleted)

从上面的信息可以看到PID 2699(syslogd)打开文件的文件描述符为 1。同时还可以看到/var/log/messages已经标记被删除了。因此我们可以在/proc/2699/fd/1 (fd下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息,如下:

 代码如下 复制代码

[root@station90 fd]# pwd
/proc/2699/fd
[root@station90 fd]# cat 1 | head -n 5
Jan 13 08:59:02 station90 syslogd 1.4.1: restart.
Jan 13 10:44:22 station90 syslogd 1.4.1: restart.
Jan 13 10:44:22 station90 kernel: klogd 1.4.1, log source = /proc/kmsg started.
Jan 13 10:44:22 station90 kernel: Linux version 2.6.18-164.el5 (mockbuild@x86-003.build.bos.redhat.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Tue Aug 18 15:51:48 EDT 2009
Jan 13 10:44:22 station90 kernel: Command line: ro root=LABEL=/ rhgb quiet

从上面的信息可以看出,查看/proc/2699/fd/1 就可以得到所要恢复的数据。如果可以通过文件描述符查看相应的数据,那么就可以使用 I/O 重定向将其复制到文件中,如:

 代码如下 复制代码

cat /proc/2699/fd/1 > /var/log/messages

在恢复之前,及时touch了/var/log/messages文件也是没有问题的

对于许多应用程序,尤其是日志文件和数据库,这种恢复删除文件的方法非常有用。

其它方法 www.111cn.net

1、Ext2文件系统结构的简单介绍

  在Linux所用的Ext2文件系统中,文件是以块为单位存储的,默认情况下每个块的大小是1K,不同的块以块号区分。每个文件还有一个节点,节点中包含有文件所有者,读写权限,文件类型等信息。对于一个小于12个块的文件,在节点中直接存储文件数据块的块号。如果文件大于12个块,那么节点在 12个块号之后存储一个间接块的块号,在这个间接块号所对应的块中,存储有256个文件数据块的块号(Ext2fs中每个块号占用4字节,这样一个块中所能存储的块号就是1024/4=256)。如果有更大的文件,那么还会在节点中出现二级间接块和**间接块。

2、恢复被误删文件的方法

  大多数Linux发行版都提供一个debugfs工具,可以用来对Ext2文件系统进行编辑操作。不过在使用这个工具之前,还有一些工作要做。

  首先以只读方式重新挂载被误删的文件所在分区。使用如下命令:(假设文件在/usr分区)

  mount –r –n –o remount /usr -r表示只读方式挂载;-n表示不写入/etc/mtab,如果是恢复/etc上的文件,就加上这个参数。如果系统说xxx partion busy,可以用fuser命令查看一下是哪些进程使用这个分区上的文件:

 代码如下 复制代码

  fuser –v –m /usr

  如果没有什么重要的进程,用以下命令停掉它们:

 代码如下 复制代码

  fuser -k –v –m /usr

  然后就可以重新挂载这些文件系统了。

  如果是把所有的文件统一安装在一个大的/分区当中,可以在boot提示符下用linux single进入单用户模式,尽量减少系统进程向硬盘写入数据的机会,要不干脆把硬盘挂在别的机器上。另外,恢复出来的数据不要写到/上面,避免破坏那些有用的数据。如果机器上有dos/windows,可以写到这些分区上面:

 代码如下 复制代码

  mount –r –n /dev/hda1 /mnt/had

  然后就可以执行debugfs:(假设Linux在 /dev/hda5)

 代码如下 复制代码

  #debugfs /dev/hda5

  就会出现debugfs提示符debugfs:

  使用lsdel命令可以列出很多被删除的文件的信息:

 代码如下 复制代码

Word-WRAP: break-word" bgColor=#f3f3f3>      debugfs:lsdel
  debugfs: 2692 deleted inodes found.
  Inode Owner Mode Size Blocks Time deleted
  164821 0 100600 8192 1/ 1 Sun May 13 19:22:46 2001
  36137 0 100644 4 1/ 1 Tue Apr 24 10:11:15 2001
  196829 0 100644 149500 38/ 38 Mon May 27 13:52:04 2001

  列出的文件有很多(这里找到2692个),第一字段是文件节点号,第二字段是文件所有者,第三字段是读写权限,接下来是文件大小,占用块数,删除时间。

  然后就可以根据文件大小和删除日期判断那些是我们需要的。比如我们要恢复节点是196829的文件:

  可以先看看文件数据状态:

   

 代码如下 复制代码

   debugfs:stat <196829>
  Inode: 196829 Type: regular Mode: 0644 Flags: 0x0 Version: 1
  User: 0 Group: 0 Size: 149500
  File ACL: 0 Directory ACL: 0
  Links: 0 Blockcount: 38
  Fragment: Address: 0 Number: 0 Size: 0
  ctime: 0x31a9a574 -- www.111cn.Net Mon May 27 13:52:04 2001
  atime: 0x31a21dd1 -- Tue May 21 20:47:29 2001
  mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 2001

  dtime: 0x31a9a574 -- Mon May 27 13:52:04 2001
  BLOCKS:
  594810 594811 594814 594815 594816 594817
  TOTAL: 38

  然后就可以用dump指令恢复文件:

 代码如下 复制代码

  debugfs:dump <196829> /mnt/hda/01.sav

  这样就把文件恢复出来了。退出debugfs:

 代码如下 复制代码

  debugfs:quit

另一种方法是手工编辑inode:

    

 代码如下 复制代码

  debugfs:mi <196829>
  Mode [0100644]
  User ID [0]
  Group ID [0]
  Size [149500]
  Creation time [0x31a9a574]
  Modification time [0x31a9a574]
  Access time [0x31a21dd1]
  Deletion time [0x31a9a574] 0
  Link count [0] 1
  Block count [38]
  File flags [0x0]
  Reserved1 [0]
  File acl [0]
  Directory acl [0]
  Fragment address [0]
  Fragment number [0]
  Fragment size [0]
  Direct Block #0 [594810]
  Triple Indirect Block [0]

  

使用mi指令后每次显示一行信息以供编辑,其它行可以直接按回车表示确认,把deletion time改成0(未删除),Link count改成1。改好后退出debugfs:

 代码如下 复制代码

  debugfs:quit

  然后用fsck检查/dev/hda5

 代码如下 复制代码

  fsck /dev/hda5

程序会说找到丢失的数据块,放在lost+found里面。这个目录里的文件就是我们要的东东

时间: 2024-09-08 12:57:36

linux恢复己删除文件的方法的相关文章

恢复回收站删除文件的方法

首先下载软件FinalData,下载后解压文件夹,打开文件夹,双击文件夹中的"FinalData.exe"安装.安装后开始下面的步骤: 1.首先点最左边那个"文件夹"图标,会弹出一个"选择驱动器"窗口,选择要恢复数据的硬盘,就是删除的文件所在的那个硬盘,比如我的G盘.你应该知道在哪个硬盘吧?别说忘记了,要是忘记了,就每个盘都扫描吧. 2.选择G盘后,然后点"确定",出现一个"正在扫描根目录"窗口,扫描完后弹

顶尖数据恢复软件如何恢复回收站删除文件?

  目前回收站被清空的文件恢复方法有两个,其中一个就是修改注册表法,不过在这里小编推荐的可不是这种方法.修改注册表法虽然看似简单,但是其具体的步骤还是有一定的难度,特别是对那些电脑生手,大家很可能在修改注册表的时候出现一些错误,从而造成电脑故障或造成丢失数据的二次破坏,后果不可估计.另外,网上的一些修改注册表的教程错误诸多,并不可信,很多用户都因此受到损失.所以在这里,我推荐大家使用另外一种恢复回收站删除文件的方法,那就是数据恢复软件法. 当我们用常规的办法删除一个文件,Windows会把文件放

如何恢复回收站删除文件

  不少朋友肯定遇到过电脑文件被删除后,并清空了回收站过后又想找回文件的苦恼.我也同样遇到过这样的情况,不过还好我有办法恢复删除文件的(也是网上找的).不过过程也是曲折的 遇到这个问题第一本大家就是百度和谷歌了.我也不例外,在找到一个说通过修改注册表就能恢复回收站清空了的文件方法后立马就开动了.但是后来发现,那个方法行不通啊.网上给的是修改注册表的这里: HEKEY--LOCAL--MACHIME/SOFTWARE/microsoft/WINDOWS/ CURRENTVERSION/EXPLOR

怎样在 Linux 系统中恢复已删除文件

怎样在 Linux 系统中恢复已删除文件 当用户意外地删除了一个仍然需要的文件时,大多数情况下,是没有简便的方法可以重新找回或重建这个文件.不过,幸运的是文件是可以通过一些方法恢复的.当用户删除了一个文件,该文件并没有消失,只是被隐藏了一段时间. 这里将解释它是如何工作的.在一个文件系统中,有一个叫做 文件分配表 的东西,这个表跟踪文件在存储单元(如硬盘, MicroSD 卡,闪存驱动器等等)中的位置.当一个文件被删除,文件系统将会在文件分配表中执行以下两个任务之一:这个文件在文件分配表上的条目

数据恢复精灵怎么恢复已删除文件

  数据恢复精灵怎么恢复已删除文件          如下图所示: 本功能将以向导的方式,依次执行如下五个步骤: 1.选择分区 2.扫描并选择要恢复的文件 3.选择目标文件夹保存文件 4.选择分区 请先选择要恢复已删除文件的分区.所选分区的有关信息将显示在右边的窗口中.如下图: 如果所选分区的文件系统是FAT32或FAT16格式,右侧窗口的底部会显示"搜索更早以前删除的文件"复选框.如果您想恢复更早以前删除的文件,可以勾选它. 2.搜索并选择要恢复的文件 确认选定的分区是您要恢复文件的

FinalData恢复已删除文件教程

  可恢复已删除文件范围: ● 删除文件或文件夹和清空回收站 ● 立刻删除文件或文件夹,并不在回收站里( Shift +Delete) ● 删除感染病毒的文件或文件夹 恢复具体步骤: 第1步:在 FINALDATA 3.0 Wizard 点击[ 恢复删除/丢失文件] 按钮 第2步:点击[恢复已删除文件]按钮 第3步:选择需要恢复文件的硬盘分区,并点击[扫描]按钮. 第4步:搜索文件进行恢复.如果有太多的文件,您可以使用[搜索/筛选]功能,以便寻找到您需要恢复的文件.搜索完成后请选择您需要恢复的文

php递归遍历删除文件的方法_php技巧

本文实例讲述了php递归遍历删除文件的方法.分享给大家供大家参考.具体如下: 这个函数稍加修改就可以变成一个递归文件拷贝函数 <?php function mover($src,$dst) { $handle=opendir($src); // Opens source dir. if (!is_dir($dst)) mkdir($dst,0755); // Make dest dir. while ($file = readdir($handle)) { if (($file!=".&q

Linux创建、删除文件和文件夹等操作命令

今天学习了几个命令,是创建.删除文件和文件夹的,在linux里,文件夹是目录,下面说下我学习的命令. 创建文件夹[mkdir]   一.mkdir命令使用权限     所有用户都可以在终端使用 mkdir 命令在拥有权限的文件夹创建文件夹或目录.     二.mkdir命令使用格式     格式:mkdir [选项] DirName     三.mkdir命令功能     通过 mkdir 命令可以实现在指定位置创建以 DirName(指定的文件名)命名的文件夹或目录.要创建文件夹或目录的用户必

恢复物理删除数据库的方法

恢复|数据|数据库   ------作者:无尽天空    2004.10.18 第一步:用软件恢复数据库文件和日志 软件简介:    Active@ UNDELETE 是一款功能强大的反删除软件,可以恢复被你误删除的文件和数据,即使文件已损坏也可以挽救不分数据.它的特点是使用简单,有向导式的界面,而且功能相当强大,可以执行"简单""高级""低级"三种模式的扫描,最大限度的恢复你的数据.还可以将分区创建为磁盘映象,避免由于磁盘操作导致已删除数据被覆