在 Linux 上恢复已删除的文件(初学者教程)

2023-10-17

您是否曾经错误地删除过重要文件?谁不呢!好的,但是我可以恢复它们吗?在这篇文章中,您将了解如何使用不同文件系统上的各种程序在 Linux 上恢复已删除的文件。

您将了解如何从 SD 卡、HDD 和不同分区上的已删除分区恢复已删除的文件Linux 文件系统例如 EXT3、EXT4,甚至来自 Windows 文件系统(例如 FAT32 和 NTFS)。

 

 

从已删除的分区恢复文件

这是一个很大的问题。经常,Linux用户经常同时安装多个系统,在安装过程中可能会误删除某个分区。

但是,如何从已删除的分区中恢复文件呢?为此,我们需要使用名为 TestDisk 的工具来恢复分区。

Testdisk 是一款功能强大的分区分析和数据恢复实用程序。大多数 Linux 发行版(例如 Debian 和 Ubuntu)都附带 TestDisk。

另一方面,应用程序是跨平台的,支持Intel、MSDOS、Mac等大量分区表。这些是最流行的分区表。

此外,它还支持许多文件系统,例如 NTFS、EXT4 以及其他非流行文件系统,例如 BeOS 和 ReiserFS。

当您删除文件时,该文件占用的簇列表将被删除,标记这些扇区可供使用。如果簇未被覆盖,TestDisk 可以恢复文件。

首先,像这样启动应用程序:


$ testdisk  

接下来,您可以选择为日志创建新文件。如果您想创建一个,请选择create选项并按 Enter 键。如果您不需要日志文件,请选择“无日志”选项。

接下来,将扫描系统识别的磁盘或分区。在这种特殊情况下,sda 是我们要恢复的分区。

TestDisk 可以识别各种类型的分区表。除非您使用专用的,否则通常是英特尔的。

在下一个屏幕中,您将看到该程序具有的一系列选项。对于这种特殊情况,我们需要选择“分析”选项。

使用此选项,程序将彻底分析磁盘以查找结构。

然后,它会询问您想要进行的搜索类型。通常,选择“快速搜索”选项。

如果幸运的话,您将看到被删除的分区。如果没有,您将不得不选择更深入的搜索。

然后,选择写入选项来写入分区表。完成后,重新启动系统,分区就恢复了!

请注意,在这些步骤中,可能需要很长时间。这取决于磁盘大小。

根据该分区可能具有的文件系统类型,将遵循特定的说明。稍后将详细介绍它们。

 

从外部驱动器恢复已删除的文件

现在让我们假设我们有一个外部闪存驱动器,并且您错误地从中删除了一些文件。如何恢复它们?

感谢 TestDisk,该过程变得与删除分区非常相似。但也存在一些差异。

要启动该程序,我们将使用 testdisk 命令。此外,我们可以将闪存驱动器添加为参数,如下所示:


$ sudo testdisk /dev/sdb  

接下来,选择继续。然后,选择分区表类型。

然后,选择高级选项来恢复文件。

下一步是选择分区和取消删除选项。

然后,您将看到该分区上所有已删除的文件。

现在,选择目标文件夹来放置恢复的文件。您需要在第一个选项上按 C 键将文件放置在当前目录中。

最后,你会看到这样的消息:

恭喜!文件已恢复。

 

从 SD 卡恢复已删除的文件

通常,在 SD 卡上,人们很容易注意到它们用于存储多媒体文件。因此,建议对这些文件使用更专门的程序。

在本例中,我们将使用 TestDisk 中包含的名为 Photorec 的应用程序。

首先,将SD卡插入PC。接下来,以 root 身份运行 photorec:


$ sudo photorec [device]  

然后,您将看到下图。选择媒体并继续,然后按 Enter。

接下来,选择分区。然后选择选项并按 Enter 键。

在那里您将看到恢复选项:

按 q 返回上一屏幕。有必要选择我们要恢复的文件类型。这是通过选择“文件选项”选项来实现的。

按 s 键选择和取消选择所有格式。您还可以使用右键选择要恢复的文件类型。要保存所选选项,请按 b 键。使用 q 键返回主菜单。

然后,在主菜单上选择“搜索”选项来启动该过程。并选择文件系统。

然后您将看到两个选项。自由而完整。通常,免费就足够了。如果您想进行深入分析,请选择“整体”,但请记住,这会减慢整个过程。

现在,需要选择保存文件的位置。为此,请按 c 键。

选择目的地后,恢复过程将开始。请记住,系统将崩溃并冻结。所以要有耐心。

最后,您将看到一条消息,通知您所发生的一切。

接下来,检查结果。

 

从 NTFS 恢复已删除的文件

NTFS 是一种 Windows 文件系统。如果您是计算机上使用这两个系统的人之一,那么您可能需要使用此文件系统从 Windows 分区恢复已删除的文件。

为此,我们有一个名为 ntfsundelete 的工具,它使用起来非常简单。

首先,您需要扫描磁盘或分区。例如:


$ sudo ntfsundelete /dev/sda1  

然后,我们将能够使用以下命令恢复已删除的文件:


$ sudo ntfsundelete [HD_Or_partition] -u -m [filename]  

   

 恢复的文件现在属于 root 用户。最后一步是使用以下命令更改文件的权限和所有者chown命令.

 

从 FAT32 恢复文件

另一种常见的 Windows 文件系统是 FAT32。您可以使用 TestDisk 从 FAT32 恢复文件。

因此,再次以 root 用户身份运行 testdisk 并将磁盘作为参数传递:


$ sudo testdisk [partition/HD]  

 

然后继续按照上述步骤恢复文件。

 

恢复内存文件(使用 inode)

如果删除了另一个进程正在使用的文件,可以使用 inode 从内存中恢复它。

必须建立一些初始条件。第一的,已删除的文件必须由另一个进程保持打开状态。然后你必须验证该进程并最终恢复它并更改其权限。

在本例中,我将使用 nano 编辑器创建一个名为 example.txt 的文件并添加一些文本:


$ nano example.txt  

然后保存更改并打开另一个终端窗口并使用该文件。例如,与更少的命令.


$ less example.txt  

 打开另一个终端会话,删除该文件并确保它已被删除:


$ rm example.txt
$ ls example.txt  

如您所见,该文件不再存在。但我们将能够恢复它。为此,我们获取与文件 inode 关联的进程号。


$ lsof | grep example.txt  

您将注意到正在使用该文件的进程和命令(less 命令)。从该图像中,我们必须注意第二个和第四个值。它们分别是进程的 PID 和文件的描述符。

然后,使用以下命令恢复它:


$ ls -l /proc/2325/fd/4  

 

然后将其复制到您想要的任何位置,这足以恢复它。


$ sudo cp /proc/2325/fd/4 .  

 接下来,检查结果并打开文件:

  

这样,我们就可以恢复仍在内存中并由具有 inode 的进程使用的已删除文件。

 

从 EXT4 恢复已删除的文件(使用 extundelete)

EXT4 是大多数 Linux 发行版上的默认文件系统。它速度相当快,并且具有 Linux 内核充分利用的技术特性。

从 EXT4 文件系统恢复文件所使用的工具之一是 extundelete。

Extundelete 是一个开源应用程序,允许从具有 EXT3 或 EXT4 文件系统的分区或磁盘恢复已删除的文件。它使用简单,并且默认安装在大多数 Linux 发行版上。

要恢复某个文件,只需使用以下命令:


$ sudo extundelete [device] -restore-file [pathfile]  

例如:


$ sudo extundelete /dev/sdb1 -restore-file home/angelo/other.txt  

如果要恢复文件夹中的所有文件,请使用通配符:


$ extundelete /dev/sda6 -restore-file home/angelo/*  

但如果你想恢复分区或磁盘上的所有文件,下面的命令就足够了:


$ extundelete /dev/sda6 -restore-all  

因此,恢复的文件将位于 RECOVERED_FILES 目录中。这样,您就可以使用extundelete恢复已删除的文件。

 

使用调试文件

还可以使用 debugfs 工具来恢复已删除的文件。该工具还使用已删除文件的索引节点号。但是,它仅适用于 EXT4 文件系统。

它的操作也非常简单。首先,您必须输入分区或设备。


$ debugfs [device]  

例如,


$ sudo debugfs /dev/sdb1  

然后,过一会儿,您就可以登录 debugfs 控制台来搜索最近删除的文件。


$ debugfs: lsdel  

在第一列中,您将看到该设备中已删除文件的索引节点号。然后,使用以下命令恢复它:


$ debugfs mi <inode_number>  

就是这样。这很容易。

 

使用 ext4magic

在具有 Ext4 文件系统的磁盘上恢复已删除文件的另一种方法是使用 Ext4magic。这个应用程序的使用也非常简单。

该应用程序最基本的语法如下:


$ sudo ext4magic [device] -f [folder_to_scan] -r -d [output_folder]  

如果我想从名为 files 的文件夹中恢复已删除的文件,命令将类似于以下命令:


$ sudo ext4magic /dev/sdb1 -r -d files  

这就是使用 ext4magic 的简单之处。这一切都归功于 Ext4 是一个社区和开源文件系统。

 

恢复被覆盖的文件(使用手术刀)

Scapel 是另一个开源工具,可让您从格式化的驱动器、覆盖的文件甚至损坏的驱动器中恢复文件。它以其速度和效率而闻名。从这个意义上说,它是作为一种可供考虑的替代方案而出现的。

手术刀雕刻文件无需文件系统的帮助。它尝试提取文件的页眉和页脚,并尝试使用一些精心设计的算法来猜测整个文件结构。

与 TestDisk 一样,它可以在大多数 Linux 发行版的官方存储库中找到。因此,它的安装减少到使用终端和发行版的包管理器。

使用 Scapel 最快、最简单的方法如下:


$ scalpel [device] -o [output_folder]  

output_folder 指定 scapel 将放置所有恢复文件的位置。请注意,Scalpel 将自行创建输出目录。

但 Scapel 如何知道要恢复哪些文件呢?嗯,这是在应用程序配置文件中定义的。

该配置文件通常位于以下位置:


/etc/scalpel/scalpel.conf  

您可以使用您喜欢的文本编辑器打开它,然后只需取消注释行即可定义要搜索的文件格式。

您取消注释的文件格式,Scalpel 将搜索它。

接下来,运行完整的 Scalpel 命令,在输出文件夹中,您将看到恢复的文件。


$ sudo scalpel /dev/sdb1 -o recovered_files1  

有时,Scalpel 会恢复部分文件。这取决于驱动器的运行状况以及损坏的数据量。

此外,您可以使用许多渴望算法,但我们在这里讨论了渴望数据的基本方法。

 

从不可启动的系统恢复文件

这是一个微妙的情况,因为我们需要从 Ubuntu 或其他类似的 Linux 发行版的 Live CD 进行访问。启动后,我们可以使用 TestDisk 来尝试恢复数据。

在这种情况下,我们必须使用外部驱动器来保存数据。另一方面,如果TestDisk无法完成这项工作,我们也可以尝试extundelete或ext4magic,只要分区是Ext4即可。

如果它不起作用,您可以尝试使用 TestDisk 重新生成分区,如上所述。

 

结论

有可能意外删除文件。我们的想法是了解恢复这些文件的适当工具和技术。

在这篇文章中,我们介绍了可以帮助避免此类问题的几种情况和不同的文件系统。

继续回来。

谢谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Linux 上恢复已删除的文件(初学者教程) 的相关文章

  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误
  • 使用 --prof 选项创建多个日志文件而不是一个 v8.log 的节点

    我正在尝试使用 prof 选项来分析我的 Node 应用程序 但我发现不是一个单一的 v8 log 文件 而是使用诸如isolate 0x9582b40 v8 log isolate 0xa1cab78 v8 6049 等前缀创建的多个文件
  • 从哪里获取 iostream.h

    我正在尝试在 Linux 中做一些事情 但它抱怨找不到 iostream h 我需要安装什么才能获取此文件 这个标准头的正确名称是iostream没有扩展名 如果您的编译器仍然找不到它 请尝试以下操作 find usr include na
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • 如何在 bash_profile 文件中添加导出语句?

    我正在尝试了解是否必须添加导出语句来在 bash profile 文件中设置变量 我该怎么做呢 例如 如果我必须添加 export AX name 那么我应该将其简单地写在文件末尾还是我还需要编写其他内容 简单写一下export AS na
  • 打印本周星期一的日期(在 bash 中)

    我想获取本周星期一的 YYYYMMdd 格式的日期 例如 今天是 20110627 从明天到周日 我仍然想打印周一 今天 的日期 然后下周重复这个过程 monday date dmonday Y m d last monday date d
  • 无法连接到 Azure Ubuntu VM - 公钥被拒绝

    我们在 Azure 上使用 Ubuntu VM 一段时间了 很少遇到任何问题 然而 其中一台虚拟机最近出现了问题 出乎意料的是 Ubuntu VM 开始拒绝公钥 ssh i azure key email protected cdn cgi
  • 如何在 Linux 中向热敏打印机发送 ESC/POS 命令

    我正在尝试在热敏打印机上发送 ESC POS 命令 但每当我发送它们时 热敏打印机都会将它们打印为文本 而不是作为命令执行它们 我在 prn 文件中编写这些命令 每当我执行 lp 命令来打印文件时 这些 prn 文件也会被打印 但作为文本
  • 如何将命令输出作为多个参数传递给另一个命令

    我想将命令的每个输出作为多个参数传递给第二个命令 例如 grep pattern input returns file1 file2 file3 我想复制这些输出 例如 cp file1 file1 bac cp file2 file2 b
  • Linux 中的 Windows NAmed Pipes 替代品

    我们正在将现有的 Windows 代码移植到 Linux 我们使用 ACE 作为抽象层 我们使用 Windows 命名管道与多个客户端进行通信并执行重叠操作 linux 下这个相当于什么 我检查了linux命名管道 FIFO 但它们似乎只支
  • 用于 e NetworkManager VPN 连接的 dbus 信号处理程序

    我需要开发一些在建立 VPN 连接时执行的 python 代码 VPN 由 NetworkManager 控制 我试图弄清楚如何为此使用 NM DBUS 事件 使用 dbus monitor system 我能够识别连接信号 signal
  • 虚拟内存澄清——大连续内存的分配

    我有一个应用程序 我必须在 Windows 上分配 使用运算符 new 相当大的内存空间 数百 MB 该应用程序是 32 位 我们现在不使用 64 位 即使在 64 位系统上也是如此 我启用了 LARGEADDRESSAWARE 链接器选项
  • 如何在 Ubuntu/Linux 发行版中安装 Tesseract-OCR 3.03?

    我和一个朋友有兴趣为 CV 项目训练 tesseract OCR 引擎 我们尝试使用一些包装器 例如 PyTesser 和 pyocr 但结果目前不如我们需要的那么准确 因此 我们希望尝试训练超立方体以更好地实现我们的目的 即识别食品标签上
  • gpg:抱歉,根本没有请求终端 - 无法获取输入

    解密时出现以下错误 eyaml decrypt s ENC and the key goes on here gnupg quiet no secmem warning no permission warning no tty yes de
  • SIGHUP 用于重新加载配置

    根据signal 7 SIGHUP用于检测控制终端的挂起或控制进程的死亡 然而 我遇到过很多 OSS 守护进程 服务 其中SIGHUP用于启动配置的重新加载 这里有一些例子 hostapd sshd snort etc 这是实现重新加载的标
  • 重新链接匿名(未链接但打开)文件

    在 Unix 中 可以创建匿名文件的句柄 例如 使用 creat 创建并打开它 然后使用 unlink 删除目录链接 留下一个带有 inode 和存储的文件 但没有可能的方法重新打开它 此类文件通常用作临时文件 通常这就是 tmpfile
  • 使用 Vala 和 GLib 的正则表达式

    有没有一个函数 比如http php net manual en function preg match all php http php net manual en function preg match all php 使用 GLibh
  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015
  • 有没有办法只安装mysql客户端(Linux)? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有不需要安装整个mysql db安装包的Linux mysql命令行工具 我想做的是从服务器 1 应用程序服务器 执行将在服务器 2
  • 如何清理 Runtime.exec() 中使用的用户输入?

    我需要通过命令行调用自定义脚本 这些脚本需要很少的参数并在 Linux 机器上调用 当前版本容易出现各种shell注入 如何清理用户给出的参数 参数包括登录名和路径 Unix 或 Windows 路径 用户应该能够输入任何可能的路径 该路径

随机推荐

  • Apache 中的平滑重启是什么

    Apache HTTP Server 通常称为 Apache 是一种非常流行的开源 Web 服务器软件 在 Web 内容的交付中发挥着重要作用 Apache 非常灵活 允许使用多种关键功能和配置来帮助优化其性能 其中一项重要功能是 平滑重启
  • 如何在 Linux 中使用“find”命令删除 X 天之前修改的文件

    The find Linux 中的命令是一个功能强大的工具 可用于根据各种条件 例如名称 类型 大小和时间戳 搜索文件 查找 命令的一个常见用例是删除超过一定天数的文件 这对于清理旧备份 日志文件或不再需要的其他类型的文件非常有用 在本文中
  • 如何在 CentOS 8 上安装 Anaconda

    Anaconda 是最流行的 Python R 数据科学和机器学习平台 它用于大规模数据处理 预测分析和科学计算 Anaconda 发行版附带 1 500 多个开源数据包 它还包括conda命令行工具和称为 Anaconda Navigat
  • 如何在 Ubuntu 18.04 上安装 Magento 2

    Magento是基于开源技术构建的领先企业级电子商务平台 将强大的功能与灵活性和用户友好的界面相结合 凭借引人入胜的购物体验 灵活的模块化架构以及企业级可扩展性和性能等功能 Magento 是大多数在线商家的首选平台 在本教程中 我们将向您
  • 如何在 Ubuntu 20.04 上安装 Skype

    Skype是世界上最流行的通信应用程序之一 它是跨平台的 可在 Windows Linux 和 macOS 上使用 通过 Skype 您可以免费进行在线音频和视频通话 以及拨打世界各地的手机和固定电话的国际电话 Skype 不是开源应用程序
  • 如何使用 .htaccess 强制使用 HTTPS

    如果您为域安装了 SSL 证书 则下一步应该是将应用程序配置为通过 HTTPS 提供所有 Web 流量 与以明文形式发送和返回请求和响应的 HTTP 不同 HTTPS 使用 TLS SSL 来加密客户端和服务器之间的通信 相对于 HTTP
  • 如何在 CentOS 8 上安装和配置 NFS 服务器

    网络文件系统 NFS 是一种分布式文件系统协议 允许您通过网络共享远程目录 使用 NFS 您可以在系统上挂载远程目录并像使用本地文件一样使用远程计算机上的文件 NFS 协议默认不加密 并且与 Samba 不同 它不提供用户身份验证 对服务器
  • 如何检查 Bash 中文件或目录是否存在

    很多时候 在编写 Shell 脚本时 您可能会发现自己处于需要根据文件是否存在来执行操作的情况 在Bash中 可以使用test命令来检查文件是否存在并判断文件的类型 测试命令采用以下语法形式之一 test EXPRESSION EXPRES
  • 如何在 Python 中分割字符串

    使用字符串时 日常操作之一是使用给定的分隔符将字符串拆分为子字符串数组 在这篇文章中 我们将讨论如何在Python中分割字符串 split 方法 在Python中 字符串被表示为不可变的str对象 这str类附带了许多字符串方法 允许您操作
  • 如何在 Ubuntu 18.04 上安装和配置 Samba

    Samba 是一个免费且开源的重新实现SMB CIFS网络文件共享协议那 允许最终用户访问文件 打印机和其他共享资源 本教程介绍如何在 Ubuntu 18 04 上安装 Samba 并将其配置为独立服务器 以通过网络在不同操作系统之间提供文
  • 如何在 CentOS 7 上安装和使用 Docker Compose

    Docker 组合是一个允许您定义和运行多容器 Docker 应用程序的工具 使用 Compose 您可以在单个 YAML 文件中定义应用程序的服务 网络和卷 然后使用单个命令启动您的应用程序 Compose 可用于不同的目的 例如单主机应
  • 在 Debian 9 上使用 Let's Encrypt 保护 Nginx

    Let s Encrypt 是由互联网安全研究小组 ISRG 开发的免费开放的证书颁发机构 如今 Let s Encrypt 颁发的证书几乎受到所有浏览器的信任 在本教程中 我们将解释如何使用 Certbot 工具为 Debian 9 上的
  • 如何在 Ubuntu 18.04 上安装和配置 GitLab

    GitLab 是一个基于网络的开源Git存储库管理器编写为Ruby包括 wiki 问题管理 代码审查 监控以及持续集成和部署 它使开发人员能够创建 审查和部署他们的项目 GitLab 提供三种不同版本 社区版 CE 企业版 EE 和 Git
  • 如何在 Ubuntu 18.04 上安装 Steam

    Steam是由 Valve 公司开发的用于购买和玩视频游戏的跨平台娱乐平台 它使您可以访问数千种游戏并结识新朋友 在本教程中 我们将向您展示如何在 Ubuntu 18 04 上安装 Steam 相同的说明适用于 Ubuntu 16 04 和
  • Python 中的列表与元组:综合指南

    Python 提供了多种内置数据类型 其中两个是列表和元组 了解这些数据结构的细微差别对于编写高效且有效的 Python 代码至关重要 在本教程结束时 您将能够就何时使用列表以及何时选择元组做出明智的决定 从而提高您在 Python 中处理
  • 使用 to_pickle() 函数将 Pandas DataFrame 导出到 Pickle 文件

    The to pickle函数于Pandas允许您将 DataFrame 或 Series 对象序列化 pickle 为 pickle 文件格式 当您想要保存 DataFrame 或 Series 的当前状态并稍后检索它而不丢失任何数据或元
  • 掌握 Samba:创建强大的 Linux 文件服务器

    Linux 文件服务器是功能强大的服务器之一 可帮助您与基于 Windows 的 PC 和其他操作系统共享文件和打印机 在我们讨论使用 Samba 作为文件服务器之前 我们先讨论一些基础知识 目录 hide 1 Linux Samba Wi
  • Linux Sed 分支:条件文本处理

    分支于sed允许您在 sed 脚本中创建条件工作流程 根据输入或特定条件 sed 可以选择执行一组命令而不是另一组命令 它类似于编程中的 if then else 结构 让我们深入研究一些示例来了解 sed 中的分支机制 目录 hide 1
  • 使用 read_pickle 读取 Pandas 中的 Pickle 文件

    read pickle in Pandas允许您加载腌制的 Pandas 对象 它可以加载数据 例如数据框和使用保存的系列熊猫 to pickle method 在本教程中 我们将揭示其语法 将 pickle 文件加载到 DataFrame
  • 在 Linux 上恢复已删除的文件(初学者教程)

    您是否曾经错误地删除过重要文件 谁不呢 好的 但是我可以恢复它们吗 在这篇文章中 您将了解如何使用不同文件系统上的各种程序在 Linux 上恢复已删除的文件 您将了解如何从 SD 卡 HDD 和不同分区上的已删除分区恢复已删除的文件Linu