Linux: установить разрешение только для каталогов
Мне нужно изменить разрешения каталога htdocs
в apache на определенную группу и с помощью определенных операций чтения/записи/выполнения.
В каталогах должно быть 775 разрешений, а файлы должны иметь 664.
Если я рекурсивный 664 на htdocs
, то все файлы и каталоги будут изменяться на 664.
Я не хочу менять каталоги вручную.
Есть ли способ изменить только файлы или каталоги?
Ответы
Ответ 1
Используйте опцию find -type
, чтобы ограничить действия файлами и каталогами. Используйте параметр -o
, чтобы указать альтернативные действия для разных типов, поэтому вам нужно запускать find
один раз, а не отдельно для каждого типа.
find htdocs -type f -exec chmod 664 {} + -o -type d -exec chmod 775 {} +
Ответ 2
chmod
может фактически сделать это сам; символическое разрешение X
означает "выполнить, если это имеет смысл", что обычно означает каталоги, но не файлы. Итак, вы можете использовать:
chmod -R u=rwX,go=rX /path/to/htdocs
Единственная потенциальная проблема заключается в том, что если какой-либо из простых файлов уже имеет установленный набор, chmod
предполагает его намеренное и сохраняет его.
Ответ 3
Используйте find
для поиска каталогов и применения chmod на них:
find -type d | xargs chmod 775
Использовать тип f
для файла:
find -type f | xargs chmod 775
Ответ 4
Ответ Gordon выше правильно, но если вы пытаетесь заблокировать доступ к дереву каталогов, он оставляет исполняемые исполняемые файлы для владельца также исполняемым для тех, кому предоставлен капитал X.
Используя
find -type d exec chmod 775 {} +
или
find -type d exec chmod 755 {} +
безопаснее.
Ответ 5
попробовать:
find htdocs -type d -exec chmod 775 {} +
Ответ 6
Я использую нечто похожее на решение, предоставленное Гордоном:
chmod -R ug=rw,o=r,a+X /path/to/folder/
Он всегда должен устанавливать 775 для папок и 664 для файлов, даже если разрешение на выполнение было предварительно установлено для некоторого файла