Câu trả lời:
Phiên bản GNU của tiện ích chmod có thể sao chép chế độ từ một tệp ( RFile
) sang tệp khác ( file
).
chmod --reference=RFile file
GNU coreutils được tìm thấy trong hầu hết các bản phân phối Linux và Cygwin, trong số những nơi khác. Không phải tất cả các triển khai chmod cung cấp tùy chọn này.
--reference
tùy chọn được bao gồm trong phiên bản GNU; OSX có thể sử dụng một chmod có nguồn gốc từ BSD. Người đàn ông OSX chmod : developer.apple.com/Mac/l
cp -dpR <source-file> <dest-file>
, khi sao chép tệp, sao chép quyền cũng như tệp.r
thử đi:
find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;
điều này sẽ tăng lên một cách đệ quy và chmod mỗi tệp, nếu hai thư mục không khớp trên các tệp bạn sẽ thấy rất nhiều lỗi "Không có tệp hoặc thư mục như vậy".
find /home/myubuntuuser/Desktop/test1 -exec chmod --reference /home/myubuntuuser/Desktop/test2/{} {} \;
Bạn có thể sử dụng getfacl
để truy xuất danh sách đầy đủ các quyền của tệp, chủ sở hữu, nhóm và ACL bổ sung (danh sách kiểm soát truy cập).
$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---
Nếu bạn lưu đầu ra đó vào một tệp (ví dụ acl.txt
), thì bạn có thể khôi phục từ định dạng này với setfacl --restore acl.txt
. Nếu bạn chỉ muốn khôi phục một tệp duy nhất và tệp đó có tên tệp khác với bản gốc, bạn sẽ muốn sử dụng setfacl --set-file acl.txt filename.txt
( filename.txt
tên tệp mới ở đâu).
Lưu quyền ban đầu vào acl.txt
:
$ getfacl filename.txt > acl.txt
Ghi đè quyền (để trình diễn; đây chỉ là để bạn có thể thấy rằng khôi phục nó trong bước tiếp theo hoạt động)
$ 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ử dụng setfacl
để khôi phục quyền chính xác từ acl.txt
:
$ sudo setfacl --restore acl.txt
$ ls -l filename.txt
-rw------- 1 score score 0 Jan 8 14:24 filename.txt
Tên tệp được lấy từ # file:
nhận xét được tạo bởi getfacl
, do đó không cần chỉ định nó trên dòng lệnh.
Nếu bạn muốn khôi phục các quyền đó thành một tệp khác, bạn có thể sử dụng --set-file
thay vì --restore
như vậy:
$ setfacl --set-file acl.txt second_filename.txt
Nếu bạn kết thúc ghi đè các quyền trên một số tệp /usr
, nhưng bạn không biết những tệp nào bạn đã ghi đè, bạn thường có thể sửa nó bằng cách khôi phục từ một hệ thống được cấu hình tương tự khác.
Quyền sao lưu từ hệ thống làm việc (lưu ý: getfacl
tạo đường dẫn tương đối, do đó đảm bảo bạn cd
đến một vị trí nhất quán trên cả hai máy)
# cd /
# getfacl -R usr > /root/acls.txt
Sao chép kết xuất ACL vào hệ thống với các quyền bị hỏng
$ scp root@working-system:/root/acls.txt .
$ scp acls.txt root@broken-system:/root/
Khôi phục kết xuất ACL để ghi đè các quyền bị hỏng với các quyền từ máy tốt đã biết
# cd /
# setfacl --restore /root/acls.txt