Unix: Có cách nào để sao chép quyền truy cập tập tin hoặc thư mục của Nether không?


14

Tôi có hai tập tin trong một thư mục. Một cái có quyền chính xác còn cái kia thì không. Có cách nào để tôi có thể "sao chép" bộ quyền từ tệp này sang tệp khác không?

Câu trả lời:


15

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.


Hừm ... có vẻ như điều này được cho là hoạt động, nhưng không được hỗ trợ trên Mac OS X? Ở đó tôi chỉ nhận được tùy chọn bất hợp pháp ...
Svish

2
chmod không phải là lệnh bash dựng sẵn. nó là một tiện ích riêng biệt có sẵn trên nhiều unixes. các --referencetù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
Library / documentation / Darwin / Reference / trộm

Svish, bạn có thể xem xét việc cài đặt các phiên bản GNU thông qua MacPorts.
Jeremy L

Chỉ cần hình dung rằng sẽ rất hữu ích khi đề cập ở đây cp -dpR <source-file> <dest-file>, khi sao chép tệp, sao chép quyền cũng như tệp.r
LawrenceC

1

Tôi nghĩ ra cái này:

find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh

Nó không phải là bằng chứng đạn hoàn toàn, nhưng làm những gì tôi cần.


0

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/{} {} \;
Rick Sanchez

chmod: không nhận được các thuộc tính của '/ home / myubfoxuser / Desktop / test2 // home / myubfoxuser / Desktop / test1': Không có tệp hoặc thư mục như vậy chmod: không thể nhận được các thuộc tính của '/ home / myubfoxuser / Desktop / test2 // home / myubfoxuser / Desktop / test1 / 111.txt ': Không có tệp hoặc thư mục chmod như vậy tập tin hoặc thư mục như vậy chmod: không nhận được các thuộc tính của '/home/myubfoxuser/Desktop/test2//home/myubfoxuser/Desktop/test1/333.txt': Không có tệp hoặc thư mục như vậy
Rick Sanchez

đã thử nghiệm nó trên 2 thư mục: test1 và test2. mỗi tệp có cùng tệp 111/222 / 333.txt với các quyền khác nhau. test1 có những cái mặc định. test2 có 777 quyền. đây là lỗi tôi nhận được
Rick Sanchez

0

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.txttên tệp mới ở đâu).

Các bước

  1. Lưu quyền ban đầu vào acl.txt:

    $ getfacl filename.txt > acl.txt
    
  2. 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
    
  3. 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-filethay vì --restorenhư vậy:

$ setfacl --set-file acl.txt second_filename.txt

Thí dụ

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.

  1. Quyền sao lưu từ hệ thống làm việc (lưu ý: getfacltạ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
    
  2. 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/
    
  3. 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
    
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.