`

用 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 等。

分享到:
评论

相关推荐

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

    本文将探讨如何使用grep命令在Linux中尝试恢复误删的文本文件。 首先,理解Linux文件系统的删除机制至关重要。当执行`rm`命令删除文件时,系统并未真正擦除文件的数据,只是更新了文件系统元数据,将文件的inode和...

    服务器误删文件的恢复过程.docx

    为了解决这个问题,他们将所有可恢复的文件名保存到文本文件中,并编写脚本来尝试恢复MySQL数据库的相关文件,因为这些文件对于业务至关重要。 在实际操作中,如果遇到类似的情况,应当立即停止对受影响的磁盘进行...

    linux rm误删数据恢复工具和方法

    PhotoRec是一个免费的开源工具,可以用于恢复多种类型的文件,包括文本文件、图片、视频等。它无视文件系统,直接从磁盘扇区恢复数据。虽然可能无法恢复文件的原始文件名,但内容通常可以找回。安装后,选择要恢复的...

    grep不查找隐藏文件夹的方法.docx

    通过熟练掌握`grep`的这些用法,你可以在Linux或Unix环境中更高效地查找和处理文本信息,甚至在误删文件后使用`grep`来尝试恢复数据。总的来说,`grep`是Linux日常工作中不可或缺的工具,理解其工作原理和各种选项能...

    文件及文件夹常用操作类

    - **移除**:简单的删除操作会将文件移到回收站,用户可以在回收站中恢复误删文件。在图形界面中,右键点击选择"删除"即可。在命令行,使用`del`(Windows)或`rm`(Linux/Unix)命令。 - **彻底删除**:如果要...

    Linux常用命令全集

    `rm [选项] 文件`,需谨慎使用以防误删。 - **slocate(securelocate)**:安全地查找文件。`slocate [选项] 文件名`,用于提高系统安全性。 - **split**:分割大文件成较小的部分。`split [选项] 输入 输出前缀`,...

    unix命令手册

    通常用于查看文本文件的完整内容,或者合并多个文件。 9. **more**和**less**:分页查看文件内容。这两个命令用于查看长文件,可以逐页或按行滚动。 10. **grep**:在文件中搜索特定模式。这个命令对于在大量文本...

    Ubuntu权威指南(2/2)

    5.15.3 使用grep检索多个文件 128 5.15.4 检索不包含特定字符 ??串的文本行 129 5.15.5 在grep中使用正则 ??表达式 129 5.15.6 检索元字符本身 131 5.15.7 在命令行中使用引号 131 5.16 排序 132 第6章 编辑文件 133...

    Ubuntu权威指南(1/2)

    5.15.3 使用grep检索多个文件 128 5.15.4 检索不包含特定字符 ??串的文本行 129 5.15.5 在grep中使用正则 ??表达式 129 5.15.6 检索元字符本身 131 5.15.7 在命令行中使用引号 131 5.16 排序 132 第6章 编辑文件 133...

    linux常用的命令

    掌握这些基本命令是Linux日常操作的基础,随着对系统的深入学习,还可以探索更多的命令,如`find`用于查找文件,`grep`用于搜索文件内容,`vi/vim`编辑文本文件,以及`man`查阅命令手册等。在Linux的世界里,命令行...

    linux命令大全、虚拟机

    6. `cat`:查看文件内容,尤其适用于文本文件。 7. `grep`:搜索文件内容,根据特定模式查找信息。 8. `find`:在文件系统中查找文件,根据文件名、大小、时间等条件。 9. `sudo`:以超级用户权限执行命令,用于执行...

    AIX操作系统详细操作文档

    8. **cat**:查看文件内容,尤其是文本文件。 9. **more** 和 **less**:分页查看文件内容,便于阅读大文件。 10. **find**:在指定路径下搜索文件,可以根据名称、大小、时间等条件查找。 11. **grep**:在文件中...

    the simple command of linux

    - **注意**:使用 `-rf` 需要格外小心,以免误删重要文件。 11. **`cp file1 file2`**:将 `file1` 复制到 `file2`。 - 示例:`cp original_file copy_file` 将 `original_file` 复制为 `copy_file`。 12. **`cp...

    Linux学习笔记(强悍总结值得一看)

    grep命令用于在文本文件中搜索指定的模式,而管道符`|`则用于连接两个命令,使得前一个命令的输出成为后一个命令的输入。以下是grep命令的一些高级用法示例: 1. **grep -l ‘boss’\***:显示所有包含“boss”的...

    AIX操作系统问题求解

    24. **/DEV/NULL文件恢复**:如果误删了`/dev/null`文件,可以尝试重新创建一个空文件,并赋予正确的权限。 25. **CHECKSTOP故障处理**:CHECKSTOP通常是硬件级别的故障,需要检查硬件状态并更换损坏的部件。 26. **...

    git-search:git搜索角度应用

    `git grep` 是 Git 内置的一个命令,用于在项目的所有文件中搜索指定的文本模式。在 TypeScript 项目中,我们可以用它来查找某个函数、变量或类的定义和使用。例如,要查找名为 `myFunction` 的函数,可以运行 `git...

Global site tag (gtag.js) - Google Analytics