linux如何找回删除的文件
linux如何找回删除的文件详细介绍
在 Linux 系统中,删除的文件并非立即从磁盘彻底清除,若未被新数据覆盖,可通过以下方法尝试恢复。以下是详细步骤:
一、前提条件
- 立即停止操作:删除文件后,切勿对文件所在的分区进行写入操作(如新建文件、复制数据等),避免覆盖数据。
- 确认文件系统类型:常见的 Linux 文件系统如
ext4、ext3、xfs、ntfs等,不同文件系统需使用不同工具。
二、通过 lsof 恢复被删除但仍被进程打开的文件
如果文件被删除前已被某个进程打开(如文本编辑器未保存时删除文件),可通过以下命令找回:
- 列出所有被删除但仍打开的文件:
bashdeleted输出示例:
plaintextvim 1234 user 3r REG 8,1 12345 67890 /path/to/deleted_file (deleted)其中,
3r中的数字(如3)是文件描述符。 - 复制文件描述符到恢复路径:
bash/proc/1234/fd/3 /path/to/recovered_file(将
1234替换为进程 ID,3替换为文件描述符)
三、使用 extundelete 恢复 ext3/ext4 文件系统的文件
适用于 ext4、ext3 等日志型文件系统,需提前安装工具:
- 安装
extundelete:- Ubuntu/Debian:bash
extundelete - CentOS/RHEL:bash
yum extundelete
- Ubuntu/Debian:bash
- 卸载分区(可选):
若文件位于已挂载的分区(如/dev/sda1挂载到/mnt),建议先卸载以避免写入:
bash/mnt - 扫描分区并恢复文件:
bashextundelete /dev/sda1 --restore-all- 若需恢复单个文件:bash
extundelete /dev/sda1 --restore-file
恢复的文件会生成在当前目录的
RECOVERED_FILES目录中。 - 若需恢复单个文件:bash
四、使用 foremost 进行数据恢复(通用工具)
foremost 基于文件签名扫描磁盘,支持多种文件系统和文件类型:
- 安装
foremost:
bashforemostdnf foremost
- 扫描分区并恢复:
bashforemost all /dev/sda1-t all:扫描所有支持的文件类型(图片、文档、视频等)- 恢复的文件会保存在当前目录的
output目录中。
五、使用 testdisk 修复分区或恢复删除的文件
testdisk 主要用于修复分区表,也可恢复删除的文件(尤其适合误删整个分区的情况):
- 安装
testdisk:
bashtestdiskdnf testdisk
- 启动工具并选择分区:
bashtestdisk按提示选择 “Advanced” → 目标分区 → “Undelete”,勾选需要恢复的文件,按
C复制到指定目录。
六、其他注意事项
- 非
ext文件系统的恢复:- XFS:依赖备份(如
xfsdump),或使用xfsrestore恢复;直接恢复较复杂,可尝试photorec(testdisk附带工具)。 - NTFS:使用
ntfsundelete或foremost。
- XFS:依赖备份(如
- 根分区的恢复:
若删除的文件在根分区(/),需在单用户模式或从 Live CD 启动后操作,避免系统进程写入数据。 - 数据备份的重要性:
定期使用rsync、tar或备份工具(如borgbackup)进行备份,是避免数据丢失的最佳方案。
总结步骤
- 立即停止对目标分区的写入操作。
- 根据文件系统类型选择工具:
ext3/ext4:优先extundelete。- 通用场景:
foremost或testdisk/photorec。 - 仍被进程打开:
lsof复制文件描述符。
- 恢复后验证文件完整性。
通过以上方法,可在数据未被覆盖前尽可能找回删除的文件。若多次尝试失败,建议使用专业数据恢复服务。