почему я не могу `mv` каталог без дополнительных прав записи - PullRequest
0 голосов
/ 13 марта 2019

Мое понимание разрешений сегодня нарушено.

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

РЕДАКТИРОВАТЬ:

Я пытался использовать переименовать (2) напрямую.

rename("theirs", "mine");

Работает IFF mine пусто.- фактически моя заменена моей.Если у меня есть файлы;ENOTEMPTY 39 Directory not empty.

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

Дает EACCES 13 Permission denied.И это то, что я хочу сделать, и то, что дает mv - так что, очевидно, не ошибка в mv (все еще ошибка в моем понимании).

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Я думаю, что man-страница 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.

0 голосов
/ 13 марта 2019

«Я не изменяю theirs никаким образом.»

Не совсем правильно. Частью процесса mv является удаление файла из его исходного местоположения. Это означает, что вам нужно разрешение на запись для этого исходного местоположения, которого у вас нет. Попробуйте использовать cp вместо.

...