【发布时间】: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)
编辑:
我尝试过直接使用 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