Thay đổi tất cả các quyền của tệp và thư mục của một thư mục thành 644/755


184

Làm cách nào để thay đổi tất cả các tệp thành 644 và tất cả các thư mục thành 755 bằng cách sử dụng chmodtừ linuxdấu nhắc lệnh? (Thiết bị đầu cuối)


6
Nếu ai đó (@animuson) sẽ rất tốt bụng để giải thích cho tôi, tại sao câu hỏi chmod này không có chủ đề và tất cả những người khác (14.438 kết quả) ở đây không ...
hugo der hungrige

Hơi muộn, nhưng lệnh này cũng sẽ thực hiện câu trả lời được chấp nhận trong một lần bắn: chmod -R a = r, a + X, u + w / your / path
MichaelICE

Câu hỏi hay, không xứng đáng đóng cửa. Chúng nên được chuyển đến một trang con stackoverflow hơn là đóng.
Erik Friesen

1
@hugoderhungrige có nghĩa là hãy hỏi nó trên trang web Server như http://superuser.com:: P nhưng câu hỏi này đã giúp tôi ở đây, cảm ơn.
emotality 2/2/2015

3
Câu trả lời ngắn:chmod -R u+rwX,go+rX,go-w /foo
kenorb

Câu trả lời:


345

Một cách tiếp cận có thể là sử dụng find:

cho các thư mục

find /desired_location -type d -print0 | xargs -0 chmod 0755

cho các tập tin

find /desired_location -type f -print0 | xargs -0 chmod 0644

21
chỉ với một người khác như tôi, điều này không hoạt động thay vào đó hãy thử sudo find /your/location -type f -exec chmod 644 {} \;các tệp và sudo find /your/location -type d -exec chmod 755 {} \;cho các thư mục
NineCattoRules

Tôi đã chạy giải pháp ban đầu và nó làm rối các quyền của tôi trên các tệp và thư mục. coi chừng! Các giải pháp về nhận xét đã làm việc, cảm ơn!
Mahsa Mortazavi

3
Tại sao (?) Nó tốt hơn tham chmod -R a=r,u+w,a+X /foo?
Peter Krauss

thất bại vớiunable to execute /bin/chmod: Argument list too long
vladkras

Điều gì sẽ xảy ra nếu tôi chỉ muốn thư mục con là chmod 755 khi chỉ định vị trí mong muốn? Bởi vì điều này cũng sẽ làm cho thư mục mẹ 755
MaXi32

105

Cách dễ nhất là làm:

chmod -R u+rwX,go+rX,go-w /path/to/dir

về cơ bản có nghĩa là:

để trả thù chtập tin modes -Rbằng cách đưa ra:

  • user: read, write và e Xecute quyền,
  • gongười dùng roup và có: read và e Xecute quyền, nhưng không -wcho phép nghi thức.

Xin lưu ý rằng Xsẽ làm cho một thư mục có thể thực thi được, nhưng không phải là một tệp, trừ khi nó đã có thể tìm kiếm / thực thi được.

+X - làm cho một thư mục hoặc tập tin có thể tìm kiếm / thực thi bởi mọi người nếu nó đã được tìm kiếm / thực thi bởi bất cứ ai.

Vui lòng kiểm tra man chmodđể biết thêm chi tiết.

Xem thêm: Làm thế nào để chmod tất cả các thư mục ngoại trừ các tệp (đệ quy)? tại SU


7
chmod -R a = r, u + w, a + X / foo
John Allsup

9
Câu trả lời này, trong khi gọn gàng, có một vấn đề: một tệp có thể thực thi được trước khi chạy lệnh sẽ được thực thi sau đó. Xem câu trả lời của @JohnAllsup cho một lệnh không có lỗi này.
mzuther

4
@mzuther trừ khi vấn đề này thực sự là tính năng dành cho bạn
Rịa

37

Cái ngắn nhất tôi có thể nghĩ ra là:

chmod -R a=r,u+w,a+X /foo

hoạt động trên GNU / Linux và tôi tin vào Posix nói chung (từ cách đọc của tôi về: http://pub.opengroup.org/onlinepub/9699919799/utilities/chmod.html ).

Điều này làm là:

  1. Đặt tệp / thư mục thành r__r__r__ (0444)
  2. Thêm w cho chủ sở hữu, để có được rw_r__r__ (0644)
  3. Đặt thực thi cho tất cả nếu một thư mục (0755 cho dir, 0644 cho tệp).

Điều quan trọng, quyền 1 bước sẽ xóa tất cả các bit thực thi, vì vậy bước 3 chỉ thêm lại các bit thực thi cho các thư mục (không bao giờ tệp). Ngoài ra, tất cả ba bước xảy ra trước khi một thư mục được đệ quy vào (vì vậy điều này không tương đương với ví dụ

chmod -R a=r /foo
chmod -R u+w /foo
chmod -R a+X /foo

vì a = r xóa x khỏi các thư mục, do đó chmod không thể lặp lại vào chúng.)


xuất sắc! đã giúp tôi rất nhiều
Jannie Theunissen

13

Dễ nhớ nhất đối với tôi là hai thao tác:

chmod -R 644 dirName
chmod -R +X dirName

+ X chỉ ảnh hưởng đến các thư mục.


1
Đơn giản và an toàn hơn
Marco Marsala

12

Trên https://help.directadmin.com/item.php?id=589 họ viết:

Nếu bạn cần một cách nhanh chóng để đặt lại dữ liệu public_html của mình thành 755 cho các thư mục và 644 cho các tệp, thì bạn có thể sử dụng một cái gì đó như thế này:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

Tôi đã thử nghiệm và ... nó hoạt động!


Cứu người! Cảm ơn các giải pháp sạch cho vấn đề này! Làm việc cho tôi khi cần khắc phục sự cố quyền cho cài đặt WordPress!
twknab

Hoạt động tốt để thực hiện các điều chỉnh trong một thư mục.
Christian Berendt

8

Điều này làm việc cho tôi:

find /A -type d -exec chmod 0755 {} \;
find /A -type f -exec chmod 0644 {} \;

3
Hãy cẩn thận: Các lệnh này sẽ không xử lý các tệp hoặc thư mục có khoảng trắng trong tên của chúng. Các lệnh trong câu trả lời được chấp nhận sẽ.
Chad Nouis

1
Thông báo trước này chỉ áp dụng, nếu {} không được bao quanh bởi dấu ngoặc kép, do đó, không có lý do gì để chơi với print0 và xargs -0, những điều sau đây:find /A -type X -exec chmod Y '{}' \;
Michael Stumpfl

6

Thực hiện cả hai trong một lần với:

find -type f ... -o -type d ...

Như trong, tìm loại f HOẶC loại d, và thực hiện ... đầu tiên cho các tệp và thứ hai ... cho các thư mục. Đặc biệt:

find -type f -exec chmod --changes 644 {} + -o -type d -exec chmod --changes 755 {} +

Rời khỏi --changesnếu bạn muốn nó làm việc âm thầm.


2

Nếu bạn cần một cách nhanh chóng để đặt lại dữ liệu public_html của mình thành 755 cho các thư mục và 644 cho các tệp, thì bạn có thể sử dụng một cái gì đó như thế này:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

ngoài ra, nếu bạn biết PHP chạy với tư cách là người dùng chứ không phải là "apache", thì bạn có thể đặt các tệp PHP thành 600, để có thêm mức độ bảo mật, ví dụ:

find . -type f -name '*.php' -exec chmod 600 {} \;

Bạn có thể tìm thấy nguồn này tại đây: https://help.directadmin.com/item.php?id=589


-9

Điều này cũng có thể làm việc:

chmod -R 755 *  // All files and folders to 755.

chmod -R 644 *.*  // All files will be 644.

1
ĐỪNG MỌI NGƯỜI LÀM ĐIỀU ĐÓ! Nó ảnh hưởng đến máy chủ hoàn chỉnh!
T.Todua
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.