11

Как я могу изменить все права доступа к каталогу в одной команде в Unix?

3 ответа3

21

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

Было бы хорошо, если бы вы могли просто сделать это:

chmod -R 755 dir

Однако с этим есть проблемы. Это относится к файлам и каталогам одинаково. Приведенная выше команда делает каталоги доступными для чтения и чтения для всех пользователей, но также делает все файлы исполняемыми, что обычно не нужно делать.

Если мы изменим его на 644 , мы получим еще одну проблему:

$ chmod -R 644 x2
chmod: cannot access `x2/authors.html': Permission denied
chmod: cannot access `x2/day_of_week.plot': Permission denied
chmod: cannot access `x2/day_of_week.dat': Permission denied
chmod: cannot access `x2/commits_by_year.png': Permission denied
chmod: cannot access `x2/index.html': Permission denied
chmod: cannot access `x2/commits_by_year.plot': Permission denied
chmod: cannot access `x2/commits_by_year_month.plot': Permission denied
chmod: cannot access `x2/files_by_date.png': Permission denied
chmod: cannot access `x2/files.html': Permission denied
...

Проблема в том, что 644 вынимает бит списка каталогов, и этот побочный эффект предотвращает дальнейший обход дерева файлов. Вы можете обойти эту проблему с помощью sudo , но у вас все равно останутся каталоги, которые совершенно бесполезны для пользователей без полномочий root.

Дело в том, что в некоторых случаях chmod -R работает просто отлично (например, chmod -R g-r), но не в тех случаях, когда вам нужно связываться с битом -x , поскольку он работает с файлами и каталогами без разбора.

6

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

Вы можете использовать заглавную букву 'X', чтобы сделать правильные вещи для папок:'X' = "выполнить / выполнить поиск, только если файл является каталогом или уже имеет разрешение на выполнение для некоторого пользователя"

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

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

3
chmod -R <file permission> *

Со страницы руководства chmod:

-R, --recursive
              change files and directories recursively

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .