误删文件不用怕 grep命令帮你恢复

系统 Linux
你是否在Linux上rm掉过你的重要文件?尤其是自己辛苦写的脚本和配置文件,不小心误删了的心情想必是十分的懊恼。不过不用怕。在一般的删除文件操作中,Linux 并不会立即清空存储该文件的 block 内容。这时候我们可以用 grep 搜索整个分区,找到被误删的内容。

作为长期的电脑使用者,肯定会有误删文件的经历,在 Mac OS X 和 Windows 上删除的文件都会默认进 “回收站”。在 Linux 上如果事先没有用别名(alias)修改默认的 rm 功能,rm 后文件就会丢失,幸运的是,在一般的删除文件操作中,Linux 并不会立即清空存储该文件的 block 内容,而只会释放该文件所占用的 inode 和 data block,Linux 上 rm 的过程其实就是将 inode bitmap 和 data block bitmap 中的相应标识设为空闲状态的过程,并不涉及到真正的数据,这也是为什么在 Linux 下删除大文件这么快速的原因,因为大文件所占的磁盘根本就没有清空。所以,如果我们能找到文件对应的 inode,由此查到相应的 data block,就可能从磁盘上把已删除的文件恢复出来,很多文件/磁盘恢复工具都是这么做的。

一般来说二进制文件、库文件等删除后都可以从其他 Linux 拷贝恢复,不是很要紧,如果自己辛苦写的脚本或者配置文件误删了就杯具了。误删这种蠢事经常在 VPSee 身上发生,最近一次是在今年年初的时候,开了 screen 多次 ssh 到不同服务器上,在前后切换的过程中删除了一个很肯定的配置文件,后来发现删的文件是对的,可惜在一台错误的服务器上,本来应该在 A 服务器上删除 file.txt 结果在 B 服务器上删除了 file.txt,多个 screen 和 ssh 把自己搞晕了,而且主机名没有安排好,多台机器都是用的 localhost,不利于识别当时的环境。如果使用 Linux 的时候不幸误删了一个文本文件怎么办呢?

先临时建一个文本文件 vpsee.log 做测试,然后删除这个文件:

$ echo "important log file for vpsee.com" > vpsee.log

$ cat vpsee.log
important log file for vpsee.com

$ rm vpsee.log

如果能记住刚才删除文件中的某个关键字的话可以用 grep 搜索整个 /dev/sda1,-a 标志位的意思是把 /dev/sda1 这个分区看成是文本形式的(分区本身是二进制形式的),-B 10 -A 100 的意思是如果找到关键字就打印出其前10行和后100行的内容:

# grep -a -B 10 -A 100 'vpsee.com' /dev/sda1 > tmp.txt

在一堆 @ 之间可以找到我们刚才删除的内容:

$ vi tmp.txt
...
@$^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@?^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@è^K^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@^Q^@^@^@^C^@^@^@^@^@^@^@^@^@^@^@è^K^@^@×^@
^@^@important log file for vpsee.com
@
@
...

当然,如果误删了二进制、doc、png/jpg/gif 之类的文件,可以用一些第三方 ext2/ext3 文件恢复工具帮助恢复文件,比如 TestDisk, PhotoRec 等。

【编辑推荐】

  1. Linux常用备份恢复工具(上)
  2. Linux常用备份恢复工具(下)
  3. Linux ext3文件系统 rm恢复
责任编辑:yangsai 来源: vpsee.com
相关推荐

2021-06-28 12:05:04

Linux文件命令

2020-12-11 11:00:17

Linux文件命令

2010-05-13 11:36:03

统一通信平台

2020-12-04 10:22:47

Linux文件命令

2016-11-17 12:46:45

2010-08-17 14:47:52

DB2备份历史文件损坏

2017-07-14 15:49:05

MongoDB误删表恢复步骤

2021-01-06 10:26:17

电脑WindowsWindows 10

2024-07-04 07:44:19

2022-12-01 14:02:02

MySQL数据文件

2010-06-07 17:45:06

MySQL数据库密码

2009-12-21 16:17:01

2012-03-13 15:49:43

win7

2020-09-30 06:00:00

Linux误删除恢复文件

2009-12-25 13:44:00

grep命令

2012-01-04 10:50:41

金山快盘文件存错

2011-05-04 18:50:58

2011-09-28 12:53:06

LinuxUbuntu

2019-08-20 14:02:07

MongoDB数据库恢复数据

2021-03-05 13:08:56

MySQL数据库命令
点赞
收藏

51CTO技术栈公众号