Изменение всех разрешений папок с помощью 1 команды

Для теперь только Голосовой блокнот работает в Linux.

2
04.03.2017, 05:38
2 ответа

Вы не можете. Вам нужны две команды.

find ./my_web_app_project -type d -exec chmod 755 {} \;
find ./my_web_app_project -type f -exec chmod 644 {} \;

Редактировать:

См. Ответ G-Man, так как он намного более правильный.

2
27.01.2020, 21:53

Один из способов сделать именно то, что вы хотите, с помощью одной команды find -

find my_web_app_project '(' -type f -exec chmod 644 {} ';' ')' -o '(' -type d -exec chmod 755 {} ';' ')'

-o означает ИЛИ. Эта команда обрабатывает все объекты в дереве проекта , которые относятся к типу «файл» или тип «каталог», , и выполняет различные команды, в зависимости от которых Типа каждый объект есть.

Вы можете сделать это немного более эффективным , заменив точки с запятой ( ';' ) знаками плюс ( + ); это говорит find для однократного запуска chmod 644 со всеми именами простых файлов в качестве аргументов, и для запуска chmod 755 один раз, со всеми именами каталогов в качестве аргументов.

Между прочим, вам не нужно говорить ./ ни для чего, кроме запуска программы в текущем каталоге (хотя иногда удобный для работы с файлами, имена которых начинаются с некоторых специальных символов).


Интересно, как теперь выглядят ваши разрешения (перед запуском рекурсивного древовидного chmod ). Обычно для файлов не включаются биты разрешения на выполнение , если только они не являются исполняемыми программами, или вы случайно не сделали что-то вроде chmod -R 755 . Для каталогов обычно не отключаются биты разрешения на выполнение , если вы не сделали что-то катастрофическое, например chmod -R 644 . Если вы сильно испортили права доступа из-за того, что вы выполнили опрометчивую chmod -R с числовым режимом, игнорируйте этот раздел {{1 }} и придерживайтесь команды в начале этого ответа.

Но если ваши разрешения в целом нормальные, и вы просто хотите ввести стандарт разрешений на чтение / запись для пользователя, и разрешений только на чтение для все остальные (группа и мир), вы можете сделать

chmod -R +rX,u+w,go-w my_web_app_project

, в котором

  • + rX означает + r, + X (обратите внимание, что X пишется с заглавной буквы - это важно).
    • + r означает установить разрешение на чтение для пользователя, группы и других.
    • + X означает установить разрешение на выполнение для пользователя, группы и других , если оно в настоящее время установлено для любого из них или если объект является каталогом.
  • u + w означает установить разрешение на запись для пользователя.
  • go-w означает отключение разрешения на запись для группы и других.

Краткое изложение некоторых ключевых моментов:

  • Конечно, вы можете chmod только то, что вам принадлежит (если у вас нет привилегий) и которые не доступны только для чтения. Если в вашем каталоге есть вещи, которые вы не можете chmod , любая из этих команд вызовет ошибку.
  • Команды find ничего не сделают с объектами , которые не являются каталогами или файлами (например, именованными каналами).
  • Команда find с -exec chmod 755 {} + может завершиться ошибкой , если у вас еще нет прав на чтение и выполнение для всех папок {{1} } в каталоге верхнего уровня.
  • Команда chmod -R + rX, u + w, go-w
    • установит для всех каталогов режим 755,
    • игнорирует символические ссылки,
    • для всех других типов файлов (включая, например, именованные каналы):
      • установите значение 755, если он уже имеет хотя бы один x немного; в противном случае
      • задает 644.
6
27.01.2020, 21:53

Теги

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