linux mv覆盖目录,linux下利用grep和dd命令恢复被mv命令覆盖的文件内容

查看原文,移步个人博客地址:http://shengfu.sinaapp.com/?p=683

事件起因

把之前基于linux c写的一个纯真ip查询的server代码优化、规整了下之后,想重命名一下,然后就执行了下面两行命令:

1

2

mvhttp.cxip.c

mvhttp.shxip.c

其实我的本意是想这样:

1

2

mvhttp.cxip.c

mvhttp.shxip.sh

事件影响

.c文件是核心代码,.sh文件是编译c文件的几行gcc命令,上面mv命令误操作的结果就是完全覆盖了.c文件,意味这两天白忙活了。

事件处理

虽然代码核心的东西都在脑子里面,重新写大半天时间也差不多能搞定了,但是还是希望能够有办法恢复数据,花点时间要是能找到办法,以后有更重要的数据也能用的上。

首先想到的是用ext3grep工具恢复数据,结果centos系统直接yum是找不到包的,源码包地址在http://code.google.com/p/ext3grep/上,打开结果是404页面,用个工具也真够费劲的,另外对这个工具也不是太熟悉,暂且放弃吧。

后来通过google在这篇文章:http://unix.stackexchange.com/questions/149342/can-overwritten-files-be-recovered发现了grep和dd这条线索,这两个命令经常使用,但是真还不知道能拿来恢复数据。

恢复过程

1、确认代码所在的目录处于磁盘的哪个分区

1

2

3

4

5

6

7

8

9

10

11

12

[qidasheng@master~]$pwd

/home/qidasheng

[qidasheng@master~]$df-h

FilesystemSizeUsedAvailUse%Mountedon

/dev/mapper/vg_qidasheng8-lv_root50G26G21G56%/

tmpfs7.8G76K7.8G1%/dev/shm

/dev/sda1485M66M394M15%/boot

/dev/mapper/vg_qidasheng8-data0197G128G60G69%/data0

/dev/mapper/vg_qidasheng8-data1197G17G171G9%/data1

/dev/mapper/vg_qidasheng8-data2148G1.6G139G2%/data2

/dev/mapper/vg_qidasheng8-home64G20G42G32%/home

cm_processes7.8G300K7.8G1%/var/run/cloudera-scm-agent/process

通过上面的命令确定了代码在home目录,home目录是挂在/dev/mapper/vg_qidasheng8-home 下的。

2、使用grep命令在磁盘上通过被误删代码中的比较有代表性的关键字符串查找文件所在偏移位置,返回的部分内容如下,内容前面都有一个数字串,记录这个数字串

1

2

3

4

5

6

7

8

9

10

11

[root@master~]# grep -a -b '/home/qishengfu/QQWry.Dat'  /dev/mapper/vg_qidasheng8-home

2851521881:wry_file=fopen("/home/qishengfu/QQWry.Dat","r");

2851534169:wry_file=fopen("/home/qishengfu/QQWry.Dat","r");

.

[root@master~]# grep -a -b 'cJSON_AddStringToObject(fmt,"province"'  /dev/mapper/vg_qidasheng8-home

1862223382:cJSON_AddStringToObject(fmt,"province",trim_str(tmp[0]));

1876743751:cJSON_AddStringToObject(fmt,"province",trim_str(tmp[0]));

[root@master~]# grep -a -b 'cJSON_AddStringToObject(fmt,"desc"'  /dev/mapper/vg_qidasheng8-home

1889870235:cJSON_AddStringToObject(fmt,"desc",ip_key[1]);

3、通过dd命令利用2中获取的的偏移信息直接从磁盘读取内容

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

[root@master~]# dd if=/dev/mapper/vg_qidasheng8-home count=1 skip=$(expr 1876743751 / 512)

tmp[0]=malloc(len0);

tmp[1]=malloc(len1);

strncpy(tmp[0],ip_key[0],len0);

strncpy(tmp[1],pos+len,len1);

cJSON_AddStringToObject(fmt,"province",trim_str(tmp[0]));

cJSON_AddStringToObject(fmt,"city",trim_str(tmp[1]));

}else{

cJSON_AddStringToObject(fmt,"country",ip_key[0]);

}

}

if(count>=1&&ip_key[1]!=NULL){

cJSON_AddStringToObject(fmt,"place",ip_key[1]);

}

if(count>=2&&ip_key[2]!=NULL){

注意事项:

1、 从上面数据可以看出,count=1的情况下读取的只是部分代码片段,可以把count值调大读取前后更大范围的数据;

2、第2步中获取的偏移信息不一定就是被覆盖的文件的偏移,有可能是历次代码编辑中数据的偏移,所以可以把上面获取到的偏移记录位置的数据都读取出来,然后人工核对选择最接近的数据进行汇总,就能恢复得到最近的数据啦。

参数解释

grep中几个参数的解释

-a用来把二进制文件当文本文件处理,-b用来保证显示查找出的结果的偏移位置

1

2

3

4

5

-a,--text

Processabinaryfileasifitweretext;thisisequivalenttothe--binary-files=textoption.

-b,--byte-offset

Printthe0-basedbyteoffsetwithintheinputfilebeforeeachlineofoutput.If-o(--only-matching)isspecified,printtheoffsetofthe

matchingpartitself.

dd中使用的几个参数的解释

count指明读取多少个数据块,if指定读取源,skip指定跳过多少个块(后面除以512是因为,skip是跳过ibs-sized blocks,而ibs默认大小为512)

1

2

3

4

5

6

7

8

9

10

count=BLOCKS

copyonlyBLOCKSinputblocks

ibs=BYTES

readBYTESbytesatatime(default:512)

if=FILE

readfromFILEinsteadofstdin

skip=BLOCKS

skipBLOCKSibs-sizedblocksatstartofinput

失而复得的心情比天上掉馅饼还好!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用方法,解压到本地目录,配置path,即可在dos下使用linux命令。 windows下能直接执行的linux命令,基本包括日常所有,如:[.exe grolbp.exe regtool.exe a2p.exe grolj4.exe rm.exe a2p5.10.0.exe grops.exe rmdir.exe addftinfo.exe grotty.exe rmt.exe addr2line.exe gzip.exe run.exe alternatives.exe head.exe runcon.exe ar.exe hostid.exe rxvt.exe arch.exe hostname.exe scp.exe as.exe hpftodit.exe sdiff.exe ascii.exe i686-pc-cygwin-gcc-3.4.4.exe sed.exe ash.exe i686-pc-cygwin-gcc-3.exe semstat.exe awk.exe i686-pc-cygwin-gcc.exe semtool.exe banner.exe id.exe seq.exe base64.exe indxbib.exe setfacl.exe basename.exe info.exe setmetamode.exe bash.exe infokey.exe sftp-server.exe bigram.exe install-info.exe sftp.exe bunzip2.exe install.exe sh.exe bzcat.exe ipcrm.exe sha1sum.exe bzip2.exe ipcs.exe sha224sum.exe bzip2recover.exe join.exe sha256sum.exe c++filt.exe kill.exe sha384sum.exe cat.exe ld.exe sha512sum.exe cc-3.exe less.exe shmtool.exe cc.exe lessecho.exe shred.exe chcon.exe lesskey.exe shuf.exe chgrp.exe link.exe size.exe chmod.exe lkbib.exe sleep.exe chown.exe ln.exe soelim.exe chroot.exe locate.exe sort.exe cksum.exe login.exe split.exe cmp.exe logname.exe ssh-add.exe code.exe lookbib.exe ssh-agent.exe comm.exe lpr.exe ssh-keygen.exe conv.exe ls.exe ssh-keyscan.exe cp.exe make.exe ssh-keysign.exe cpp-3.exe makeinfo.exe ssh.exe cpp.exe man.exe sshd.exe crypt.exe man2html.exe ssp.exe csplit.exe manpath.exe stat.exe cut.exe md5sum.exe strace.exe cygcheck.exe mkdir.exe strings.exe cygpath.exe mkfifo.exe strip.exe cygrunsrv.exe mkgroup.exe stty.exe cygserver.exe mknod.exe su.exe cygstart.exe mkpasswd.exe sum.exe d2u.exe mkshortcut.exe svn.exe date.exe mktemp.exe svnadmin.exe dd.exe mount.exe svndumpfilter.exe df.exe msgtool.exe svnlook.exe diff.exe mv.exe svnsync.exe diff3.exe nc.exe svnversion.exe dir.exe ngettext.exe sync.exe dircolors.exe nice.exe tac.exe dirname.exe nl.exe tail.exe dlltool.exe nm.exe tar.exe dllwrap.exe nohup.exe tbl.exe dos2unix.exe objcopy.exe tee.exe du.exe objdump.exe test.exe dump.exe od.exe texindex.exe dumper.exe oldfind.exe tfmtodit.exe echo.exe openssl.exe touch.exe editrights.exe passwd.exe tr.exe egrep.exe paste.exe troff.exe env.exe pathchk.exe true.exe envsubst.exe peflags.exe tsort.exe eqn.exe perl.exe tty.exe expand.exe perl5.10.0.exe u2d.exe expr.exe pfbtops.exe umount.exe factor.exe pgawk-3.1.6.exe uname.exe false.exe pgawk.exe unexpand.exe fgrep.exe pic.exe uniq.exe find.exe pinky.exe unix2dos.exe fmt.exe post-grohtml.exe unlink.exe fold.exe pr.exe unprotoize-3.exe frcode.exe pre-grohtml.exe unprotoize.exe gawk-3.1.6.exe printenv.exe users.exe gawk.exe printf.exe vdir.exe gcc-3.exe protoize-3.exe vim.exe gcc.exe protoize.exe wc.exe gcov-3.exe ps.exe which.exe gcov.exe ptx.exe who.exe getclip.exe putclip.exe whoami.exe getfacl.exe pwd.exe windmc.exe gettext.exe ranlib.exe windres.exe gkill.exe readelf.exe xargs.exe gprof.exe readlink.exe xmlwf.exe grep.exe readshortcut.exe xxd.exe grn.exe realpath.exe yes.exe grodvi.exe rebase.exe zdump.exe groff.exe refer.exe zic.exe

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值