답변:
chmod 유틸리티 의 GNU 버전은 한 파일 ( )에서 다른 파일 ( )로 모드 를 복사 할 수 있습니다 .RFile
file
chmod --reference=RFile file
GNU coreutils 는 대부분의 Linux 배포판과 Cygwin에서 찾을 수 있습니다. 모든 chmod 구현 이이 옵션을 제공 하지는 않습니다 .
--reference
옵션은 GNU 버전에 포함되어 있습니다; OSX는 아마도 대신 BSD에서 시작 하는 chmod 를 사용합니다 . OSX man chmod : developer.apple.com/Mac/library/documentation/Darwin/Reference/…
cp -dpR <source-file> <dest-file>
에서 파일을 복사 할 때 파일과 권한을 복사 할 수 있다는 점을 언급하는 것이 유용하다고 생각했습니다 .r
이 시도:
find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;
두 파일이 파일과 일치하지 않으면 "해당 파일이나 디렉토리가 없습니다"라는 오류가 많이 나타납니다.
find /home/myubuntuuser/Desktop/test1 -exec chmod --reference /home/myubuntuuser/Desktop/test2/{} {} \;
getfacl
파일 권한, 소유자, 그룹 및 추가 ACL (액세스 제어 목록)의 전체 목록을 검색하는 데 사용할 수 있습니다 .
$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---
해당 출력을 파일 (예 :)에 저장하면을 사용 acl.txt
하여이 형식에서 복원 할 수 있습니다 setfacl --restore acl.txt
. 단일 파일 만 복원하고 해당 파일의 파일 이름이 원본과 다른 경우 새 파일 이름이있는 setfacl --set-file acl.txt filename.txt
곳 을 사용하려고합니다 filename.txt
.
다음에 원래 권한을 저장하십시오 acl.txt
.
$ getfacl filename.txt > acl.txt
덮어 쓰기 권한 (시연을 위해 다음 단계에서 복원하는 것이 효과가 있음을 나타냅니다)
$ 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
다음 setfacl
에서 올바른 권한을 복원하는 데 사용하십시오 acl.txt
.
$ sudo setfacl --restore acl.txt
$ ls -l filename.txt
-rw------- 1 score score 0 Jan 8 14:24 filename.txt
파일 이름은에 # file:
의해 생성 된 주석 에서 가져 오므로 getfacl
명령 줄에서 지정할 필요가 없습니다.
이러한 권한을 다른 파일로 복원하려면 다음 --set-file
과 --restore
같이 사용할 수 있습니다 .
$ setfacl --set-file acl.txt second_filename.txt
의 일부 파일에 대한 권한을 덮어 /usr
쓰지만 덮어 쓴 파일을 모를 경우 일반적으로 유사하게 구성된 다른 시스템에서 복원하여 수정할 수 있습니다.
작업 시스템의 백업 권한 (참고 : getfacl
상대 경로를 생성하므로 cd
두 시스템에서 일관된 위치로 이동)
# cd /
# getfacl -R usr > /root/acls.txt
권한이 끊긴 시스템에 ACL 덤프를 복사하십시오.
$ scp root@working-system:/root/acls.txt .
$ scp acls.txt root@broken-system:/root/
알려진 양호한 시스템의 권한으로 손상된 권한을 겹쳐 쓰려면 ACL 덤프를 복원하십시오.
# cd /
# setfacl --restore /root/acls.txt