3

У меня есть структура каталогов с файлами и каталогами, и мне нравится назначать разрешения, чтобы все файлы и каталоги имели разрешения на чтение и запись для пользователя и разрешения на чтение для группы и, кроме того, разрешения на выполнение для каталога.

Я хотел бы добиться чего-то такого:

$ ls -l
total 16
-rw-r----- 1 daniel daniel    0  5月 23 16:20 1
-rw-r----- 1 daniel daniel    0  5月 23 16:20 2
-rw-r----- 1 daniel daniel    0  5月 23 16:20 3
-rw-r----- 1 daniel daniel    0  5月 23 16:20 4
-rw-r----- 1 daniel daniel    0  5月 23 16:20 5
drwxr-x--- 2 daniel daniel 4096  5月 23 16:00 a
drwxr-x--- 2 daniel daniel 4096  5月 23 16:00 b
drwxr-x--- 2 daniel daniel 4096  5月 23 15:59 c
drwxr-x--- 2 daniel daniel 4096  5月 23 15:59 d

6 ответов6

8

Чтобы дать разрешение на выполнение (поиск) каталогам, но не файлам, используйте:

chmod -R +X .

Чтобы назначить все разрешения, как в вашем примере, используйте:

chmod -R u=rwX,g=rX,o= .

-R рекурсивно изменяет файлы и каталоги, в то время как +X устанавливает выполнение / поиск, только если файл является каталогом или уже имеет разрешение на выполнение для некоторого пользователя. r и w , конечно, для чтения и письма, соответственно.

Режим X (верхний x) задокументирован как на традиционной странице справочника (man 1 chmod), так и в информационной документации из coreutils (info coreutils , узел условной выполнимости). Он также работает на BSD и, похоже, является стандартом POSIX.

2

Если вы хотите сделать это рекурсивно, то есть для каталогов внутри каталогов внутри каталогов, используйте команду:

 find /path/to/starting/directory -type d -exec chmod +x {} \;

Это находит все и только подкаталоги (флаг -type d ) каталога /path /to /start /directory, а затем выполняет требуемое изменение разрешения на выполнение для каждого из них. Пространство перед \; является обязательным.

0

Спасибо за ответы. Я обнаружил , что для того , чтобы назначить разрешение выполнения только в каталоги, необходимо использовать разрешение капитала X

Таким образом, команда будет выглядеть следующим образом:

chmod -R a-rwx,u=rwX,g=rX .

http://www.manpagez.com/man/1/chmod/

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

0

Вы пробовали что-то вроде:

chmod +x $(ls -p | grep /) , это добавляет разрешение на выполнение только для каталогов

и если вы хотите дать разрешение на выполнение файлам и каталогам, просто выполните:

chmod +x * и для удаления прав на выполнение файлов попробуйте что-то вроде этого:

chmod -x *.*

Надеюсь, это поможет

0
chmod -R u=rwX,g=rX,o= .

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

Использование chmod +X будет иметь примерно такой же эффект, за исключением того, что когда он дает права на выполнение, он дает права на выполнение пользователю, группе и другим.

0

Попробуй это:

find . -mindepth 1  -print0 | while IFS= read -r -d '' file; do
    if [ -d "$file" ]; then chmod 750 "$file";
    else chmod 640 "$file"; fi
done

объяснение

  • -mindepth 1 : так что find будет соответствовать текущему каталогу . ,
  • -print0 : печатает разделенный нулями вывод. Это гарантирует, что мы правильно работаем с файлами, содержащими переводы строк.
  • while IFS= : установка IFS на пустую строку отключает разделение слов. Необходимо для имен файлов / каталогов с пробелами.
  • read -r -d '' : каждая строка читается в $file но -r гарантирует, что мы не будем обрабатывать \ специально (если в именах файлов есть некоторые), а -d '' устанавливает разделитель на пустую строку поэтому мы правильно анализируем результаты find и можем работать с именами файлов, содержащими символы новой строки.
  • if [ -d "$file" ]; then chmod 750 "$file"; : Если $file является каталогом ([ -d "$file" ] , установите для него права доступа drwxr-x--- .
  • else chmod 640 "$file"; fi : если это не каталог, установите для них -rw-r----- .

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