Как я могу изменить все права доступа к каталогу в одной команде в Unix?
3 ответа
Чтобы изменить права доступа к файлу или записи каталога нерекурсивно, используйте команду 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
, поскольку он работает с файлами и каталогами без разбора.
chmod
есть флаг -R
который означает рекурсивное изменение прав доступа к файлам и каталогам.
Вы можете использовать заглавную букву 'X', чтобы сделать правильные вещи для папок:'X' = "выполнить / выполнить поиск, только если файл является каталогом или уже имеет разрешение на выполнение для некоторого пользователя"
Так, например: chmod -R ug = rwX, o-rwx.
Сделал бы все дерево доступным для владельца и группы каждого файла, и не доступным для кого-либо еще. Любые уже исполняемые файлы все равно будут исполняемыми впоследствии, и все каталоги будут иметь «x» для пользователя и группы, а не для других.
chmod -R <file permission> *
Со страницы руководства chmod
:
-R, --recursive
change files and directories recursively
Используйте chmod
с ключом -R
для нескольких направлений, в которых есть дерево подкаталогов, содержащее миллионы файлов, и вы хотите изменить права доступа к файлам для этих файлов одновременно.
Разрешение на файл может быть, например, для. 777, 755, 644 и т.д.