当我尝试使用“rm -rf”删除目录时,我不断收到“目录不为空”的提示。我感到很困惑,我查看了原因,发现似乎有一个“僵尸”文件卡在那里。我不知道如何删除它。fdisk 是我唯一的解决方案吗?
# rm -rf noc
rm: cannot remove directory `noc/INBOX/#msgs': Directory not empty
# rm -rf noc/INBOX/#msgs/000201E5.eml
# rm -rf noc
rm: cannot remove directory `noc/INBOX/#msgs': Directory not empty
# rm noc/INBOX/#msgs/000201E5.eml
rm: cannot remove `noc/INBOX/#msgs/000201E5.eml': No such file or directory
# cd noc/INBOX/#msgs/
# ls -la
ls: cannot access 000201E5.eml: No such file or directory
total 2248
drwx------ 2 root root 2293760 2013-08-27 21:55 .
drwx------ 3 root root 4096 2013-08-27 21:55 ..
-????????? ? ? ? ? ? 000201E5.eml
# ls -iN | cat -A
6346412 000201E5.eml$
# find . -inum 6346412 -exec rm -i {} \;
find: `./000201E5.eml': No such file or directory
# unlink 000201E5.eml
unlink: cannot unlink `000201E5.eml': No such file or directory
答案1
你应该首先卸载并使用它fsck
来检查文件系统是否损坏。
如果这不能修复它,那么您可以尝试手动检查文件系统。
该unlink
命令只是调用系统unlink()
函数。由于它返回错误No such file or directory
,因此您可以先查看目录结构中关于文件的具体内容。
ls
使用readdir()
调用,并返回尝试读取目录条目的错误。您必须getdents()
直接使用调用来读取目录。幸运的是,有一个完整的示例,man 2 getdents
您可以编译和使用,而无需修改任何内容。