Как изменить файловые разрешения для каталога одной командой
Как изменить все файловые разрешения директории в одной команде в Unix?
Как изменить все файловые разрешения директории в одной команде в Unix?
Чтобы изменить разрешения на запись в файле или каталоге не рекурсивно, используйте команду chmod
(см. man chmod для более подробного ознакомления с ее конкретными опциями):
Чтобы изменить владельца файла/каталога рекурсивно (затрагивая всех потомков):
chmod +x dir # Set a directory to be listable
chmod +x file # Set a file to be executable
Чтобы изменить биты разрешений для всех файлов в каталоге, рекурсивно:
chown -R username dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group
Чтобы изменить биты разрешений всех каталогов:
find dir -type f -exec chmod 644 {} ';' # make all files rw-r-r-
Было бы здорово, если бы вы могли это сделать:
find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x
Однако, у этого есть проблемы. Файлы и каталоги обрабатываются одинаково. Команда, приведенная выше, делает каталоги перечисляемыми и читаемыми всеми пользователями, но она также делает все файлы исполняемыми, что, как правило, является тем, что вы не хотите делать.
Если мы изменим ее на 644
, то получим еще одну проблему:
chmod -R 755 dir
Проблема в том, что 644
вынимает бит списка каталогов, и этот побочный эффект препятствует дальнейшему обходу дерева файлов. Вы могли бы обойти эту проблему, используя sudo
, но в итоге вы все равно получаете каталоги, которые совершенно бесполезны для не корневых пользователей.
Дело в том, что chmod -R
в некоторых случаях (например, chmod -R g-r
) работает просто отлично, но не в тех случаях, когда вы хотите запутаться с битом -x
, так как он работает с файлами и каталогами без разбора.
chmod
имеет флаг -R
, который означает рекурсивное изменение прав доступа к файлам и директориям.
Вы можете использовать заглавную ‘X’, чтобы сделать правильный выбор для папок: ‘X’ = “выполнять/поиск только в том случае, если файл является каталогом или у него уже есть права на выполнение для какого-то пользователя”
Так, например: chmod -R ug=rwX,o-rwx .
Сделает целое дерево доступным для владельца и группы каждого файла, а не для кого-то еще. Любой уже исполняемый файл впоследствии все равно будет исполняемым, а во всех каталогах будет стоять ‘x’ для пользователя и группы, а не для других.
chmod -R <file permission> *
Из man-страницы chmod
:
-R, --recursive
change files and directories recursively
Используйте chmod
с переключателем -R
для нескольких направлений, в котором есть дерево подкаталогов, содержащее миллионы файлов, и вы хотите изменить права доступа к файлам этих файлов одним щелчком.
Разрешения на файлы могут быть, например, 777, 755, 644 и т.д.