¿Hay alguna manera de hacer una copia de seguridad y restaurar la propiedad y los permisos del archivo (las cosas que se pueden cambiar con chowny chmod)?
Puede hacer esto en Windows usando icacls .
¿Qué pasa con las listas de control de acceso?
¿Hay alguna manera de hacer una copia de seguridad y restaurar la propiedad y los permisos del archivo (las cosas que se pueden cambiar con chowny chmod)?
Puede hacer esto en Windows usando icacls .
¿Qué pasa con las listas de control de acceso?
Respuestas:
Puede hacer esto con los comandos del paquete acl (que debería estar disponible en todas las distribuciones principales, pero podría no ser parte de la instalación base). Realizan copias de seguridad y restauran ACL cuando ACL está presente, pero también funcionan para permisos básicos, incluso en sistemas que no admiten ACL.
Para hacer una copia de seguridad de los permisos en el directorio actual y sus subdirectorios de forma recursiva:
getfacl -R . >permissions.facl
Para restaurar los permisos:
setfacl --restore=permissions.facl
setfacl , entonces no puede chmodvolver a hacerlo , ¿tal vez causará un conflicto?
No estoy al tanto de nada "listo para usar" que haga esto. Sin embargo, aquí hay un script de inicio para usted que manejará los permisos básicos. No maneja las ACL de ninguna descripción, pero su pregunta las excluye explícitamente. (También fallará en los nombres de archivos patológicos, aquellos que comienzan con espacios en blanco o que contienen caracteres no imprimibles).
Guarda los permisos
find * -depth -exec stat --format '%a %u %g %n' {} + >/tmp/save-the-list
Restaurar los permisos
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 obtiene directorios acl solamente (en mi caso, archivos acls = dir (padre) acl) Después de la ejecución del script, creará otro "recovery_acl.sh".
Al recuperar errores como "No existe tal archivo o directorio" significa que dir está vacío o dirname tiene dos / más espacios juntos.