我对以下行为有点困惑(Linux、Debian 8.3、ext2 文件系统)
test@linux:~$ ls -ld directory/ file
drwxr-xr-x 2 root root 4096 Mar 10 18:51 directory/
-rw-r--r-- 1 root root 8 Mar 10 18:51 file
test@linux:~$ ls -ld target_directory/
drwxr-xr-x 2 test test 4096 Mar 10 18:47 target_directory/
test@linux:~$ mv file target_directory/
test@linux:~$ mv directory/ target_directory/
mv: cannot move ‘directory/’ to ‘target_directory/directory’: Permission denied
directory/
如果为空,情况也是如此。有趣的是:rmdir directory/
在这种情况下有效。
为什么?很高兴知道为什么mv
文件和目录的行为如此不同,以至于两者都没有写权限。
实际上,本着“授人以鱼……”的精神,请毫不犹豫地向我推荐一本解释这一点和权限系统的书正确地因为(小咆哮)我经常看到类似的东西(来自一本著名的 Linux 书籍):
$ ls -ld ch3 test -rw-rw-r-- 1 joe sales 4983 Jan 18 22:13 ch3 drwxr-xr-x 2 joe sales 1024 Jan 24 13:47 test
第一行显示该
ch3
文件具有所有者和组的读写权限。所有其他用户都具有读取权限,这意味着他们可以查看该文件,但无法更改其内容或将其删除。
PS/警告:是的,上面段落中的描述实际上是错误的。不要告诉我这个或“纠正”该帖子。我在这里引用它只是为了说明人们对这个问题的了解有多少。
答案1
删除目录或者文件只与目录的权限有关包含要删除的文件/目录。文件/目录本身的权限是无关的。因此,为什么你可以删除directory
使用rmdir
,即使它属于root
:您没有在输出中显示它,但您显然对该目录具有读取、写入和执行权限包含 directory
。
我在其他地方写过更多关于目录上的每个单独权限到底可以让您完成什么任务。
至于为什么不能入住directory
,target_directory
我不太清楚。我无法在我的盒子上重现这个。造成这种情况的原因有很多,从设置扩展属性directory
到可能target_directory
是一个单独的文件系统的安装点,而不是包含该文件系统的安装点。directory
。 然而,权限本身并不是原因。
(PS:下次选择更好的示例名称;使用名称“目录”和“文件”会使尝试描述正在发生的事情变得非常烦人。)
答案2
可能是因为移动directory
intotarget directory
改变了..
里面的条目directory
,并且由于不允许写入 in directory
,所以这是不允许的?
我对我的目录经历了同样的情况(并且与OP类似地感到困惑),但未设置所有者写入权限。只需chmod u+w
在目录上设置即可让我允许移动(在同一分区上,无需复制和删除)。读完这篇文章后,让我意识到了上述情况。它充分解释了为什么文件不存在这样的问题。