Можно ли создать скрипт для сохранения и восстановления разрешений? - PullRequest
24 голосов
/ 10 августа 2010

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

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

Имеет ли это смысл?

Ответы [ 13 ]

0 голосов
/ 10 ноября 2017

Я изменил команду Антона, чтобы получить дополнительную строку chown user: group / file_or_folder_path . Теперь вы можете получить скрипт bash, который содержит две строки для каждого файла / папки.

Команда:

find . -type f | xargs stat -c "%a %U:%G %n" | awk '{print "chown "$2" "$3"\nchmod "$1" "$3}' > ./filesPermissions.sh

Пример вывода:

chown root:root /file_or_folder_path
chmod 777 /file_or_folder_path
0 голосов
/ 05 августа 2017
#!/bin/bash

if [ $# -ne 1 ]; then
        echo "Enter directory";
        exit 0;
fi
# dump acls
cd $1
>acl
echo "#!/bin/bash">recovery_acl.sh
echo "cd $1">>recovery_acl.sh
f='./'
# create acl file sorted by dir_level
for i in `seq 0 15`;do
  find . -mindepth $i -maxdepth $i -type d -exec getfacl {} +|grep -E '*UTS|file:'>>acl
done
sed -i 's/default\:user/\-dm\ u/g' acl
sed -i 's/default\:group/\-dm\ g/g' acl
sed -i 's/user\:/\-m\ u\:/g' acl
sed -i 's/group\:/\-m\ g\:/g' acl
sed -i 's/\#\ file\:\ /\.\//g' acl
sed -i '/^#/d' acl

while IFS='' read -r line ; do
  # grep dir name
  if echo "$line" | grep -q "$f" ; then
    dir="$line"
    continue
  fi
  echo setfacl $line '"'$dir'"'>>recovery_acl.sh
  # grep non def acl (for files)
  if echo "$line" | grep -q '\-m' ; then
    echo setfacl $line '"'$dir'"'/*>>recovery_acl.sh
  fi
done < "acl"
rm -f acl
sed -i 's/134/\\/g' recovery_acl.sh
sed -i 's/040/\ /g' recovery_acl.sh

После выполнения скрипта будет создано еще одно «recovery_acl.sh». Замените UTS на вашем домене. Ошибки типа «Нет такого файла или каталога» означают, что каталог пуст.

0 голосов
/ 21 января 2016

Вот пример того, как легко сделать это с одним файлом. Никаких дополнительных инструментов, скриптов, временных файлов и т. Д. Не требуется. Вы можете расширить этот метод для работы с большим количеством файлов, если это необходимо.

В этом конкретном примере разрешения сохраняются в переменной с помощью команды stat. Затем файл временно удаляется из любых ограничительных разрешений. Затем с этим что-то делается (что могло произойти из-за этих прежних ограничений). Наконец, исходные разрешения восстанавливаются.

file=$1
saved_permissions=$(sudo stat -c %a $file)
sudo chmod 777 $file
# <DO SOMETHING HERE>
sudo chmod $saved_permissions $file 
...