为什么我的`mv`目录没有额外的写权限

时间:2019-03-13 02:05:02

标签: linux unix permissions

我对权限的理解今天已被破坏。

evaben@evaben /t/test> ll
total 16K
drwxr-xr-x  4 evaben evaben 4.0K Mar 13 12:44 ./
drwxrwxrwt 19 root   root   4.0K Mar 13 12:43 ../
drwxr-xr-x  2 evaben evaben 4.0K Mar 13 12:44 mine/
drwxr-xr-x  2 root   root   4.0K Mar 13 12:44 theirs/

我拥有CWD和mine,并且对两者都有写权限。

evaben@evaben /t/test> mv mine theirs/
mv: cannot move 'mine' to 'theirs/mine': Permission denied

我当然不能将目录移到它们的目录中;我在theirs中没有写权限。

evaben@evaben /t/test [1]> mv theirs/ mine/
mv: cannot move 'theirs/' to 'mine/theirs': Permission denied

为什么我不能将theirs移到mine中?我可以编写CWD和目标(mine)。我不会以任何方式修改theirs

evaben@evaben /t/test [1]> sudo chmod o+w theirs/
evaben@evaben /t/test> mv theirs/ mine/
(works)

如果我拥有他们的写许可,我可以制作MV。

维基百科的解释是:

  

为目录设置时,此(写)权限授予该功能   修改目录中的条目(包括创建文件),   删除文件,然后重命名文件。

Arch Wiki声明类似,这似乎加强了我的(显然是错误的)理解。

为了进一步遮盖我的大脑,它可以像我期望的那样工作:

evaben@evaben /t/test> ll
total 12K
drwxr-xr-x  3 evaben evaben 4.0K Mar 13 13:04 ./
drwxrwxrwt 19 root   root   4.0K Mar 13 12:43 ../
drwxr-xr-x  3 evaben evaben 4.0K Mar 13 13:03 mine/
-rw-r--r--  1 root   root      0 Mar 13 13:04 their_file
evaben@evaben /t/test> mv their_file mine/
(worked)

wiki archwiki

编辑:

我尝试直接使用重命名(2)。

rename("theirs", "mine");

Works IFF mine为空。 -有效地取代了我的。如果我有文件; ENOTEMPTY 39 Directory not empty

rename("theirs", "mine/theirs");

给出EACCES 13 Permission denied。这既是我想要做的,也是mv所提供的-显然不是mv中的错误(据我所知仍然是错误)。

2 个答案:

答案 0 :(得分:1)

我认为rename(2)手册页中的解释如下:

ERRORS
       EACCES Write permission is denied for the directory containing oldpath or newpath, or, search per‐
              mission  is  denied for one of the directories in the path prefix of oldpath or newpath, or
              oldpath is a directory and does not  allow  write  permission  (needed  to  update  the  ..
              entry).  (See also path_resolution(7).)

显然,为了将theirs移至mine,您需要具有更新..上的theirs链接的权限。

答案 1 :(得分:-1)

  

“我不会以任何方式修改theirs。”

不太正确。 mv过程的一部分是从其原始位置删除文件。这意味着您需要该原始位置的写权限,而您没有该权限。尝试改用cp