搜索
首页运维linux运维linux删除的文件如何恢复?

linux删除的文件如何恢复?下面本篇文章给大家介绍一下恢复Linux删除文件的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

linux删除的文件如何恢复?

linux不像windows有个回收站,使用rm -rf *基本上文件是找不回来的。

那么问题来了:

对于linux下误删的文件,我们是否真的无法通过软件进行恢复呢?

答案当然是否定的,对于误删的文件,我们还是能通过软件恢复过来的。对于误删文件还原可以分为两种情况:

  • 一种是删除以后在进程存在删除信息

  • 一种是删除以后进程都找不到,只有借助于工具还原。

接下来以例子分别解说下两种不同的误删还原方式:

误删除文件进程还在的情况:

这种一般是有活动的进程存在持续标准输入或输出,到时文件被删除后,进程PID依旧存在。这也是有些服务器删除一些文件但是磁盘不释放的原因。

打开一个终端对一个测试文件做cat追加操作:

[root@docking ~]# echo "This is DeleteFile test." > deletefile.txt
[root@docking ~]# ls
deletefile.txt
[root@docking ~]# cat >> deletefile.txt 
Add SomeLine into deletefile for fun.

打开另外一个终端查看这个文件可以清楚看到内容:

[root@docking ~]# ls
deletefile.txt
[root@docking ~]# cat deletefile.txt 
This is DeleteFile test.
Add SomeLine into deletefile for fun.

此时,删除文件rm -f deletefile.txt

[root@docking ~]# rm -f deletefile.txt 
[root@docking ~]# ls
#命令查看这个目录,文件已经不存在了,那么现在我们将其恢复出来。
  • lsof查看删除的文件进程是否还存在。

  • 如没有安装请自行yum install lsof或者apt-get install lsof

1、类似这种情况,我们可以先lsof查看删除的文件 是否还在

[root@docking ~]# lsof | grep deletefile
cat       21796          root    1w      REG              253,1        63     138860 /root/deletefile.txt (deleted)

2、恢复cp /proc/pid/fd/1 /指定目录/文件名

进入 进程目录,一般是进入/proc/pid/fd/,针对当前情况:

[root@docking ~]# cd /proc/21796/fd
[root@docking fd]# ll
总用量 0
lrwx------ 1 root root 64 1月  18 22:21 0 -> /dev/pts/0
l-wx------ 1 root root 64 1月  18 22:21 1 -> /root/deletefile.txt (deleted)
lrwx------ 1 root root 64 1月  18 22:21 2 -> /dev/pts/0

恢复操作:

[root@docking fd]# cp 1 ~/deletefile.txt.backup
[root@docking fd]# cat ~/deletefile.txt.backup 
This is DeleteFile test.
Add SomeLine into deletefile for fun.

3、恢复完成。

误删除的文件进程已经不存在,借助于工具还原

准备一些文件目录

#准备一份挂载的盘
mkdir backuptest
cd backuptest
mkdir deletetest
mkdir deletetest/innerfolder
echo "Delete a folder test." > deletetest/innerfolder/deletefile.txt 

echo "tcpdump:x:172:72::/:/sbin/nologin" > tmppasswd

最后准备的目录结构如下:

taroballs@taroballs-PC:/media/taroballs/taroballs/backuptest$ cd ..
taroballs@taroballs-PC:/media/taroballs/taroballs$ tree backuptest/
backuptest/
├── deletetest
│   └── innerfolder
│       └── deletefile.txt
└── tmppasswd

2 directories, 2 files

现在开始删除该目录rm -rf backuptest/

taroballs@taroballs-PC:/media/taroballs/taroballs$ rm -rf backuptest/
taroballs@taroballs-PC:/media/taroballs/taroballs$  ls  -l
总用量 0

这种情况一般是没有守护进行或者后台进程对其持续输入,所以删除就真的删除了。lsof也看不到,故需要采用工具进行恢复。

现在开始进行误删除文件的恢复。

我们采用的工具是extundelete第三方工具。恢复步骤以及注意事项如下:

  • 停止对当前分区做任何操作,防止inode被覆盖。inode被覆盖基本就告别恢复了。

  • 夸张一点讲,比如停止所在分区的服务,卸载目录所在的设备,有必要的情况下都可以断网。

  • 通过dd命令对 当前分区进行备份,防止第三方软件恢复失败导致数据丢失。

  • 适合数据非常重要的情况,这里是例子,所以就没有备份,如备份可以考虑如下方式:dd if=/path/filename of=/dev/vdc1

  • 通过umount命令,对当前设备分区卸载。或者fuser 命令umount /dev/vdb1

  • 如果提示设备busy,可以用fuser命令强制卸载:fuser -m -v -i -k ./

  • 下载第三方工具extundelete安装,搜索误删除的文件进行还原

extundelete工具安装

extundelete下载地址:http://extundelete.sourceforge.net/

wget https://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

解压该文件tar jxvf extundelete-0.2.4.tar.bz2

若报这种错误

[root@docking ~]# tar jxvf extundelete-0.2.4.tar.bz2 
tar (child): bzip2:无法 exec: 没有那个文件或目录
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now

则使用yum -y install bzip2进行解决

[root@docking ~]# tar jxvf extundelete-0.2.4.tar.bz2 
extundelete-0.2.4/
extundelete-0.2.4/acinclude.m4
extundelete-0.2.4/missing
extundelete-0.2.4/autogen.sh
extundelete-0.2.4/aclocal.m4
extundelete-0.2.4/configure
extundelete-0.2.4/LICENSE
extundelete-0.2.4/README
...................................................
cd  extundelete-0.2.4
./configure

若这步骤报错

[root@docking extundelete-0.2.4]# ./configure 
Configuring extundelete 0.2.4
configure: error: in `/root/extundelete-0.2.4':
configure: error: C++ compiler cannot create executables
See `config.log' for more details

则使用yum -y install gcc-c++解决.

若执行上一步仍然报错,

[root@docking extundelete-0.2.4]# ./configure 
Configuring extundelete 0.2.4
configure: error: Can't find ext2fs library

则使用yum -y install e2fsprogs e2fsprogs-devel来解决。
#Ubuntu的解决办法为sudo apt-get install e2fslibs-dev e2fslibs-dev

不出意外的话到这里应该configure能够顺利完成.

[root@docking extundelete-0.2.4]# ./configure 
Configuring extundelete 0.2.4
Writing generated files to disk
[root@docking extundelete-0.2.4]#

最后make然后 make install

[root@docking extundelete-0.2.4]# make
make -s all-recursive
Making all in src
extundelete.cc: 在函数‘ext2_ino_t find_inode(ext2_filsys, ext2_filsys, ext2_inode*, std::string, int)’中:
extundelete.cc:1272:29: 警告:在 {} 内将‘search_flags’从‘int’转换为较窄的类型‘ext2_ino_t {aka unsigned int}’ [-Wnarrowing]
    buf, match_name2, priv, 0};
                             ^
[root@docking extundelete-0.2.4]# make install
Making install in src
  /usr/bin/install -c extundelete '/usr/local/bin'

extundelete安装完成.

扫描误删除的文件:

使用df -lh查看挂载:

taroballs@taroballs-PC:~$ df -lh
文件系统        容量  已用  可用 已用% 挂载点
udev            1.9G     0  1.9G    0% /dev
tmpfs           387M  1.8M  385M    1% /run
/dev/sda2        92G   61G   26G   71% /
tmpfs           1.9G   49M  1.9G    3% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda3       104G   56G   44G   57% /home
tmpfs           387M   40K  387M    1% /run/user/1000
/dev/sda4        70G   20G   47G   30% /media/taroballs/d8423f8c-d687-4c03-a7c8-06a7fb57f96d
/dev/sdb1       6.8G  4.1G  2.8G   60% /media/taroballs/taroballs
/dev/sr0        4.0G  4.0G     0  100% /media/taroballs/2018-01-16-12-36-00-00
taroballs@taroballs-PC:~$ cd /media/taroballs/taroballs/
taroballs@taroballs-PC:/media/taroballs/taroballs$

可以看到,我们的目录/media/taroballs/taroballs

挂载到/dev/sdb1 这个文件系统中.

umount我们的挂载盘

比如:

taroballs@taroballs-PC:~$ df -lh | grep /dev/sdb1
/dev/sdb1       6.8G  4.1G  2.8G   60% /media/taroballs/taroballs

umount这个目录

taroballs@taroballs-PC:~$ umount /media/taroballs/taroballs
taroballs@taroballs-PC:~$ df -lh | grep /dev/sdb1
taroballs@taroballs-PC:~$ 
#记得删除一定要后umount哦,不然二次写入谁也帮不了你呢。

通过inode节点恢复

taroballs@taroballs-PC:~$ mkdir recovertest
taroballs@taroballs-PC:~$ cd recovertest/
taroballs@taroballs-PC:~/recovertest$

执行恢复extundelete /dev/sdb1 --inode 2

taroballs@taroballs-PC:/media/taroballs/taroballs$ sudo extundelete /dev/sdb1 --inode 2
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 8 groups loaded.
Group: 0
Contents of inode 2:
 
.
.省略N行
 
File name                                       | Inode number | Deleted status
.                                                 2
..                                                2
deletetest                                        12             Deleted
tmppasswd                                            14             Deleted

通过扫描发现了我们删除的文件夹,现在执行恢复操作。

(1)恢复单一文件tmppasswd

taroballs@taroballs-PC:~/recovertest$  extundelete /dev/sdb1 --restore-file passwd   
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 8 groups loaded.
Loading journal descriptors ... 46 descriptors loaded.
Successfully restored file tmppasswd

恢复文件是放到了当前目录RECOVERED_FILES。

查看恢复的文件:

taroballs@taroballs-PC:~/recovertest$ cat tmppasswd 
tcpdump:x:172:72::/:/sbin/nologin

(2)恢复目录deletetest

extundelete /dev/sdb1 --restore-directory  deletetest
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 8 groups loaded.
Loading journal descriptors ... 46 descriptors loaded.
Searching for recoverable inodes in directory deletetest ... 
5 recoverable inodes found.
Looking through the directory structure for deleted files ...

(3)恢复所有

taroballs@taroballs-PC:~/recovertest$ extundelete /dev/sdb1 --restore-all
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 8 groups loaded.
Loading journal descriptors ... 46 descriptors loaded.
Searching for recoverable inodes in directory / ... 
5 recoverable inodes found.
Looking through the directory structure for deleted files ... 
0 recoverable inodes still lost. 
taroballs@taroballs-PC:~/recovertest$ tree 
backuptest/
├── deletetest
│   └── innerfolder
│       └── deletefile.txt
└── tmppasswd
2 directories, 2 files

(4)恢复指定inode

taroballs@taroballs-PC:~/recovertest$ extundelete /dev/sdb1 --restore-inode 14
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 8 groups loaded.
Loading journal descriptors ... 46 descriptors loaded.
taroballs@taroballs-PC:~/recovertest$ cat file.14 
tcpdump:x:172:72::/:/sbin/nologin
#注意恢复inode的时候,恢复 出来的文件名和之前不一样,需要单独进行改名。

最后附上extundelete的用法:

$ extundelete --help
Usage: extundelete [options] [--] device-file
Options:
  --version, -[vV]       Print version and exit successfully.
  --help,                Print this help and exit successfully.
  --superblock           Print contents of superblock in addition to the rest.
                         If no action is specified then this option is implied.
  --journal              Show content of journal.
  --after dtime          Only process entries deleted on or after 'dtime'.
  --before dtime         Only process entries deleted before 'dtime'.Actions:
  --inode ino            Show info on inode 'ino'.
  --block blk            Show info on block 'blk'.
  --restore-inode ino[,ino,...]
                         Restore the file(s) with known inode number 'ino'.
                         The restored files are created in ./RECOVERED_FILES                         with their inode number as extension (ie, file.12345).
  --restore-file 'path'  Will restore file 'path'. 'path' is relative to root
                         of the partition and does not start with a '/'
                         The restored file is created in the current
                         directory as 'RECOVERED_FILES/path'.
  --restore-files 'path' Will restore files which are listed in the file 'path'.
                         Each filename should be in the same format as an option
                         to --restore-file, and there should be one per line.
  --restore-directory 'path'
                         Will restore directory 'path'. 'path' is relative to the
                         root directory of the file system.  The restored
                         directory is created in the output directory as 'path'.
  --restore-all          Attempts to restore everything.
  -j journal             Reads an external journal from the named file.
  -b blocknumber         Uses the backup superblock at blocknumber when opening
                         the file system.
  -B blocksize           Uses blocksize as the block size when opening the file
                         system.  The number should be the number of bytes.
  --log 0                Make the program silent.
  --log filename         Logs all messages to filename.--log D1=0,D2=filename   Custom control of log messages with comma-separated
   Examples below:       list of options.  Dn must be one of info, warn, or   --log info,error      error.  Omission of the '=name' results in messages   --log warn=0          with the specified level to be logged to the console.
   --log error=filename  If the parameter is '=0', logging for the specified
                         level will be turned off.  If the parameter is
                         '=filename', messages with that level will be written
                         to filename.
   -o directory          Save the recovered files to the named directory.
                         The restored files are created in a directory
                         named 'RECOVERED_FILES/' by default.

推荐:《linux教程

以上是linux删除的文件如何恢复?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何优化Debian Apache日志读取速度如何优化Debian Apache日志读取速度Apr 13, 2025 am 07:42 AM

提升DebianApache日志读取速度,关键在于选择合适的工具和策略。以下方法能有效改善日志读取效率:一、高效日志查看工具tail命令:实时监控日志变化,tail-f/var/log/apache2/access.log查看访问日志,tail-n100-f...查看最后100行。multitail:同时监控多个日志文件,方便对比分析。Lnav:功能强大的日志分析工具,支持实时监控和高级分析功能。二、日志轮转策略使用logrotate工具定期分割日志文件,防止单文件

如何通过Debian Apache日志定位问题如何通过Debian Apache日志定位问题Apr 13, 2025 am 07:39 AM

本文将指导您如何利用Debian系统的Apache日志文件有效排查服务器问题。首先,打开终端,并使用文本编辑器(例如nano、vim或gedit)打开Apache的访问日志和错误日志。这些文件通常位于/var/log/apache2/目录下,分别命名为access.log和error.log。您可以使用以下命令打开它们:sudonano/var/log/apache2/access.logsudonano/var/log/apache2/error.log接下来,分析日志内容。访问

Nginx日志中的安全问题如何防范Nginx日志中的安全问题如何防范Apr 13, 2025 am 07:36 AM

Nginx日志安全至关重要,它可能泄露敏感信息或暴露恶意访问企图。本文提供一系列有效措施,帮助您提升Nginx日志安全性:访问控制:严格限制对Nginx日志文件的访问权限。仅授权人员可访问,并利用文件系统权限控制访问。同时,实施日志轮转和归档策略,减小日志文件规模,降低风险。信息脱敏:日志格式应避免记录敏感信息(如密码、信用卡信息)。使用日志脱敏工具或自定义日志格式,隐藏敏感数据。实时监控与告警:部署监控系统实时追踪Nginx日志中的异常行为。配置告警机制,

Debian怎样回收损坏的包Debian怎样回收损坏的包Apr 13, 2025 am 07:33 AM

Debian系统中遇到损坏的软件包?别担心,本文提供几种修复方法,助您恢复系统稳定性。第一步:更新软件包列表确保您的软件包列表是最新的。打开终端,执行以下命令:sudoaptupdate第二步:系统升级尝试升级所有软件包,这可能修复损坏的包:sudoaptupgrade第三步:修复依赖关系如果升级后问题依旧,尝试修复损坏的依赖关系:sudoapt-get-finstall第四步:移除损坏包如果以上方法无效,请找到损坏包的名称(例如:broken-package),并使

Debian Apache日志中如何识别恶意访问Debian Apache日志中如何识别恶意访问Apr 13, 2025 am 07:30 AM

有效监控和防御恶意网站访问对于Debian系统的Apache服务器至关重要。Apache访问日志是识别此类威胁的关键信息来源。本文将指导您如何分析日志并采取防御措施。识别恶意访问行为Debian系统的Apache访问日志通常位于/var/log/apache2/access.log。您可以通过多种方法分析日志:日志文件位置确认:首先,请确认您的Apache访问日志的准确位置,它可能因系统配置而略有不同。命令行工具分析:使用grep命令搜索特定模式,例如grep"404"

debian邮件服务器如何设置反垃圾邮件策略debian邮件服务器如何设置反垃圾邮件策略Apr 13, 2025 am 07:27 AM

本文介绍如何在Debian邮件服务器上部署强大的反垃圾邮件系统,主要运用Postgrey灰名单机制和SpamAssassin垃圾邮件过滤器。一、利用Postgrey构建灰名单安装Postgrey:使用以下命令安装Postgrey软件包:sudoapt-getupdate&&sudoapt-get-yinstallpostgrey配置Postgrey:编辑/etc/default/postgrey文件,修改POSTGREY_OPTS参数,设置延迟时间(

Debian上Tigervnc的日志在哪查看Debian上Tigervnc的日志在哪查看Apr 13, 2025 am 07:24 AM

在Debian系统中,Tigervnc服务器的日志文件通常存储在用户的home目录下的.vnc文件夹内。如果您以特定用户身份运行Tigervnc,那么日志文件名通常类似于xf:1.log,其中xf:1代表用户名。要查看这些日志,您可以使用以下命令:cat~/.vnc/xf:1.log或者,您可以使用文本编辑器打开日志文件:nano~/.vnc/xf:1.log请注意,访问和查看日志文件可能需要root权限,这取决于系统的安全设置。

Nginx SSL证书更新Debian教程Nginx SSL证书更新Debian教程Apr 13, 2025 am 07:21 AM

本文将指导您如何在Debian系统上更新NginxSSL证书。第一步:安装Certbot首先,请确保您的系统已安装certbot和python3-certbot-nginx包。若未安装,请执行以下命令:sudoapt-getupdatesudoapt-getinstallcertbotpython3-certbot-nginx第二步:获取并配置证书使用certbot命令获取Let'sEncrypt证书并配置Nginx:sudocertbot--nginx按照提示选

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境