디렉토리에 두 개의 파일이 있습니다. 하나는 올바른 권한을 가지고 있고 다른 하나는 그렇지 않습니다. 한 파일에서 다른 파일로 권한 세트를 “복사”할 수있는 방법이 있습니까?
답변
chmod 유틸리티 의 GNU 버전은 한 파일 ( )에서 다른 파일 ( )로 모드 를 복사 할 수 있습니다 .RFile
file
chmod --reference=RFile file
GNU coreutils 는 대부분의 Linux 배포판과 Cygwin에서 찾을 수 있습니다. 모든 chmod 구현 이이 옵션을 제공 하지는 않습니다 .
답변
나는 이것을 생각해 냈다.
find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh
완벽한 방탄은 아니지만 필요한 것을 수행합니다.
답변
이 시도:
find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;
두 파일이 파일과 일치하지 않으면 “해당 파일이나 디렉토리가 없습니다”라는 오류가 많이 나타납니다.
답변
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