Linux回收站
在Ubuntu或其他Linux桌面环境中,用户常依赖图形界面的“清空回收站”功能来永久删除文件。然而,许多用户发现操作后磁盘空间并未释放,甚至能通过数据恢复工具找回文件。
这一现象背后,是Linux回收站机制与文件存储原理的共同作用。本文将深入剖析其工作原理及解决方案。
Linux回收站的核心机制
- 回收站的物理结构
Linux回收站并非一个独立分区,而是一个隐藏目录:
- 路径:
~/.local/share/Trash/
(用户级)或系统级/.Trash-[UID]/
- 子目录:
- files/:存放实际被删除的文件副本;
- info/:存储元数据文件(.trashinfo),记录文件的原始路径、删除时间等信息;
- expunged/:处理权限冲突文件或立即删除操作的临时中转区,文件进入后即被永久清除。
“删除”的本质:文件移动而非擦除
当用户点击“删除”时:- 文件从原始位置移动到files/目录;
- 在info/目录生成对应的.trashinfo元数据文件;
- 文件仍占用磁盘空间,但路径被隐藏。
“清空回收站”的操作逻辑
执行清空操作时:- 系统删除files/目录下的文件;
- 同步删除info/目录中的元数据文件;
- 但文件内容可能未被物理覆盖,仅被标记为“可被新数据占用”。
- 当删除的文件夹内含其他用户创建的文件或用户使用Shift+Delete永久删除或权限不足导致无法移入回收站时,冲突文件被移入expunged/。
跨分区删除的特殊性
问题:在非Home分区(如外置硬盘)删除文件时:
- 文件进入该分区的.Trash-1000目录而非用户主目录回收站。
- 图形界面回收站(如Nautilus)默认仅显示Home回收站内容,可能导致用户误判文件已消失。
手动清理expunged目录
若需立即释放空间(如磁盘已满),可手动清理:
1 | # 1. 检查expunged目录大小 |
实战
检查存储空间大小:
切换工作目录到home/[user]
目录下:
1 | cd /home/[user]/ |
检查Trash文件大小:
1 | $ sudo du -h -d 1 ./.local/share/Trash/ |
可以发现,expunged
中的文件占很大空间,对其进行手动删除:
1 | sudo rm -rf ~/.local/share/Trash/expunged/* |
重新检查Trash文件大小:
1 | $ sudo du -h -d 1 ./.local/share/Trash/ |
检查存储空间大小: