Задавать групповые разрешения как разрешения владельца

Мне нужно установить те же права владельца, чтобы они рекурсивно группировали все элементы в каталоге.

  • Создает ли каталог / var / log только для чтения debian linux?
  • как предотвратить доступ к другому пользователю с одинаковым идентификатором пользователя (UID)
  • Как я могу подсчитать количество разных символов в файле?
  • ls -l vs ls -lL
  • Сделать все новые файлы в каталоге доступным для группы
  • Сколько файлов можно сохранить в одном каталоге в Linux?
  • Могу ли я получить «du», сгруппированный по месяцам?
  • Не удается удалить принадлежащую папке через FTP
  • Почему запись в существующий файл происходит быстрее, чем запись нового пустого файла?
  • Список всех файлов, заканчивающихся несколькими расширениями файлов?
  • Возобновление прерванного процесса копирования
  • Исполняемый файл Etcd получает разрешение от имени root
  • 3 Solutions collect form web for “Задавать групповые разрешения как разрешения владельца”

    Существует довольно простой ответ (хотя я точно не знаю, работает ли он во всех версиях * nix); просто делай

     chmod g=u * 

    т.е. установите разрешения g roup равными разрешениям u ser.

    Это описано в chmod (1) :

    Формат символического режима – [ ugoa …] [[ +-= ] [ perms …] …], где perms – либо ноль, либо больше букв из набора rwxXst или одна буква из набора ugo . …

    Буквы rwxXst выбирают …. Вместо одного или нескольких из этих букв вы можете точно указать одну из букв ugo : разрешения, предоставленные пользователю, которому принадлежит файл ( u ), разрешения, предоставленные другим пользователям, которые являются членами группы файлов ( g ), и разрешения, предоставленные пользователям, которые не входят ни в одну из двух предыдущих категорий ( o ).

    В системе GNU (недавно для sed -s -z ) вы можете сделать что-то вроде:

     find . ! -type l -printf '%m:%p\0' | sed -Ez '/^.?(.)\1.:/d;s/(.)(.)(.):/\1\1\2\x0/' | xargs -r0n2 echo chmod 

    (удалите echo если вы удовлетворены результатом).

    Обратите внимание, что он обращается только к r , w , x bits, а не к специальным.

    Если вы не хотите, чтобы он был рекурсивным:

     find . -mindepth 1 -maxdepth 1 ! -type l -printf '%m:%p\0' | sed -Ez '/^.?(.)\1.:/d;s/(.)(.)(.):/\1\1\2\x0/' | xargs -r0n2 echo chmod 

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

     for file in $(find .); do perm=$(stat -c "%a" ${file}); echo chmod ${perm:0:1}${perm:0:1}${perm:2:1} ${file}; done 

    Не забудьте удалить echo .

    Улучшенная версия:

     find . -exec sh -c 'for file do perm=$(stat -Lc "%a" "$file") echo chmod "${perm:0:1}${perm:0:1}${perm:2:1}" "$file" done' sh {} + 

    Как и в ответе Стефана Хазеласа ,

    • Используйте -mindepth 1 чтобы избежать обработки . ,
    • Используйте -maxdepth 1 чтобы избежать рекурсии (введите подкаталоги).
    • Используйте ! -type l ! -type l чтобы избежать обработки символических ссылок (хотя этот ответ будет обрабатывать символические ссылки в порядке).

    Обратите внимание, что эта команда не будет работать корректно для файлов, в которых установлены какие-либо биты режима высокого порядка (setuid, setgid и sticky).

    Linux и Unix - лучшая ОС в мире.