当我今天访问我的 Ubuntu 16.04 服务器并想要删除文件“test2”时,它根本没有被删除!
我用过
rm test2
Run Code Online (Sandbox Code Playgroud)
也
rm -f test2
Run Code Online (Sandbox Code Playgroud)
但它仍然没有删除它,您可以在这里阅读:
root@icinga:~# ls
basket desd.save packages scripts src test2 test5 unused
root@icinga:~# rm test2
root@icinga:~# ls
basket desd.save packages scripts src test2 test5 unused
root@icinga:~# rm -f test2
root@icinga:~# ls
basket desd.save packages scripts src test2 test5 unused
Run Code Online (Sandbox Code Playgroud)
我也尝试过删除其他文件,但没有成功!
我是“test2”的所有者,使用ls -la test2你可以看到我有读写这个文件的权限!
root@icinga:~# ls -la test2
-rw-r--r-- 1 root root 9 Nov 11 20:33 test2
Run Code Online (Sandbox Code Playgroud)
使用which rm它说/bin/rm。
root@icinga:~# which rm
/bin/rm
Run Code Online (Sandbox Code Playgroud)
而且也不\rm test2删除文件!
我还检查了名称,末尾没有空格等,因为当我使用时cat test2会显示正确的内容!
我也可以创建一个新文件,但也无法删除它。
rm也不是别名,我使用过unalias rm,但它说“rm:未找到”。
重新启动也没有帮助。
我遇到的问题是我不小心删除了文件而不是移动它,因此我创建了一个脚本,只需将文件移动到某个目录即可。
然后我使用nano /etc/environment并添加了该脚本所在的“:/root/scripts”!
之后,我使用创建了别名 rms alias rms='./rm'。我知道像系统命令一样命名文件可能很愚蠢,我已经将其更改为删除!
但是在完成所有这些之后,出现了错误,找不到 rm,可以在以下包中找到:coreutils。所以我尝试了 apt-get install coreutils 但它说它已经安装了。
所以我先用touch /bin/rm,然后chmod +x /bin/rm。
之后就出现了这个问题!
编辑:问题是/bin/rm文件是空的,所以我设置了一个虚拟机并将所需的文件复制到服务器!
要删除文件,您需要能够在包含该文件的目录中进行修改(写入)。如果该文件没有被删除,那么您可能没有在该目录上写入的权限。这可能是因为该文件位于只读文件系统上,但更可能的是您没有该目录的写入权限。使用rm -f抑制错误消息(和提示)。
另一种可能性(可能不是这里的情况)是文件名末尾有空格或其他不可见字符,并且您指定为文件的名称实际上并不存在(文件是“”test2而不是“ test2"; 或者可能是 " test1<bs>2",其中<bs>代表退格键,或者 \xe2\x80\xa6 (有无数种方法会遇到问题)。
重新运行rm test2;响应提示;查看错误消息。
或者ls -ld .在包含该文件的目录中运行并查看权限,但请记住,ACL(访问控制列表)和扩展属性可能会使您更难确定您的权限(尽管同样,它们不太可能成为影响因素)在问题中)。