Ubuntu 22.04执行错误find命令误删文件后,磁盘仍显示占用但无法查看文件的恢复求助
兄弟,先别慌!我来帮你一步步分析和尝试找回文件:
首先得说,你执行的find . capcut "*.bak" -type f -delete命令明显写错了——正确的写法应该用-name参数指定文件名匹配,比如find . -name "*.bak" -o -name "*capcut*" -type f,你没加参数的情况下,capcut和"*.bak"被当成了搜索路径,导致find遍历所有文件并删除,这才出了问题。
不过好在磁盘显示还有占用,说明你的文件很大概率还在,可能是下面几种情况,我们逐一排查:
先检查回收站
普通用户误删的文件通常会进回收站,你可以打开终端,输入ls ~/.local/share/Trash/files/看看有没有你的文件;如果是用root权限执行的删除命令,就去/root/.local/share/Trash/files/目录下找。找到的话直接复制出来就行。查找被进程占用的已删除文件
有些文件被删除后,如果还有程序在打开它,磁盘空间就不会被释放,系统也不会显示这些文件。你可以用这个命令查看:lsof | grep deleted输出里会显示进程ID(PID)和文件描述符(FD),比如看到某行是
chrome 1234 user 3u REG 8,1 102400 1234567 /home/user/file.txt (deleted),那你就可以用cp /proc/1234/fd/3 ~/recovered_file.txt把文件恢复到你的用户目录下。用数据恢复工具抢救
这是最关键的一步,因为现在磁盘数据还没被覆盖,赶紧用专业工具恢复:- Photorec(推荐):这是testdisk套件里的工具,支持多种文件系统。先安装:
然后运行sudo apt install testdisksudo photorec,按照提示选择你的目标分区,然后选择恢复文件保存的位置(一定要选外接U盘或者其他分区,绝对不能选当前被误删的分区,不然会覆盖数据!),然后等待扫描恢复就行。 - extundelete:如果你的分区是ext4这类ext文件系统,可以用这个工具:
先通过sudo apt install extundeletedf -h找到你的分区路径(比如/dev/sda2),然后执行:
恢复的文件会放在当前目录的sudo extundelete /dev/sda2 --restore-allRECOVERED_FILES文件夹里,同样要确保当前目录不在被误删的分区上。
- Photorec(推荐):这是testdisk套件里的工具,支持多种文件系统。先安装:
排查挂载点问题
有时候可能是挂载错误导致文件被隐藏,比如某个外接磁盘挂载到了你的用户目录下,原来的文件就被覆盖隐藏了。你可以用df -h查看所有挂载点,或者尝试临时卸载某个可疑的挂载点:sudo umount /mnt/your_mount_point然后看看原来的目录里是不是出现了文件。
最后提醒下:以后执行删除类的find命令,一定要先不带-delete参数跑一遍,确认找到的文件是你要删的,再加上删除参数,比如先执行find . -name "*.bak" -type f,没问题再改成find . -name "*.bak" -type f -delete,这样能避免误删!
备注:内容来源于stack exchange,提问作者user1963160

