Linux系统下不小心使用rm命令删除的文件能有办法恢复吗?

Linux系统下不小心使用rm命令删除的文件能有办法恢复吗?有什么办法或者用什么命令?辛苦一下午写的程序打算用mv重命名的,不知道怎么的用了rm,好可怜!... Linux系统下不小心使用rm命令删除的文件能有办法恢复吗?
有什么办法或者用什么命令?
辛苦一下午写的程序打算用mv重命名的,不知道怎么的用了rm,好可怜!
展开
 我来答
嗨格式
2011-01-06 · 百度认证:昆山开心盒子软件有限公司官方账号
嗨格式
嗨格式是苏州开心盒子软件有限公司旗下的独立品牌。苏州开心盒子软件有限公司是一家专注软件研发的互联网科技公司。
向TA提问
展开全部
1、首先查看需要恢复的文件所在的文件系统
命令行模式下输入指令mount
[xuwangcheng14@root]#?mount/dev/xvda1?on?/?type?ext2?(rw,errors=remount-ro)proc?on?/proc?type?proc?(rw,noexec,nosuid,nodev)sysfs?on?/sys?type?sysfs?(rw,noexec,nosuid,nodev)由上知,/dev/xvda1挂载在/下,即根目录,且文件系统是ext2

2、将要找回的文件所在的分区重新挂载成只读(因为这样比较安全,可以防止因新的文件写入该分区而导致无法找回文件)
[xuwangcheng14@root]#?mount?-n?-o?remount,ro?/dev/xvda1如果不能重新挂载,那么一定有用户正在使用该分区中的文件,我们可以使用指令:fuser?-m?-v?/dev/xvda1来查看当前哪个用户正在使用该分区中的文件,然后使用fuser?-k?-m?-v?/dev/xvda1来杀死用户使用该分区的任何进程。

3、使用工具恢复文件
?[xuwangcheng14@root]#?debugfs?/dev/xvda1debugfs?1.42?(29-Nov-2011)debugfs:?lsdel进入debugfs模式后输入lsdel后可以看到被删除的文件信息
stat显示某个节点所对应的文件信息,恢复文件使用dump?文件路径。如果被删除的文件很多,那么通过lsdel可看出文件的时间,然后自己判断进行恢复。

当然还可以使用数据恢复软件,比如嗨格式数据恢复大师,嗨格式数据恢复大师是一款专家级数据恢复软件、支持误删文件恢复、回收站清空文件恢复、U盘、硬盘、SD卡、储存卡等各类存储设备数据恢复、同时支持恢复数据预览、深度扫描恢复等功能、操作简单、恢复成功率高、可免费下载试用扫描。?

泪reni
推荐于2019-10-28 · TA获得超过2485个赞
知道答主
回答量:15
采纳率:0%
帮助的人:1978
展开全部

概述

可以恢复,使用系统自还工具debugfs来还原删除的文件

步骤详解

1、 查看一下当前系统版本号,及文件系统格式

[root@localhost ~]# df -T 
Filesystem Type 1K-blocks Used Available Use% Mounted on 
/dev/mapper/VolGroup-lv_root 
ext4 51475068 22730068 26123560 47% / 
tmpfs tmpfs 3966808 68 3966740 1% /dev/shm 
/dev/sda2 ext4 487652 42534 419518 10% /boot 
/dev/mapper/VolGroup-lv_home 
ext4 901188872 20070036 835334364 3% /home

2、新建一个文件夹及文件my.txt,然后删除

[root@localhost local]# mkdir test 
[root@localhost local]# cd test 
[root@localhost test]# touch my.txt 
[root@localhost test]# ll 
总用量 0 
-rw-r–r–. 1 root root 0 1月 4 15:22 my.txt 
[root@localhost test]# rm -f my.txt 
[root@localhost test]# ll 
总用量 0

3、运用,系统自还工具debugfs来修复 打开,刚刚被删除文件所在的分区,用ls 加-d参数显示刚刚删除文件所在的目录

[root@localhost test]# debugfs 
debugfs 1.41.12 (17-May-2010) 
debugfs: open /dev/mapper/VolGroup-lv_root 
debugfs: ls -d /usr/local/test/ 
2378807 (12) . 2098175 (4084) .. <2378808> (4072) my.txt

4、显示有<>尖括号的就是我们要找的文件Inode 号 执行logdump –i <2378808>,然后输入“quit”退出debugfs

debugfs: logdump -i <2378808> 
Inode 2378808 is at group 290, block 9438337, offset 2944 
Journal starts at block 16826, transaction 2237277 
No magic number at block 30648: end of journal. 
debugfs: quit

5、执行以下命令,进行恢复,bs与skip的值分别取自:block 9438337, offset 2944

dd if=/dev/mapper/VolGroup-lv_root of=/usr/local/test/my.txt bs=2944 count=1 skip=9438337

bs对应上面的offset后面的值,skip对应block后面的值

debugfs: quit 
[root@localhost test]# dd if=/dev/mapper/VolGroup-lv_root of=/usr/local/test/my.txt bs=2944 count=1 skip=9438337 
记录了1+0 的读入 
记录了1+0 的写出 
2944字节(2.9 kB)已复制,0.00989032 秒,298 kB/秒 
[root@localhost test]# ls 
my.txt

至此,刚删除的数据已恢复

拓展内容

linux dd命令

Linux dd命令用于读取、转换并输出数据。

dd可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

参数说明:

  • if=文件名:输入文件名,缺省为标准输入。即指定源文件。

  • of=文件名:输出文件名,缺省为标准输出。即指定目的文件。

  • ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
    obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
    bs=bytes:同时设置读入/输出的块大小为bytes个字节。

  • cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。

  • skip=blocks:从输入文件开头跳过blocks个块后再开始复制。

  • seek=blocks:从输出文件开头跳过blocks个块后再开始复制。

  • count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

选项说明:

bs=<字节数>:将ibs(输入)与欧巴桑(输出)设成指定的字节数;
cbs=<字节数>:转换时,每次只转换指定的字节数;
conv=<关键字>:指定文件转换的方式;
count=<区块数>:仅读取指定的区块数;
ibs=<字节数>:每次读取的字节数;
obs=<字节数>:每次输出的字节数;
of=<文件>:输出到文件;
seek=<区块数>:一开始输出时,跳过指定的区块数;
skip=<区块数>:一开始读取时,跳过指定的区块数;
--help:帮助;
--version:显示版本信息。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
白卡PALA
推荐于2017-09-22 · 知道合伙人软件行家
白卡PALA
知道合伙人软件行家
采纳数:648 获赞数:3420
性能测试4年工作经验。

向TA提问 私信TA
展开全部

linux的文件被rm删除是可以通过linux自带的文件恢复工具debugfs来进行恢复,但是只能恢复ext2文件系统的文件,不能恢复ext3文件系统的文件。


1,首先查看需要恢复的文件所在的文件系统

命令行模式下输入指令mount

[xuwangcheng14@root]# mount
/dev/xvda1 on / type ext2 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)

由上知,/dev/xvda1挂载在/下,即根目录,且文件系统是ext2


2,将要找回的文件所在的分区重新挂载成只读
(因为这样比较安全,可以防止因新的文件写入该分区而导致无法找回文件)

[xuwangcheng14@root]#  mount -n -o remount,ro /dev/xvda1

如果不能重新挂载,那么一定有用户正在使用该分区中的文件,我们可以使用指令:fuser -m -v /dev/xvda1来查看当前哪个用户正在使用该分区中的文件,然后使用fuser -k -m -v /dev/xvda1来杀死用户使用该分区的任何进程。


3,使用debugfs工具恢复文件

[xuwangcheng14@root]# debugfs /dev/xvda1
debugfs 1.42 (29-Nov-2011)
debugfs:  lsdel

进入debugfs模式后输入lsdel后可以看到被删除的文件信息

stat显示某个节点所对应的文件信息,

恢复文件使用dump 文件路径。


如果被删除的文件很多,那么通过lsdel可看出文件的时间,然后自己判断进行恢复。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
万人敬仰涛总
推荐于2019-10-03 · TA获得超过1111个赞
知道答主
回答量:28
采纳率:0%
帮助的人:7726
展开全部

1、 查看一下当前系统版本号,及文件系统格式

2、新建一个文件夹及文件my.txt,然后删除

3、运用,系统自还工具debugfs来修复 打开,刚刚被删除文件所在的分区,用ls 加-d参数显示刚刚删除文件所在的

4、显示有<>尖括号的就是我们要找的文件Inode 号 执行logdump –i <2378808>,然后输入“quit”退出

5、执行以下命令,进行恢复,bs与skip的值分

bs对应上面的offset后面的值,skip对应block后面的值

至此,刚删除的数据已恢复

linux dd命令

Linux dd命令用于读取、转换并输出数据。

dd可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
随风568934
2013-01-03
知道答主
回答量:4
采纳率:0%
帮助的人:5828
展开全部
我是今天才看到这条信息的,不过我还是希望你了解一下,对你以后有帮助的。
ext2文件系统用debugfs命令即可恢复;ext3文件系统只要数据块未被占用也能恢复,若发现得不及时,可能就恢复不了了。ext3文件系统恢复,可使用ext3grep软件,我曾使用这个软件恢复过数据,还是不错的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式