Respostas:
A versão GNU do utilitário chmod pode copiar o modo de um arquivo ( RFile
) para outro ( file
).
chmod --reference=RFile file
O coreutils GNU é encontrado na maioria das distribuições Linux e Cygwin, entre outros lugares. Nem todas as implementações de chmod fornecem essa opção.
--reference
opção está incluída na versão GNU; O OSX provavelmente usa um chmod que se origina no BSD. OSX man chmod : developer.apple.com/Mac/library/documentation/Darwin/Reference/…
cp -dpR <source-file> <dest-file>
a vontade, ao copiar um arquivo, copiar permissões, bem como a file.r
Eu vim com isso:
find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh
Não é totalmente à prova de balas, mas faz o que eu preciso.
tente isto:
find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;
isso aumentaria recursivamente e chmod todos os arquivos, se dois diretórios não corresponderem aos arquivos, você verá muitos erros "Não existe esse arquivo ou diretório".
find /home/myubuntuuser/Desktop/test1 -exec chmod --reference /home/myubuntuuser/Desktop/test2/{} {} \;
Você pode usar getfacl
para recuperar a lista completa de permissões de arquivo, proprietário, grupo e ACLs adicionais (listas de controle de acesso).
$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---
Se você salvar essa saída em um arquivo (por exemplo acl.txt
), poderá restaurar a partir deste formato com setfacl --restore acl.txt
. Se você quiser restaurar apenas um único arquivo, e esse arquivo tiver um nome de arquivo diferente do original, será recomendável usá-lo setfacl --set-file acl.txt filename.txt
(onde filename.txt
está o novo nome do arquivo).
Salve as permissões originais para acl.txt
:
$ getfacl filename.txt > acl.txt
Sobrescrever permissões (para demonstração; isso é apenas para que você possa ver que a restauração na próxima etapa funciona)
$ 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
Use setfacl
para restaurar as permissões corretas de acl.txt
:
$ sudo setfacl --restore acl.txt
$ ls -l filename.txt
-rw------- 1 score score 0 Jan 8 14:24 filename.txt
O nome do arquivo é obtido no # file:
comentário gerado por getfacl
, portanto, não há necessidade de especificá-lo na linha de comando.
Se você deseja restaurar essas permissões para um arquivo diferente, use em --set-file
vez de--restore
:
$ setfacl --set-file acl.txt second_filename.txt
Se você acabar substituindo as permissões em alguns arquivos /usr
, mas não souber quais arquivos foram substituídos, geralmente poderá corrigi-lo restaurando a partir de outro sistema configurado da mesma forma.
Permissões de backup do sistema em funcionamento (nota: getfacl
gera caminhos relativos, portanto, garanta cd
um local consistente nas duas máquinas)
# cd /
# getfacl -R usr > /root/acls.txt
Copie o dump da ACL para o sistema com permissões quebradas
$ scp root@working-system:/root/acls.txt .
$ scp acls.txt root@broken-system:/root/
Restaure o despejo da ACL para substituir as permissões quebradas pelas da máquina válida
# cd /
# setfacl --restore /root/acls.txt