Risposte:
La versione GNU dell'utilità chmod può copiare la modalità da un file ( RFile
) a un altro ( file
).
chmod --reference=RFile file
I coreutils GNU si trovano nella maggior parte delle distribuzioni Linux e Cygwin, tra gli altri posti. Non tutte le implementazioni di chmod forniscono questa opzione.
--reference
opzione è inclusa nella versione GNU; OSX probabilmente utilizza un chmod che ha origine invece con BSD. OSX man chmod : developer.apple.com/Mac/library/documentation/Darwin/Reference/…
cp -dpR <source-file> <dest-file>
, durante la copia di un file, verranno copiati i permessi e il file.r
Ho pensato a questo:
find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh
Non è completamente a prova di proiettile, ma fa quello che mi serve.
prova questo:
find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;
questo aumenterebbe in modo ricorsivo e chmod ogni file, se due directory non corrispondono sui file vedrai un sacco di errore "Nessun file o directory simile".
find /home/myubuntuuser/Desktop/test1 -exec chmod --reference /home/myubuntuuser/Desktop/test2/{} {} \;
È possibile utilizzare getfacl
per recuperare l'elenco completo di autorizzazioni file, proprietario, gruppo e ACL aggiuntivi (elenchi controllo accessi).
$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---
Se si salva l'output in un file (ad esempio acl.txt
), è possibile ripristinare da questo formato con setfacl --restore acl.txt
. Se desideri ripristinare solo un singolo file e tale file ha un nome file diverso dall'originale, ti consigliamo di utilizzare setfacl --set-file acl.txt filename.txt
(dovefilename.txt
trova il nuovo nome file).
Salva le autorizzazioni originali in acl.txt
:
$ getfacl filename.txt > acl.txt
Sovrascrivi le autorizzazioni (per la dimostrazione; questo è solo per poter vedere che il ripristino nel passaggio successivo funziona)
$ 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
Utilizzare setfacl
per ripristinare le autorizzazioni corrette da acl.txt
:
$ sudo setfacl --restore acl.txt
$ ls -l filename.txt
-rw------- 1 score score 0 Jan 8 14:24 filename.txt
Il nome file è preso dal # file:
commento generato da getfacl
, quindi non è necessario specificarlo sulla riga di comando.
Se si desidera ripristinare tali autorizzazioni in un altro file, è possibile utilizzare --set-file
invece di --restore
così:
$ setfacl --set-file acl.txt second_filename.txt
Se finisci per sovrascrivere le autorizzazioni su alcuni file /usr
, ma non sai quali file hai sovrascritto, di solito puoi correggerlo ripristinando da un altro sistema configurato in modo simile.
Autorizzazioni di backup dal sistema di lavoro (nota: getfacl
genera percorsi relativi, quindi assicurati di avere cd
una posizione coerente su entrambe le macchine)
# cd /
# getfacl -R usr > /root/acls.txt
Copia il dump ACL sul sistema con permessi non funzionanti
$ scp root@working-system:/root/acls.txt .
$ scp acls.txt root@broken-system:/root/
Ripristinare il dump ACL per sovrascrivere i permessi non funzionanti con quelli della buona macchina conosciuta
# cd /
# setfacl --restore /root/acls.txt