Chmod đệ quy


249

Tôi có một kho lưu trữ, được lưu trữ bởi người khác và tôi muốn tự động, sau khi tôi tải xuống, để thay đổi một nhánh của hệ thống tệp trong các tệp được trích xuất để có quyền truy cập đọc. (Tôi không thể thay đổi cách tạo tệp lưu trữ).

Tôi đã xem xét chủ đề này: chmod: Cách thêm đệ quy quyền thực thi chỉ vào các tệp đã có quyền thực thi như đối với một số người khác, nhưng không có niềm vui.

Các thư mục ban đầu đi kèm với nhiều nhưng tất cả các cờ sai, chúng có thể xuất hiện dưới dạng:

drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--

Đó chỉ là số ít tôi đã phát hiện ra cho đến nay, nhưng có thể nhiều hơn nữa.

findlỗi khi cố gắng nhìn vào một thư mục không có sự xcho phép, và do đó không chuyển nó đến chmod. Những gì tôi đã làm cho đến nay, là thay đổi thủ công các quyền trên thư mục mẹ, sau đó đi vào các thư mục con và làm tương tự cho chúng và cứ thế. Nhưng đây là rất nhiều lao động tay. Không có cách nào để làm điều này tự động?

Tức là làm thế nào tôi đang làm điều đó bây giờ:

làm:

$ chmod -R +x
$ chmod -R +r

cho đến khi tôi không có lỗi

$ find -type f -exec chmod -x {} +

Nhưng phải có một cách tốt hơn.


3
-r không giống như -R
PJ Brunet

Lưu ý linh tinh, nếu bạn muốn nói làm cho tất cả các quyền của nhóm khớp với các quyền của chủ sở hữu (dường như ít có khả năng làm hỏng mọi thứ IMO), điều đó hoàn toàn có thể xảy ra với serverfault.com/a/284478/210994
ThorSummoner 27/2/18

Câu trả lời:


131

Bạn cần truy cập đọc, ngoài việc thực thi quyền truy cập, để liệt kê một thư mục. Nếu bạn chỉ có quyền truy cập, thì bạn có thể tìm ra tên của các mục trong thư mục, nhưng không có thông tin nào khác (thậm chí không phải loại, vì vậy bạn không biết mục nào là thư mục con). Điều này làm việc cho tôi:

find . -type d -exec chmod +rx {} \;

2
Sự khác biệt giữa '\;' là gì và '+' đã được OP sử dụng ở cuối lệnh?
kon tâm lý

1
@konpsych Rõ ràng +xây dựng dòng lệnh theo một cách khác. Tôi đã không thực sự nhận thức được nó; \;là cách thông thường, với một lệnh cho mỗi tệp khớp với tìm kiếm.
Fred Foo

Không hoạt động nếu một số tệp có khoảng trắng trong tên của chúng
Soonts

3
@Soonts Sau đó "{}"thay vì {}nên sửa nó.
dùng4642212

Tôi đã chạy nó dưới hệ thống con linux trên Windows 10 và nó có tác dụng ngược lại. Hầu hết các quyền tập tin đã được gỡ bỏ.
Max Candocia

176

Bạn có thể sử dụng chmod với Xchữ cái chế độ (viết hoa X) để chỉ đặt cờ thực thi cho các thư mục.

Trong ví dụ bên dưới, cờ thực thi sẽ bị xóa và sau đó được đặt cho tất cả các thư mục theo cách đệ quy:

~$ mkdir foo
~$ mkdir foo/bar
~$ mkdir foo/baz
~$ touch foo/x
~$ touch foo/y

~$ chmod -R go-X foo 
~$ ls -l foo
total 8
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 bar
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 y

~$ chmod -R go+X foo 
~$ ls -l foo
total 8
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 bar
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 y

Một chút giải thích:

  • chmod -x foo- xóa cờ eXecutable chofoo
  • chmod +x foo- đặt cờ eXecutable chofoo
  • chmod go+x foo- giống như trên, nhưng chỉ đặt cờ cho Nhóm và người dùng khác , không chạm vào Người dùng (chủ sở hữu)
  • chmod go+X foo - giống như trên, nhưng chỉ áp dụng cho các thư mục, không chạm vào các tệp
  • chmod -R go+X foo- giống như trên, nhưng làm điều này đệ quy cho tất cả các thư mục con củafoo

80

Cố gắng thay đổi tất cả các bản án cùng một lúc:

chmod -R +xr

Điều đó cũng sẽ đặt quyền thực thi trên tất cả các thư mục không.
Fred Foo

1
Đúng. Điều này chỉ thay thế bước lặp đầu tiên. Bạn vẫn phải chạy find -type f -exec chmod -x {} +sau đó.
choroba

50

Để làm cho mọi thứ có thể ghi được bởi chủ sở hữu, hãy đọc / thực thi bởi nhóm và thực thi trên thế giới:

chmod -R 0755

Để làm cho mọi thứ rộng mở:

chmod -R 0777

12
Thêm vị trí thư mục hiện tại:chmod -R 0777 .
Danijel

18

Thêm quyền thực thi, đệ quy , vào tất cả các tệp (không phải thư mục) trong thư mục hiện tại có shphần mở rộng:

find . -name '*.sh' -type f | xargs chmod +x

* Lưu ý đường ống ( |)


2

Cung cấp 0777 cho tất cả các tệp và thư mục bắt đầu từ đường dẫn hiện tại:

chmod -R 0777 ./

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.