Nejjednodušší způsob je použít nástroje ACL, i když ve skutečnosti nepoužíváte ACL. Jednoduše zavolejte na getfacl -R . >saved-permissions
k zálohování oprávnění stromu adresářů a setfacl --restore=saved-permissions
k jejich obnovení.
Jinak lze oprávnění zálohovat pomocí find -printf
. (Je vyžadováno hledání GNU, ale to je to, co máte na Linuxu.)
find -depth -printf '%m:%u:%g:%p\0' >saved-permissions
Získáte soubor obsahující záznamy oddělené znakem null; každý záznam obsahuje číselná oprávnění, uživatelské jméno, název skupiny a název souboru pro jeden soubor. Chcete-li obnovit, projděte záznamy a zavolejte chmod
a chown
. -depth
možnost na find
je v případě, že chcete, aby některé adresáře byly nezapisovatelné (nejprve musíte zpracovat jejich obsah).
Oprávnění můžete obnovit pomocí tohoto úryvku bash odvozeného z úryvku od Daniela Aldera:
while IFS=: read -r -d '' mod user group file; do
chown -- "$user:$group" "$file"
chmod "$mod" "$file"
done <saved-permissions
K otočení find
můžete použít následující skript awk výstup do nějakého kódu shellu pro obnovení oprávnění.
find -depth -printf '%m:%u:%g:%p\0' |
awk -v RS='\0' -F: '
BEGIN {
print "#!/bin/sh";
print "set -e";
q = "\047";
}
{
gsub(q, q q "\\" q);
f = $0;
sub(/^[^:]*:[^:]*:[^:]*:/, "", f);
print "chown --", q $2 ":" $3 q, q f q;
print "chmod", $1, q f q;
}' > restore-permissions.sh
Nejprve nainstalujte balíček ACL:
sudo apt-get install acl
Rekurzivně ukládat oprávnění a vlastnictví k souboru:
getfacl -R yourDirectory > permissions.acl
Obnovit (vzhledem k aktuální cestě):
setfacl --restore=permissions.acl