Odpowiedzi:
Wersja GNU narzędzia chmod może kopiować tryb z jednego pliku ( RFile
) na inny ( file
).
chmod --reference=RFile file
Coreutils GNU można znaleźć między innymi w większości dystrybucji Linuksa i Cygwin. Nie wszystkie implementacje chmod zapewniają tę opcję.
--reference
opcja jest w wersji GNU; OSX prawdopodobnie używa zamiast tego chmod, który pochodzi z BSD. OSX man chmod : developer.apple.com/Mac/library/documentation/Darwin/Reference/...
cp -dpR <source-file> <dest-file>
podczas kopiowania pliku, uprawnienia do kopiowania, a także plik.r
Wymyśliłem to:
find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh
Nie jest w pełni kuloodporny, ale robi to, czego potrzebuję.
Spróbuj tego:
find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;
spowoduje to rekursywne przejście w górę i przeskok do każdego pliku, jeśli dwa katalogi nie pasują do plików, zobaczysz dużo błędu „Brak takiego pliku lub katalogu”.
find /home/myubuntuuser/Desktop/test1 -exec chmod --reference /home/myubuntuuser/Desktop/test2/{} {} \;
Możesz użyć getfacl
do pobrania pełnej listy uprawnień do plików, właściciela, grupy i dodatkowych list ACL (list kontroli dostępu).
$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---
Jeśli zapiszesz to wyjście w pliku (np. acl.txt
), Możesz następnie przywrócić z tego formatu za pomocą setfacl --restore acl.txt
. Jeśli chcesz przywrócić tylko jeden plik, a ten plik ma inną nazwę pliku niż oryginał, będziesz chciał użyć setfacl --set-file acl.txt filename.txt
(gdzie filename.txt
jest nowa nazwa pliku).
Zapisz oryginalne uprawnienia do acl.txt
:
$ getfacl filename.txt > acl.txt
Nadpisz uprawnienia (do demonstracji; to po prostu, abyś mógł zobaczyć, że przywrócenie go w następnym kroku działa)
$ 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
Służy setfacl
do przywracania prawidłowych uprawnień z acl.txt
:
$ sudo setfacl --restore acl.txt
$ ls -l filename.txt
-rw------- 1 score score 0 Jan 8 14:24 filename.txt
Nazwa pliku jest pobierana z # file:
komentarza wygenerowanego przez getfacl
, więc nie ma potrzeby określania go w wierszu poleceń.
Jeśli chcesz przywrócić te uprawnienia do innego pliku, możesz użyć --set-file
zamiast --restore
tego:
$ setfacl --set-file acl.txt second_filename.txt
Jeśli ostatecznie nadpisujesz uprawnienia do niektórych plików /usr
, ale nie wiesz, które pliki zostały nadpisane, zwykle możesz to naprawić, przywracając z innego podobnie skonfigurowanego systemu.
Uprawnienia do tworzenia kopii zapasowych z działającego systemu (uwaga: getfacl
generuje ścieżki względne, więc upewnij się, że cd
do spójnej lokalizacji na obu komputerach)
# cd /
# getfacl -R usr > /root/acls.txt
Skopiuj zrzut ACL do systemu z uszkodzonymi uprawnieniami
$ scp root@working-system:/root/acls.txt .
$ scp acls.txt root@broken-system:/root/
Przywróć zrzut ACL, aby zastąpić zepsute uprawnienia uprawnieniami ze znanego dobrego komputera
# cd /
# setfacl --restore /root/acls.txt