Réponses:
La version GNU de l' utilitaire chmod peut copier le mode d'un fichier ( RFile
) vers un autre ( file
).
chmod --reference=RFile file
GNU coreutils se trouve dans la plupart des distributions Linux et Cygwin, entre autres. Toutes les implémentations chmod ne proposent pas cette option.
--reference
option est incluse dans la version GNU; OSX utilise probablement un chmod qui provient de BSD à la place. OSX man chmod : developer.apple.com/Mac/library/documentation/Darwin/Reference/…
cp -dpR <source-file> <dest-file>
volonté, lors de la copie d' un fichier, copie des autorisations ainsi que le file.r
Je suis venu avec ceci:
find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh
Ce n'est pas totalement à l'épreuve des balles, mais fait ce dont j'ai besoin.
essaye ça:
find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;
cela remonterait récursivement et chmoder chaque fichier, si deux répertoires ne correspondent pas aux fichiers, vous verrez beaucoup d'erreur "Aucun fichier ou répertoire".
find /home/myubuntuuser/Desktop/test1 -exec chmod --reference /home/myubuntuuser/Desktop/test2/{} {} \;
Vous pouvez utiliser getfacl
pour récupérer la liste complète des autorisations de fichiers, du propriétaire, du groupe et des ACL supplémentaires (listes de contrôle d'accès).
$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---
Si vous enregistrez cette sortie dans un fichier (par exemple acl.txt
), vous pouvez ensuite restaurer à partir de ce format avec setfacl --restore acl.txt
. Si vous ne souhaitez restaurer qu'un seul fichier et que ce fichier a un nom de fichier différent de l'original, vous voudrez utiliser setfacl --set-file acl.txt filename.txt
(où filename.txt
est le nouveau nom de fichier).
Enregistrez les autorisations d'origine dans acl.txt
:
$ getfacl filename.txt > acl.txt
Écraser les autorisations (pour la démonstration; c'est juste pour que vous puissiez voir que la restauration à l'étape suivante fonctionne)
$ 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
Utilisez setfacl
pour restaurer les autorisations correctes à partir de acl.txt
:
$ sudo setfacl --restore acl.txt
$ ls -l filename.txt
-rw------- 1 score score 0 Jan 8 14:24 filename.txt
Le nom de fichier provient du # file:
commentaire généré par getfacl
, il n'est donc pas nécessaire de le spécifier sur la ligne de commande.
Si vous souhaitez restaurer ces autorisations dans un fichier différent, vous pouvez utiliser --set-file
plutôt que --restore
comme ceci:
$ setfacl --set-file acl.txt second_filename.txt
Si vous finissez par remplacer les autorisations sur certains fichiers /usr
, mais que vous ne savez pas quels fichiers vous avez écrasés, vous pouvez généralement le corriger en restaurant à partir d'un autre système configuré de manière similaire.
Autorisations de sauvegarde à partir du système de travail (remarque: getfacl
génère des chemins d'accès relatifs, assurez-vous donc cd
d'un emplacement cohérent sur les deux machines)
# cd /
# getfacl -R usr > /root/acls.txt
Copiez le cliché ACL sur le système avec des autorisations rompues
$ scp root@working-system:/root/acls.txt .
$ scp acls.txt root@broken-system:/root/
Restaurez le cliché ACL pour remplacer les autorisations rompues par celles de la bonne machine connue
# cd /
# setfacl --restore /root/acls.txt