用grep恢复误删的文本文件grep删除空行




用grep恢复误删的文本文件grep删除空行

2022-07-20 20:33:01 网络知识 官方管理员

作为长期的电脑使用者,肯定会有误删文件的经历,在MacOSX和Windows上删除的文件都会默认进回收站。

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

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

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

$echo"importantlogfileforvpsee.com">vpsee.log

$catvpsee.log

importantlogfileforvpsee.com

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

#grep-a-B10-A100'vpsee.com'/dev/sda1>tmp.txt在一堆@之间可以找到我们刚才删除的内容:

$vitmp.txt

...

@$^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@Ç^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@È^K^@^@^@

^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^@^@^@^Q^@^@^@^C^@^@^@^@^@^@^@^@^@^@^@È^K^@^@×^@

^@^@importantlogfileforvpsee.com

@

@

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


发表评论:

最近发表
网站分类
标签列表