当前位置:首页>Linux>linux中恢复刚删除的文件

linux中恢复刚删除的文件

  • 2026-08-27 21:11:51
linux中恢复刚删除的文件

前面介绍过一堆的面试题,大家对恢复已删除的文件如何比较有兴趣。不像windows一样,刚刚删除的文件只是软删除,还有一个回收站可以恢复已删除的文件,那linux有没有类似回收站的方案呢?确实是有的,桌面版的linux默认也提供全局统一的回收站机制,本篇介绍非图形化linux的“回收站”实现方案


1
认识trash-cli
trash-cli是linux桌面操作系统的通用规范(FreeDesktop.org标准)。标准规范就是说根据这个规范实现的方案基本原理都相同,定义了图标主题、菜单结构、通知系统、回收站规范等。其中通过trash-cli实现的回收站核心目标是,避免rm式永久删除,支持多用户、多磁盘、网络磁盘等场景,允许多用户还原文件到原始位置。
回收站目录结构:
删除的文件存放在files目录中,元数据写入info目录中。
~/.local/share/Trash/   # 回收站在家目录下,不同分区在根目录下,不同用户会带用户uid .Transh/        # 跨分区和跨用户显示的名称会有不├── files/      # 实际文件存放处└── info/       # 对应的 .trashinfo 元数据文件,定义文件被删除时的绝对路径 
常用命令
trash-put             # 安全删除(将文件移动到/files目录中)trash-list            # 查看回收站trash-restore         # 恢复文件
安装trash-cli,以centos7.9为例,麒麟也是一样。需要额外安装trash-cli程序。
#ubuntuapt install  trash-cli#centos pip安装,或者源码安装 pip install trash-cli
安装完成以后就可以直接使用了,如下操作:
[root@test ~]# find / -name Trash/root/.local/share/Trash[root@test ~]# trash-put  zhb.tar.gz[root@test ~]# trash-list2026-01-04 01:01:27 /root/zhb.tar.gz[root@test ~]# ls zhb.tar.gzls: 无法访问zhb.tar.gz: 没有那个文件或目录[root@test ~]# trash-restore zhb.tar.gz   0 2026-01-04 01:01:27 /root/zhb.tar.gzWhat file to restore [0..0]: 0[root@test ~]# ls zhb.tar.gzzhb.tar.gz
安装了trash-cli以后,rm就可以不用了,配置别名提醒。
# 在 ~/.bashrc 中添加alias rm='echo "警告:请使用 trash-put 安全删除!若需强制删除,请用 \rm"' #执行bash,或者退出终端重新进入生效。 
自动清理过期文件,可以根据自己的需求设置一个比较合理的过期时间,比如7天,或者30天清理掉Trash目录下的files和info下的文件。
# 安装(Python 工具)pip install autotrash# 每天清理超过7天的文件autotrash -d 7# 加入定时任务(crontab -e)@daily /usr/local/bin/autotrash -d 7

2
通过脚本实现回收站功能
如果不想额外安装trash-cli程序,可以写一个脚本实现回收站的功能。
#!/bin/bash# 保存为 ~/bin/trash.shTRASH_DIR="$HOME/.trash"mkdir -p "$TRASH_DIR"for file in "$@"do    if [ -e "$file" ]; then        timestamp=$(date +%Y%m%d%H%M%S)        mv "$file" "$TRASH_DIR/$(basename "$file")_$timestamp"    else        echo "文件不存在: $file"    fidone
赋予执行权限
chmod +x ~/bin/trash.sh
使用
~/bin/trash.sh myfile.txt# 如果要恢复文件,可以到trash 目录下cp恢复到原始文件 

3
恢复rm刚删除的文件

如果文件已被rm永久删除(未进回收站),仍有希望恢复,但成功率取决于是否有被进程占用写入新数据中:

  • ext3/ext4 文件系统:用 extundelete

  • 正在被进程使用的文件:用 lsof | grep deleted + /proc/PID/fd/

  • 通用恢复工具:testdisk、photorec

文件删除不等于就直接消失了,如果读取这个文件的进程在删除前执行的,那么它依旧可以继续读取数据,也就是说此时这个文件虽然被另外一个进程删除了,但是它的Inode会一直存在,直到读取这个文件的所有进程都已结束。当然如果这个读取文件的这个进程还没有结束,删除的文件依旧可以还原回来。

# 确定tailf这个进程的进程idps -elf| grep tail# 或者通过lsof查看该文件被哪个进程占用,fsuer也可以查看文件被谁占用# 也还可以使用lsof | grep "(deleted)" 或 lsof +L1查看谁在使用已删除的文件# lsof | grep deletedlsof /var/log/audit/audit.log# 从文件标识符fd中恢复cd /proc/进程id/fd/cp /proc/进程id/fd/3 /var/log/audit/audit.log

有个例外情况,如果该文件在你执行rm删除的时候,只有tailf进程在查看且已经读到了最后的EOF,也没有被写入的进程占用,那你执行rm删除操作的时候,tailf也会自动结束,该文件就无法被正常恢复了。

内容推荐:

面试linux系统运维工程师需要知道的知识点整理(1)

文件写入磁盘时,linux系统做了些什么?

操作系统Centos和openEuler有什么不同点

 linux安全 云主机常见的安全配置

 局域网内部配置ubuntu apt本地软件源

 linux系统中用一次忘一次的命令

Linux 网络配置利器:nmcli 与 ip 命令指南

云计算平台虚拟机镜像定制化生成方案

——订阅内容集合不迷路——

持续分享了 Linux 运维中的实用技巧和工具,希望能为你的日常工作带来帮助。


系统稳定,始于细节;运维之道,贵在积累。

🔹 欢迎点赞 + 在看 + 转发,让更多同行看到!

🔹 关注本号,持续更新 Linux、Shell、云计算等技术干货!

🔹 留言区开放:你在实践中遇到过哪些运维问题?欢迎交流!

最新文章

随机文章