我有一个无法通过 SSH 删除的文件。
如果我在目录上运行命令,它显然存在,但如果它尝试在文件上ls
运行,它会显示:rm
cannot remove 'database.sql': No such file or directory
如果我检查文件和文件夹的权限,它是777
,所以我应该有权删除它。
如果我运行lsattr
,它会告诉我:
No such file or directory While reading flags on ./database.sql
最后,如果我尝试rm .
再次运行它,它会告诉我:
rm: cannot remove 'database.sql': No such file or directory
不知何故,它既知道该文件在那里(许多命令“看到”它),又无法删除它。
all-in-one-wp-migration/storage/sgmq5lpwyiio>ls -l
total 2327360
-rwxrwxrwx 1 nobody nogroup 2383152307 Jun 3 05:56 database.sql
all-in-one-wp-migration/storage/sgmq5lpwyiio>rm database.sql
rm: cannot remove 'database.sql': No such file or directory
all-in-one-wp-migration/storage/sgmq5lpwyiio>lsattr
lsattr: No such file or directory While reading flags on ./database.sql
all-in-one-wp-migration/storage/sgmq5lpwyiio>rm *.*
rm: cannot remove 'database.sql': No such file or directory
all-in-one-wp-migration/storage/sgmq5lpwyiio>
答案1
当使用某种通配符完成列表期间打印的文件名中的某处存在意外的未注意到的空格或制表符时,我遇到了类似的问题。在某些 shell 中,如果您在命令行上的文件名后键入制表符,它将在末尾填充您可能看不到的字符。您也许可以通过使用wc -c
文件名上的字符计数进行检查,并注意\n
始终计数的未打印字符。
答案2
原因可能是文件所有者和组设置为“nobody”和“nogroup”。 “nobody”用户和“nogroup”用户组在系统上拥有尽可能少的权限。但即便如此,您也应该能够删除该文件。
您对该文件所在的目录有写权限吗?删除文件可能还需要目录的写入权限,因为您要从目录中删除某些内容。您尝试编辑该文件吗?该目录可能没有写入权限,但该文件可能具有写入权限。
正如上面的评论中所述,这可能是文件或系统损坏,或者可能是某个服务正在运行并正在使用该文件。
尝试让chown
您chgrp
成为所有者,并成为您所在组的所有者组。
答案3
可能文件名不正确或包含一些垃圾字符。
尝试
find . -maxdepth 1 -exec printf "'{}'\n" \;
或者
仅列出名称中含有垃圾或空格的文件
printf '%q\n' *[\?\$\*%[:space:]]*