【问题标题】:why can't I `mv` a directory without extra write permissions为什么我不能在没有额外写权限的情况下`mv`一个目录
【发布时间】:2019-08-03 14:55:56
【问题描述】:

今天我对权限的理解被打破了。

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 和 dest (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

编辑:

我尝试过直接使用 rename(2)。

rename("theirs", "mine");

Works IFF mine 为空。 - 实际上我的取代了我的。如果我的有文件; ENOTEMPTY 39 Directory not empty.

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

EACCES 13 Permission denied。这既是我想要做的,也是 mv 给出的 - 所以显然不是 mv 中的错误(在我的理解中仍然是一个错误)。

【问题讨论】:

  • 您是否尝试过更改所有者? sudo chown -R evaben:evaben root-directory
  • 谢谢@PabloDarde,我不想做任何事情,我想了解为什么事情不能按照解释的方式工作。
  • Stack Overflow 是一个编程和开发问题的网站。对于这个问题,您可能应该使用Stack Exchange network 上的另一个站点。另见Permissions required to move file to different directory in Unix/Linux 和朋友。之前在网上问了很多次,也回答了很多次...

标签: linux unix permissions


【解决方案1】:

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

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

【讨论】:

  • 我有一个反驳,我可以rm their_file - 删除文件是修改包含文件夹,而不是文件。我也可以rmdir their_folder,所以文件夹规则不一样。
  • 抱歉,我的回答不清楚。您需要对“原始位置”(即包含文件夹/目录)的写入权限进行编辑以澄清。谢谢!
【解决方案2】:

我认为 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 上的.. 链接。

【讨论】:

  • 很好的答案,TIL unix 文件层次结构是双向链接的
猜你喜欢
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 2011-06-30
  • 1970-01-01
  • 2020-08-12
  • 2022-11-28
相关资源
最近更新 更多