在操作Linux系统的时候,可能经常会不小心或错误地按“ shift+delete”键删除了文件。就个人习惯而言,或许会有更喜欢使用“ shift+Del ”而不是“Delete”的习惯。
事实上,最近小编前就经历过这件事,我将自己的工作文件保存在一个目录中。该目录中有许多不需要的文件,需要永久删除。于是我想进行删除操作。在删除这些文件时,不小心按了“ shift+delete”删错了一个不需要删除的重要文件,该文件已从目录中永久删除。这个时候是多么希望能够恢复已删除的文件,但不知道该怎么操作。几乎尝试各种方法恢复文件但以失败告终。
接下来了解了一些技术知识后,知道了Linux文件系统和硬盘的工作原理。当你意外删除文件时,该文件的内容不会从计算机系统中删除。它紧紧从数据库文件夹中删除,无法在目录中看到该文件,但它仍然保留在硬盘驱动器中的某个位置。基本上,Linux系统有一个列表指针,指向存储设备上仍然有数据的块。除非并且直到你用新文件覆盖,否则不会从块存储设备中删除数据。从这个角度来看,我感觉自己删除的文件可能仍然保留在硬盘的未索引区域中。当然,这里建议大家在意识到已删除任何重要文件后立即Unmount设备。Unmount命令可以帮你防止已删除的文件被新文件覆盖。
在这种情况下,我不想覆盖该数据,因此我更喜欢在硬盘驱动器中搜索而不挂载它。
通常在Windows系统中,有大量的第三方工具来恢复丢失的数据,但在Linux中却很少。并且,小编使用Ubuntu作为操作系统,很难找到恢复丢失文件的工具。在我网上搜索的过程中,了解了“ Scalpel ”工具,这是一种可以遍历整个硬盘并恢复丢失文件的工具。我在Scalpel工具的帮助下安装并成功恢复了丢失的文件。
想到大家这可能遇到类似经历。所以想和大家分享一下我的经验。在本文中,简单想你展示如何借助Scalpel工具恢复已删除的文件。那么我们开始吧。
什么是Scalpel工具?
Scalpel是一款适用于Linux和Mac操作系统的开源文件系统恢复工具,该工具访问块数据库存储并从中识别已删除的文件并立即恢复它们。除了文件恢复之外,它对于数字取证调查也很有用。
在Debian/Ubuntu和Linux Mint中安装Scalpel
要安装Scalpel,请打开shell终端并运行以下命令:
$ sudo apt-get install scalpel
样本输出如下:
Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: scalpel 0 upgraded, 1 newly installed, 0 to remove and 390 not upgraded. Need to get 0 B/33.9 kB of archives. After this operation, 118 kB of additional disk space will be used. Selecting previously unselected package scalpel. (Reading database ... 151082 files and directories currently installed.) Unpacking scalpel (from .../scalpel_1.60-1build1_i386.deb) ... Processing triggers for man-db ... Setting up scalpel (1.60-1build1) ...
RHEL/CentOS和Fedora中安装Scalpel
要安装Scalpel工具,需要先启用epel存储库。启用之后,可以执行“ yum ”来安装它,命令如下:
# yum install scalpel
样本输出如下:
Loaded plugins: fastestmirror Determining fastest mirrors epel/x86_64/metalink | 25 kB 00:00 * base: mirror.us-midwest-1.nexcess.net * elrepo: ord.mirror.rackspace.com * epel: mirror.xenyth.net * extras: nyc.mirrors.clouvider.net * remi-php80: cdn.centos.no * remi-safe: cdn.centos.no * updates: bay.uchicago.edu base | 3.6 kB 00:00 copr:copr.fedorainfracloud.org:jdoss:wireguard | 3.3 kB 00:00 elrepo | 3.0 kB 00:00 epel | 4.7 kB 00:00 extras | 2.9 kB 00:00 remi-php80 | 3.0 kB 00:00 remi-safe | 3.0 kB 00:00 shells_fish_release_3 | 1.7 kB 00:00 updates | 2.9 kB 00:00 (1/6): elrepo/primary_db | 353 kB 00:00 (2/6): remi-php80/primary_db | 229 kB 00:00 (3/6): epel/x86_64/updateinfo | 1.0 MB 00:00 (4/6): remi-safe/primary_db | 2.4 MB 00:01 (5/6): updates/7/x86_64/primary_db | 22 MB 00:01 (6/6): epel/x86_64/primary_db | 7.0 MB 00:01 Resolving Dependencies --> Running transaction check ---> Package scalpel.x86_64 0:2.0-7.el7 will be installed --> Processing Dependency: libtre.so.5()(64bit) for package: scalpel-2.0-7.el7.x 86_64 --> Running transaction check ---> Package tre.x86_64 0:0.8.0-18.20140228gitc2f5d13.el7 will be installed --> Processing Dependency: tre-common = 0.8.0-18.20140228gitc2f5d13.el7 for pack age: tre-0.8.0-18.20140228gitc2f5d13.el7.x86_64 --> Running transaction check ---> Package tre-common.noarch 0:0.8.0-18.20140228gitc2f5d13.el7 will be install ed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: scalpel x86_64 2.0-7.el7 epel 49 k Installing for dependencies: tre x86_64 0.8.0-18.20140228gitc2f5d13.el7 epel 40 k tre-common noarch 0.8.0-18.20140228gitc2f5d13.el7 epel 32 k Transaction Summary ================================================================================ Install 1 Package (+2 Dependent packages) Total download size: 121 k Installed size: 247 k Is this ok [y/d/N]: y Downloading packages: (1/3): tre-0.8.0-18.20140228gitc2f5d13.el7.x86_64.rpm | 40 kB 00:00 (2/3): scalpel-2.0-7.el7.x86_64.rpm | 49 kB 00:01 (3/3): tre-common-0.8.0-18.20140228gitc2f5d13.el7.noarch.r | 32 kB 00:00 -------------------------------------------------------------------------------- Total 64 kB/s | 121 kB 00:01 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : tre-common-0.8.0-18.20140228gitc2f5d13.el7.noarch 1/3 Installing : tre-0.8.0-18.20140228gitc2f5d13.el7.x86_64 2/3 Installing : scalpel-2.0-7.el7.x86_64 3/3 Verifying : tre-0.8.0-18.20140228gitc2f5d13.el7.x86_64 1/3 Verifying : tre-common-0.8.0-18.20140228gitc2f5d13.el7.noarch 2/3 Verifying : scalpel-2.0-7.el7.x86_64 3/3 Installed: scalpel.x86_64 0:2.0-7.el7 Dependency Installed: tre.x86_64 0:0.8.0-18.20140228gitc2f5d13.el7 tre-common.noarch 0:0.8.0-18.20140228gitc2f5d13.el7 Complete!
安装Scalpel后,需要进行文本编辑。默认情况下,Scalpel实用程序在“ /etc ”目录中有自己的配置文件,完整路径为“ /etc/scalpel/scalpel.conf ”或“ /etc/scalpel.conf ”。你可以注意到所有内容都被注释掉了 ( # )。因此,在运行Scalpel之前,需要取消对将要恢复的文件格式的注释。然而,取消整个文件的注释非常耗时,并且会产生严重的错误结果。
举例来说,我只想恢复“ .jpg ”文件,因此,只需取消Scalpel配置文件的“ .jpg ”文件部分的注释就行了:
GIF and JPG files (very common) gif y 5000000 \x47\x49\x46\x38\x37\x61 \x00\x3b gif y 5000000 \x47\x49\x46\x38\x39\x61 \x00\x3b jpg y 200000000 \xff\xd8\xff\xe0\x00\x10 \xff\xd9
转到终端并输入以下语法。注意,“ /dev/sda1 ”是已删除文件的设备位置:
$ sudo scalpel /dev/sda1-o output
“ -o ”选项表示输出目录,也就是你希望在其中恢复已删除的文件。在运行任何命令之前请确保该目录为空,否则会出现错误。上述命令的输出是:
Scalpel version 1.60 Written by Golden G. Richard III, based on Foremost 0.69. Opening target "/dev/sda1" Image file pass 1/2. /dev/sda1: 6.1% |***** | 6.6 GB 39:16 ETA
如上所见,Scalpel现在正在执行其过程,恢复已删除的文件将需要一些时间,具体取决于尝试扫描的磁盘空间和机器的速度。当然,不管怎样,小编建议大家养成只使用delete而不是“ Shift+delete ”的习惯。因为正如所说,预防总是胜于治疗。