Gibt es eine Möglichkeit zum Sichern und Wiederherstellen des Dateibesitzes und der Dateiberechtigungen (die Dinge, die mit chownund geändert werden können chmod)?
Sie können dies in Windows mit icacls tun .
Was ist mit Zugriffssteuerungslisten?
Gibt es eine Möglichkeit zum Sichern und Wiederherstellen des Dateibesitzes und der Dateiberechtigungen (die Dinge, die mit chownund geändert werden können chmod)?
Sie können dies in Windows mit icacls tun .
Was ist mit Zugriffssteuerungslisten?
Antworten:
Sie können dies mit den Befehlen aus dem acl- Paket tun (das auf allen Mainstream-Distributionen verfügbar sein sollte, aber möglicherweise nicht Teil der Basisinstallation ist ). Sie sichern und stellen die ACL wieder her, wenn ACL vorhanden ist, funktionieren jedoch auch für grundlegende Berechtigungen, selbst auf Systemen, die keine ACL unterstützen.
So sichern Sie Berechtigungen im aktuellen Verzeichnis und seinen Unterverzeichnissen rekursiv:
getfacl -R . >permissions.facl
So stellen Sie Berechtigungen wieder her:
setfacl --restore=permissions.facl
setfacl kann das dann nicht chmodnochmal, wird das vielleicht zu konflikten führen?
Mir ist nichts "von der Stange" bekannt, das dies tun würde. Hier ist jedoch ein Starterskript für Sie, das grundlegende Berechtigungen behandelt. Es werden keine ACLs mit einer Beschreibung verarbeitet, Ihre Frage schließt diese jedoch ausdrücklich aus. (Pathologische Dateinamen, die mit Leerzeichen beginnen oder nicht druckbare Zeichen enthalten, schlagen ebenfalls fehl.)
Speichern Sie die Berechtigungen
find * -depth -exec stat --format '%a %u %g %n' {} + >/tmp/save-the-list
Stellen Sie die Berechtigungen wieder her
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
Dieses Bash-Skript ruft nur dirs für acl ab (in meinem Fall files acls = dir (parent) acl). Nach der Ausführung des Skripts wird ein weiteres "recovery_acl.sh" erstellt.
Beim Wiederherstellen von Fehlern wie "Keine solche Datei oder Verzeichnis" bedeutet, dass dir leer ist oder dirname zwei / mehr Leerzeichen enthält.