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


11

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


Вы хотите изменить разрешения для всех файлов в каталоге? Вы хотите, чтобы это также входило во вложенные каталоги? Вы хотите изменить разрешения самого каталога (ов) или только файлов в нем? И наконец, пытались ли вы сначала поискать этот сайт, прежде чем опубликовать свой вопрос?
Ether

Ответы:


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


Почему вы предполагаете, что он хочет установить 644или что он вообще устанавливает -xкаталоги? Вопрос только предусматривает, что он хочет изменить разрешения, а не на что конкретно.
Риз Мур

@ Риз Мур: Ты прав. Спрашивающий даже не сказал ничего о рекурсивном изменении разрешений.
Джои Адамс

1
Для этого вы обычно хотите использовать символический режим + и -; т.е.chmod -R go=u,go-w /dir
dannysauer

6

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

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

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

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


Попробуйте chmod -R 444 somedirкаталог с файлами в нем. Вы получаете, Permission deniedпотому что флаг -x снимается с каталогов, и необходимо продолжить чтение каталога.
Джои Адамс

1
Полезным дополнением к этому является синтаксис X = Y. Например, вы можете установить права доступа группы для разрешения пользователя, используя chmod -R g = u dir, чтобы установить эквивалент группы и пользователя. Это работает с такими вещами, как dirs, которые нуждаются в исполняемых файлах, а "простые" файлы - нет.
Пол Рубел

3
chmod -R <file permission> *

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

-R, --recursive
              change files and directories recursively

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.