Разрешение только для записи для каталога не позволяет переименовывать (перемещают) файлы внутри?

find не пропустит точечные файлы, таким образом, .[^.]* (.[!.]* в стандартном синтаксисе), избыточно и заставит те файлы быть обработанными дважды (и каталоги для происхождения дважды). (также отметьте это .[!.]* файлы промахов называют ..foo например).

Однако find по умолчанию, не убывает в символьные ссылки на каталоги. Итак, если media символьная ссылка на область снаружи ., файлы там не будут обработаны.

Можно использовать -L для сообщения находят для следования за символьными ссылками. Обратите внимание однако, что это также вызовет chmod быть названным для файлов, которые являются символьными ссылками на регулярные файлы.

sudo find -L . -type f -exec chmod 664 {} +

Или с некоторыми find/xargs реализации:

find -L . -type f -print0 | sudo xargs -r0 chmod 664

Вопреки тому, что было сказано здесь, xargs и find -exec + будет заботиться о разделении списка аргументов chmod если это является слишком большим.

Однако нужно отметить, что предел, о котором мы говорим здесь, является кумулятивным размером аргументов, и среда передала команде (к execve(2) системный вызов).

find и xargs удостоверится, что тот предел не достигнут (и отпуск немного поля), но если Вы выполняете его как:

find . -type f -print0 | xargs -r0 sudo chmod 644

вместо:

find . -type f -print0 | sudo xargs -r0 chmod 644

sudo команда (названный xargs) получит все аргументы для передачи chmod и также передаст a SUDO_COMMAND переменная среды к chmod это содержит список файлов другое время, таким образом, он будет о дважды размере arg+env, переданного chmod и объяснил бы, почему предел превышен.

7
13.04.2017, 15:36
1 ответ

x дает вам доступ к входящим в каталог файлам (что означает, что вы можете видеть их разрешения и, в соответствии с ними, иметь доступ к содержимому), но вы все равно ничего не можете изменить в каталоге; каталог на самом деле является чем-то вроде файла, и для того, чтобы изменить что-то в нем, вам нужно разрешение w.

Да.

Но зачем нужен x для создания (вы можете попросить систему создать файл, не раскрывая его содержимое?) и переименования/перемещения файла (когда вы перемещаете файл, вы никак его не меняете, вы изменяете только записи в каталогах и их количество в коде?)?

Без x, вы можете влиять только на сам каталог - вы видите каталог снаружи. Без x записи каталога для вас выходят за рамки. Если вы хотите добавить, удалить или изменить (например, переименовать) запись в справочнике, вы должны иметь доступ к этой записи.

Разрешения на файл определяют, что вы можете делать с его содержимым. Разрешения на запись в записной книжке определяют, что можно сделать с записью в записной книжке для файла, поскольку записи в записной книжке - это содержимое записной книжки.

Разрешение на запись в записную книжку позволяет создавать и удалять записи. Переименование считается атомическим созданием записи и удалением другой записи. Кроме того, каталоги имеют те же метаданные, что и обычные файлы. Разрешение на запись также позволяет изменять последнее изменение каталога и последние метки времени доступа. Для изменения прав доступа к каталогу, группового владения или списков контроля доступа (где это поддерживается), вам нужно владеть им. Для изменения прав собственности пользователя большинство unix-вариантов требуют root.

6
27.01.2020, 20:18

Теги

Похожие вопросы