Я пытаюсь написать скрипт оболочки для сохранения и перезаписи всех разрешений/групп в большом каталоге с несколькими подкаталогами в случае их изменения или неправильного создания, а также в случае зеркалирования пользователей/разрешений для этого каталога на другой машине.
Что-то вроде:
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
.