前言

今天不小心把一个文件给误删了,因为不想花半天时间重新写,就查找了一下Linux下恢复文件的方法。

因为是刚删不久,文件实际的数据应该还在

首先查看系统分区

Linux:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 % /
tmpfs % /var/lib/php5
tmpfs % /var/run
tmpfs % /tmp
ssl_service % /kssl/HRP/cache

使用系统自带工具debugfs进行修复

打开删除的文件所在的分区

Linux:~# debugfs
debugfs 1.37 (-Mar-)
debugfs: open /dev/sda1

用ls -d查看刚刚删除的文件所在的目录

如果列表中有我们要找的文件,尖括号<>中是对应的inode号

debugfs:  ls -d /root/rand-test
() . () .. () assess
() experiments <> () () data
<> () ..swp () periodtest.sh
<> () .singletest.input.swp () periodtest.input
() singletest.input <> () .periodtest.input.swp
<> () .singletest.input.swp <> () periodtest.input~

查看inode的日志文件

debugfs: logdump -i <180338>
Inode 180338 is at group 176, block 1441809, offset 128
Journal starts at block 3434, transaction 90549
FS block 1441809 logged at sequence 90622, journal block 3950

...

quit退出debugfs,使用dd命令进行恢复,bs为前面得到的offset,skip为前面得到的block

debugfs:  quit
Linux:~/rand-test# dd if=/dev/sda1 of=/root/rand-test/periodtest.input~ bs= count= skip=
+ records in
+ records out
bytes transferred in 0.000081 seconds ( bytes/sec)

遗憾的是,我要恢复的文件已经不在了

好在对于文本文件还有另一种方法,使用grep

第一步同样是找到文件所在的分区

然后使用grep对分区进行搜索,只要你记得文档中的某些关键字

grep -a -B  -A  'function checkInt() ' /dev/sda1 > tmp.txt

其中-a表示把分区看成文本形式(分区本身是二进制形式的),-B 30 -A 150表示找到搜索的内容就打印前面30行和后面150行

如果分区比较大可能需要一定的搜索时间,完成之后打开tmp.txt,你会发现在一堆乱码中镶嵌着你要恢复的本文

至此,大功告成,总结

使用debugfs的方法适用于所有文件,不过需要inode信息仍然存在。使用grep的方法,只需要实际的block中数据还存在即可恢复,不过只适用于文本文件。

另外,切记rm需谨慎

Linux文件误删之后恢复方法的更多相关文章

  1. Linux 文件系统错误的修复方法 ddrescue替代dd的恢复软件 备用超级块

    Linux 文件系统错误的修复方法  ddrescue替代dd的恢复软件  备用超级块 最近处理的一件 linux 服务器断电导致文件系统启动后文件系统不可读写,数据不可用的案例,现总结下 Linux ...

  2. 如何彻底删除SVN中的文件和文件夹(附恢复方法)

    在SVN中如果删除某个文件或文件夹也可以在历史记录中进行找回,有的时候需要彻底删除某些文件,即不希望通过历史记录进行恢复,需要在服务器上对SVN的数据进行重新整理 这里假设SVN项目的目录为 /dat ...

  3. 【转】如何彻底删除SVN中的文件和文件夹(附恢复方法)

    这里假设SVN项目的目录为 /data/svn/project,我们想排除trunk/test.exe文件和trunk/notallowed/目录,操作步骤如下及执行的svn命令(在svn安装目录的b ...

  4. Linux文件误删恢复

    一.需求研究 分析对比debugfs.testdisk 6.14.extundelete,对比各自官网介绍和操作说明本次决定研究extundelete对文件和目录的恢复操作. 二.项目内容 1.工具安 ...

  5. git 误删分支恢复方法

    在使用Git的过程中,因为人为因素造成分支(commit)被删除,可以使用以下步骤进行恢复. 首先用以下步骤创建一个新分支,修改一些文件后删除,以便进行恢复. 1.创建分支 abc git branc ...

  6. 使用ssh 登录Linux 文件上传下载方法

    最简单的方法: 安装WinSCP或者Filezilla, 启动该程序,然后自己输入输入主机名.端口.用户名.密码登录,然后在putty里面用pwd命令看看当前目录,再在WinSCP/Filezilla ...

  7. ctf比赛linux文件监控和恢复shell

    之前参加ctf比赛时候临时写的,有很多不足,不过可以用,就贴出来分享给大家,希望对大家有帮助. 脚本一:记录当前目录情况 #!/bin/bashfunction getdir(){    for el ...

  8. Windows 与 linux文件相互传输的方法

    公司里面办公机器大部分都是 windows 但是现在随着云计算.docker.linux等的越来越兴起,需要大量的操作linux服务器. 最重要和最直接的需要将windows 上面的文件上传到 lin ...

  9. Ubuntu启动文件破坏启动恢复方法

    reboot后主机登录显示如下图: 解决步骤: 1.fs0:(回车) 2.edit startup.nsh 3.添加下面字段: fs0: cd EFI/ubuntu grubx64.efi 4.重启即 ...

随机推荐

  1. JS中变量的存储

    JS中的变量是保存在栈内存中的 基本数据类型的值直接在栈内存中存储: 值与值之间是独立存在的,修改一个变量不会影响其他变量: var a=20; var b=a; a++; 对象(引用数据类型)是保存 ...

  2. laravel进行单元测试的时候如何模拟数据库以及mockery的调用

    单元测试是独立的,所谓的独立是指有独立的运行容器,独立的数据库. 这样做有什么好处呢? (1). 不会跟正常的容器产生冲突,继而影响正常业务. (2). 数据库独立防止数据被修改影响单元测试结果. 这 ...

  3. 修改Anaconda3中jupyter的工作目录

    1.打开Anaconda Prompt,运行jupyter notebook --generate-config 2.找到当前用户下的.jupter文件夹,打开jupyter_notebook_con ...

  4. 创建多线程的第二种方法实现Callable接口

    1.实现Callable接口,重写call方法,有返回值 2.通过实现Callable接口创建的线程只能在线程池中使用. 3.返回值就是run方法返回的对象 4.通过future.get()可以获取到 ...

  5. Python Flask之留言板(无数据库)

    一个py文件,一个html文件,可以直接运行 py文件 from flask import Flask, request, render_template, redirect, url_for imp ...

  6. 一直又爱又恨的jqueryValidate,看到一个还不错的laber.error样式

    默认样式,不是很好看 修改之后就高大上多了 功臣如下: label.error {    position: absolute;    right: 18px;    top: 5px;   colo ...

  7. JavaScript HTML DOM - 改变 CSS

    HTML DOM 允许 JavaScript 改变 HTML 元素的样式. 改变 HTML 样式 如需改变 HTML 元素的样式,请使用这个语法: document.getElementById(id ...

  8. idea:打包jar(原文by曲高终和寡)

    idea打包java可执行jar包   1,在项目上鼠标右键 --> Open Module Settings 2, Artifacts --> + --> JAR --> F ...

  9. Android : App客户端与后台服务的AIDL通信以及后台服务的JNI接口实现

    一.APP客户端进程与后台服务进程的AIDL通信 AIDL(Android Interface definition language-“接口定义语言”) 是 Android 提供的一种进程间通信 ( ...

  10. centos 解决中文支持问题, 如此修改可以修正eclipse 乱码问题。

    一.中文支持 安装中文语言包: yum groupinstall chinese-support 修改字符编码配置,没有这个文件就创建它: vim /etc/sysconfig/i18n 为 LANG ...