Скрипт для рекурсивной проверки прав доступа и владельцев каталога и написания скрипта оболочки для их повторного создания

Скрипт для рекурсивной проверки прав доступа и владельцев каталога и написания скрипта оболочки для их повторного создания

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

Что-то вроде:

chown adam:brown /var/blarg
chmod 770 /var/blarg
chown adam:brown /var/blarg/toast.file
chmod 777 /var/blarg/toast.file

...etc

Делать это вручную займет много времени. Мне было интересно, есть ли существующая команда/скрипт для выполнения этой задачи?

решение1

В продолжение комментария @yeti, я думал об этом некоторое время назад и, кажется, пришел к выводу, что что-то вроде

find /path/to/dir -printf '%m\t%u\t%g\t%p\0' > filelist

а потом

while read -rd $'\0' perms user group file; do 
  if [ -e "$file" ]; then
    chown "$user:$group" "$file"
    chmod "$perms" "$file"
  else
    echo "warning: $file not found"
  fi
done < filelist

будет работать. Помещая имя файла в конец вывода и используя readнулевые терминаторы вместо новых строкдолженсделать его безопасным даже для имен файлов с пробелами и другими специальными символами. В зависимости от того, откуда вы хотите запустить вторую команду, может быть удобнее использовать имя файла с удаленным ведущим /path/to/dirкомпонентом из команды, т. е. вместо .find%P%p

решение2

Как предложил yeti в комментариях, я использовал команду find для поиска всех файлов и каталогов в каталоге и вывода их прав доступа/владельцев в команду chown или chmod. Я добавил подробный -vпараметр, чтобы при запуске полученных скриптов оболочки вы могли видеть успех/ошибки команд:

find /var/blarg -printf 'chown -v %u:%g %p\n' > chowns.sh
find /var/blarg -printf 'chmod -v %m %p\n' > chmods.sh

Теперь просто сделайте полученные .sh-файлы исполняемыми:

chmod +x chowns.sh; chmod +x chmods.sh

Затем запустите их и выведите подробную обратную связь в текстовый файл:

./chmods > chmods_results.txt

Бум.

решение3

Вы упоминаете events, и если у вас естьДействительномного файлов, имеет смысл следить за ними. Вы можете взглянуть на inotifywatch, который "прослушивает события файловой системы", например, изменение прав доступа к файлам. В ОС на базе Debian он находится в пакете inotify-tools.

Связанный контент