Quyền thường không được truyền bá bởi thư mục mà các tệp đang được sao chép vào, thay vào đó các quyền mới được kiểm soát bởi người dùng umask
. Tuy nhiên, khi bạn sao chép tệp từ vị trí này sang vị trí khác, đó là một trường hợp đặc biệt trong đó người dùng về umask
cơ bản bị bỏ qua và các quyền hiện có trên tệp được giữ nguyên. Hiểu khái niệm này là chìa khóa để có được những gì bạn muốn.
Vì vậy, để sao chép một tập tin nhưng "bỏ" các quyền hiện tại của nó, bạn có thể nói cp
với "không bảo toàn" bằng cách sử dụng công --no-preserve=all
tắc.
Thí dụ
Nói rằng tôi có các tập tin sau như bạn.
$ mkdir -m 744 somedir
$ touch afile
$ chmod 400 afile
$ ll
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
Và như bạn đã xác nhận nếu chúng tôi chỉ sao chép một cách mù quáng bằng cách sử dụng cp
chúng tôi sẽ nhận được điều này:
$ cp afile somedir/
$ ls -l somedir/
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
Bây giờ chúng ta hãy lặp lại điều này nhưng lần này hãy nói cp
với "thả quyền":
$ rm -f somedir/afile
$ cp --no-preserve=all afile somedir/
$ ls -l somedir/
total 0
-rw-rw-r--. 1 saml saml 0 Feb 14 15:21 afile
Vì vậy, tập tin sao chép bây giờ có quyền của nó được đặt thành 664, nó đã lấy những quyền đó ở đâu?
$ umask
0002
Nếu tôi đổi umask
một thứ khác, chúng tôi có thể lặp lại thử nghiệm này lần thứ 3 và xem các hiệu ứng umask
có trên không được bảo tồn cp
:
$ umask 037
$ rm somedir/afile
$ cp --no-preserve=all afile somedir/
$ ls -l somedir/
total 0
-rw-r-----. 1 saml saml 0 Feb 14 15:29 afile
Lưu ý rằng các quyền không còn là 664, nhưng là 640? Điều đó đã được quyết định bởi umask
. Nó đã nói với bất kỳ lệnh nào tạo ra một tệp để vô hiệu hóa 5 bit thấp hơn trong các quyền ... những kẻ này: ( ----wxrwx
).
setfacl
đã thử lệnh nào? Sản lượng của nó là gì?