Existe uma maneira de fazer backup e restaurar a propriedade e as permissões do arquivo (as coisas que podem ser alteradas com chown
e chmod
)?
Você pode fazer isso no Windows usando icacls .
E as listas de controle de acesso?
Existe uma maneira de fazer backup e restaurar a propriedade e as permissões do arquivo (as coisas que podem ser alteradas com chown
e chmod
)?
Você pode fazer isso no Windows usando icacls .
E as listas de controle de acesso?
Respostas:
Você pode fazer isso com os comandos do pacote acl (que deve estar disponível em todas as distribuições principais, mas pode não fazer parte da instalação base). Eles fazem backup e restauram a ACL quando a ACL está presente, mas também funcionam com permissões básicas, mesmo em sistemas que não oferecem suporte à ACL.
Para fazer backup de permissões no diretório atual e seus subdiretórios recursivamente:
getfacl -R . >permissions.facl
Para restaurar permissões:
setfacl --restore=permissions.facl
setfacl
, não pode chmod
novamente, talvez cause conflito?
Não estou ciente de nada "pronto para uso" que faria isso. Aqui está um script inicial para você, no entanto, que manipulará permissões básicas. Ele não trata de ACLs de nenhuma descrição - mas sua pergunta as exclui explicitamente. (Ele também falhará nos nomes de arquivos patológicos - aqueles que começam com espaço em branco ou que contêm caracteres não imprimíveis.)
Salve as permissões
find * -depth -exec stat --format '%a %u %g %n' {} + >/tmp/save-the-list
Restaure as permissões
while read PERMS OWNER GROUP FILE
do
chmod "$PERMS" "$FILE"
chown "${OWNER}:${GROUP}" "$FILE"
done </tmp/save-the-list
.htaccess
, gitignore
...
#!/bin/bash
# prepare files
home="/home/exchange"
cd $home
>acl
echo "#!/bin/bash">recovery_acl.sh
echo "cd $home">>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 's,\\,\\\\,g' 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"
sed -i "s/\\\134/\\\\\\\134/g" recovery_acl.sh
sed -i "s/\\\040/\\\\ /g" recovery_acl.sh
Este script bash obtém apenas acl dirs (no meu caso, arquivos acls = dir (pai) acl) Após a execução do script, será criada outra "recovery_acl.sh".
Durante a recuperação de erros como "Nenhum arquivo ou diretório" significa que o diretório está vazio ou o nome do diretório possui dois / mais espaços juntos.