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