前面介绍过一堆的面试题,大家对恢复已删除的文件如何比较有兴趣。不像windows一样,刚刚删除的文件只是软删除,还有一个回收站可以恢复已删除的文件,那linux有没有类似回收站的方案呢?确实是有的,桌面版的linux默认也提供全局统一的回收站机制,本篇介绍非图形化linux的“回收站”实现方案。
~/.local/share/Trash/ # 回收站在家目录下,不同分区在根目录下,不同用户会带用户uid.Transh/ # 跨分区和跨用户显示的名称会有不├── files/ # 实际文件存放处└── info/ # 对应的 .trashinfo 元数据文件,定义文件被删除时的绝对路径
trash-put # 安全删除(将文件移动到/files目录中)trash-list # 查看回收站trash-restore # 恢复文件
#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.gz0 2026-01-04 01:01:27 /root/zhb.tar.gzWhat file to restore [0..0]: 0[root@test ~]# ls zhb.tar.gzzhb.tar.gz

# 在 ~/.bashrc 中添加alias rm='echo "警告:请使用 trash-put 安全删除!若需强制删除,请用 \rm"'#执行bash,或者退出终端重新进入生效。

# 安装(Python 工具)pip install autotrash# 每天清理超过7天的文件autotrash -d 7# 加入定时任务(crontab -e)@daily /usr/local/bin/autotrash -d 7
#!/bin/bash# 保存为 ~/bin/trash.shTRASH_DIR="$HOME/.trash"mkdir -p "$TRASH_DIR"for file in "$@"; doif [ -e "$file" ]; thentimestamp=$(date +%Y%m%d%H%M%S)mv "$file" "$TRASH_DIR/$(basename "$file")_$timestamp"elseecho "文件不存在: $file"fidone
chmod +x ~/bin/trash.sh~/bin/trash.sh myfile.txt# 如果要恢复文件,可以到trash 目录下cp恢复到原始文件
如果文件已被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 运维中的实用技巧和工具,希望能为你的日常工作带来帮助。
系统稳定,始于细节;运维之道,贵在积累。
🔹 欢迎点赞 + 在看 + 转发,让更多同行看到!
🔹 关注本号,持续更新 Linux、Shell、云计算等技术干货!
🔹 留言区开放:你在实践中遇到过哪些运维问题?欢迎交流!