Linux误删文件可恢复,关键在“快不快”和“对不对”:①进程仍在用文件时用lsof从/proc/pid/fd/恢复,成功率100%;②ext3/ext4用extundelete按路径精准还原,未覆盖时超90%;③XFS或未知文件系统用photorec扫描头尾特征,通用但无文件名。

Linux 恢复误删的重要文件,关键不在“能不能”,而在于“快不快”和“对不对”。文件被 rm 删除后,数据块通常还在磁盘上,只是 inode 被标记为可用——只要没被新数据覆盖,就有机会找回。恢复成功率高度依赖操作时机和文件系统类型,下面分三种最实用、最高成功率的路径讲清楚。
先看进程是否还“抓着”文件(100% 可恢复)
很多误删其实根本没真丢:只要文件正被某个进程打开(比如日志、配置、脚本),内核仍通过 /proc/[pid]/fd/ 保留着访问通道。这是最快、最稳、零风险的恢复方式。
- 运行
lsof +L1或lsof | grep deleted,找出状态为(deleted)的条目 - 记下对应进程 PID 和 fd 编号(如
PID=1234, fd=3) - 执行
cp /proc/1234/fd/3 /path/to/recovered_file直接复制出来
常见于 Web 服务、数据库、后台脚本持续读写日志或配置的场景。哪怕 rm -rf 了,只要服务没重启,就能原样救回。
ext3/ext4 分区用 extundelete(保留原名和路径)
Ubuntu、Debian、CentOS 默认用 ext4,这是目前最推荐的专用恢复工具。它能按路径精准还原,且成功率在未覆盖前提下超 90%。
- 立刻停止向该分区写入(
sudo mount -o remount,ro /dev/sdX1) - 安装:
sudo apt install extundelete(Debian/Ubuntu)或sudo yum install extundelete(RHEL/CentOS) - 恢复单个文件:
sudo extundelete /dev/sdX1 --restore-file /home/user/config.conf - 恢复整个目录:
sudo extundelete /dev/sdX1 --restore-directory /var/www/html
恢复结果默认放在当前目录下的 RECOVERED_FILES/ 中,结构与原始路径一致,无需手动重建层级。
XFS 或不确定文件系统时用 photorec(通用但无文件名)
CentOS Stream、阿里云某些镜像默认用 XFS;或者你不清楚分区类型时,photorec 是兜底选择。它不依赖文件系统元数据,而是扫描磁盘识别文件头尾,兼容性最强,但恢复后文件名丢失、需靠内容或扩展名甄别。
- 安装:
sudo apt install testdisk(photorec 包含在 testdisk 中) - 运行:
sudo photorec,交互式选择磁盘、分区、文件类型(建议勾选全部常用格式) - 恢复出的文件会按类型归类到不同子目录,如
recup_dir.1/zip/、recup_dir.1/jpg/
适合恢复照片、文档、代码等有固定二进制特征的文件,对纯文本或配置文件,可通过 file 命令或 head 查看内容确认。
别跳过的预防动作
恢复是补救,预防才是根本:
- 给
rm加安全层:alias rm='trash-put'(配合trash-cli工具启用回收站) - 关键配置定期备份:
tar -czf /backup/etc-$(date +%F).tar.gz /etc,加 cron 每日执行 - 磁盘告警时先查再删:
du -sh /var/log/* | sort -hr | head -5定位膨胀源,避免手滑
真正重要的不是学会所有命令,而是发现删错后的第一反应:停写、别慌、先查 lsof。











