Antworten:
Die GNU-Version des Dienstprogramms chmod kann den Modus von einer Datei ( RFile
) in eine andere ( file
) kopieren .
chmod --reference=RFile file
GNU coreutils ist unter anderem in den meisten Linux-Distributionen und Cygwin enthalten. Nicht alle chmod- Implementierungen bieten diese Option.
--reference
Option ist in der GNU-Version enthalten. OSX verwendet wahrscheinlich stattdessen ein chmod , das von BSD stammt. OSX man chmod : developer.apple.com/Mac/library/documentation/Darwin/Reference/…
cp -dpR <source-file> <dest-file>
Ich habe mir nur gedacht, dass es nützlich wäre, hier zu erwähnen, dass beim Kopieren einer Datei sowohl die Berechtigungen als auch die Datei.r
Das habe ich mir ausgedacht:
find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh
Es ist nicht vollständig kugelsicher, tut aber, was ich brauche.
Versuche dies:
find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;
Dies würde rekursiv nach oben gehen und jede Datei chmod. Wenn zwei Verzeichnisse für Dateien nicht übereinstimmen, wird der Fehler "Keine solche Datei oder solches Verzeichnis" häufig angezeigt.
find /home/myubuntuuser/Desktop/test1 -exec chmod --reference /home/myubuntuuser/Desktop/test2/{} {} \;
Mit können Sie getfacl
die vollständige Liste der Dateiberechtigungen, Eigentümer, Gruppen und zusätzlichen ACLs (Zugriffssteuerungslisten) abrufen.
$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---
Wenn Sie diese Ausgabe in einer Datei speichern (zB acl.txt
), können Sie dann aus diesem Format mit wiederherstellen setfacl --restore acl.txt
. Wenn Sie nur eine einzelne Datei wiederherstellen möchten und diese Datei einen anderen Dateinamen als das Original hat, sollten Sie diesen verwenden setfacl --set-file acl.txt filename.txt
(wobei filename.txt
der neue Dateiname steht).
Speichern Sie die ursprünglichen Berechtigungen unter acl.txt
:
$ getfacl filename.txt > acl.txt
Überschreibberechtigungen (zur Demonstration; dies ist nur so, dass Sie sehen können, dass das Wiederherstellen im nächsten Schritt funktioniert)
$ chmod 777 filename.txt
$ sudo chown nobody:root filename.txt
$ ls -l filename.txt
-rwxrwxrwx 1 nobody root 0 Jan 8 14:24 filename.txt
Verwenden Sie setfacl
diese Option , um die richtigen Berechtigungen wiederherzustellen acl.txt
:
$ sudo setfacl --restore acl.txt
$ ls -l filename.txt
-rw------- 1 score score 0 Jan 8 14:24 filename.txt
Der Dateiname stammt aus dem # file:
Kommentar, der von generiert wurde getfacl
, sodass er nicht in der Befehlszeile angegeben werden muss.
Wenn Sie diese Berechtigungen für eine andere Datei wiederherstellen möchten, können Sie --set-file
stattdessen --restore
Folgendes verwenden:
$ setfacl --set-file acl.txt second_filename.txt
Wenn Sie am Ende die Berechtigungen für einige Dateien in überschreiben /usr
, aber nicht wissen, welche Dateien Sie überschrieben haben, können Sie dies normalerweise beheben, indem Sie sie von einem anderen, ähnlich konfigurierten System wiederherstellen.
Sicherungsberechtigungen vom Arbeitssystem (Hinweis: getfacl
Generiert relative Pfade, stellen Sie also sicher, dass Sie cd
auf beiden Computern einen konsistenten Speicherort haben.)
# cd /
# getfacl -R usr > /root/acls.txt
Kopieren Sie den ACL-Speicherauszug mit fehlerhaften Berechtigungen auf das System
$ scp root@working-system:/root/acls.txt .
$ scp acls.txt root@broken-system:/root/
Stellen Sie den ACL-Speicherauszug wieder her, um die beschädigten Berechtigungen mit denen des als funktionierend bekannten Computers zu überschreiben
# cd /
# setfacl --restore /root/acls.txt