2010-11-08 17:31:41 +0000 2010-11-08 17:31:41 +0000
11
11

Как изменить файловые разрешения для каталога одной командой

Как изменить все файловые разрешения директории в одной команде в Unix?

Ответы (3)

21
21
21
2010-11-08 17:40:58 +0000

Чтобы изменить разрешения на запись в файле или каталоге не рекурсивно, используйте команду 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, так как он работает с файлами и каталогами без разбора.

6
6
6
2010-11-08 17:34:48 +0000

chmod имеет флаг -R, который означает рекурсивное изменение прав доступа к файлам и директориям.

Вы можете использовать заглавную ‘X’, чтобы сделать правильный выбор для папок: ‘X’ = “выполнять/поиск только в том случае, если файл является каталогом или у него уже есть права на выполнение для какого-то пользователя”

Так, например: chmod -R ug=rwX,o-rwx .

Сделает целое дерево доступным для владельца и группы каждого файла, а не для кого-то еще. Любой уже исполняемый файл впоследствии все равно будет исполняемым, а во всех каталогах будет стоять ‘x’ для пользователя и группы, а не для других.

3
3
3
2012-08-01 07:10:21 +0000
chmod -R <file permission> *

Из man-страницы chmod:

-R, --recursive
              change files and directories recursively

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

Разрешения на файлы могут быть, например, 777, 755, 644 и т.д.

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

10
37
7
14
4