Cách thay đổi quyền truy cập tệp cho một thư mục trong một lệnh


11

Làm cách nào tôi có thể thay đổi tất cả các quyền của tệp trong một thư mục trong một lệnh trong Unix?


Bạn có nghĩa là bạn muốn thay đổi quyền cho tất cả các tệp trong thư mục? Bạn có muốn điều này đi vào các thư mục lồng nhau không? Bạn có muốn thay đổi các quyền của chính thư mục hoặc chỉ các tệp trong đó không? Cuối cùng, bạn đã thử tìm kiếm trang web này trước khi đăng câu hỏi của bạn?
Ether

Câu trả lời:


21

Để thay đổi quyền trên một mục nhập tệp hoặc thư mục không theo cách đệ quy, hãy sử dụng chmodlệnh (xem man chmod để đọc thêm về các tùy chọn cụ thể của nó):

chmod +x dir  # Set a directory to be listable
chmod +x file # Set a file to be executable

Để thay đổi chủ sở hữu của một tệp / thư mục đệ quy (ảnh hưởng đến tất cả con cháu):

chown -R username           dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group

Để thay đổi bit quyền của tất cả các tệp trong một thư mục, đệ quy:

find dir -type f -exec chmod 644 {} ';' # make all files       rw-r-r-

Để thay đổi bit quyền của tất cả các thư mục:

find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x

Sẽ thật tuyệt nếu bạn có thể làm điều này:

chmod -R 755 dir

Tuy nhiên, điều này có vấn đề. Nó xử lý các tập tin và thư mục như nhau. Lệnh trên làm cho tất cả người dùng có thể liệt kê và đọc được thư mục, nhưng nó cũng làm cho tất cả các tệp có thể thực thi được, thường là những gì bạn không muốn làm.

Nếu chúng ta thay đổi nó 644, chúng ta sẽ gặp một vấn đề khác:

$ chmod -R 644 x2
chmod: cannot access `x2/authors.html': Permission denied
chmod: cannot access `x2/day_of_week.plot': Permission denied
chmod: cannot access `x2/day_of_week.dat': Permission denied
chmod: cannot access `x2/commits_by_year.png': Permission denied
chmod: cannot access `x2/index.html': Permission denied
chmod: cannot access `x2/commits_by_year.plot': Permission denied
chmod: cannot access `x2/commits_by_year_month.plot': Permission denied
chmod: cannot access `x2/files_by_date.png': Permission denied
chmod: cannot access `x2/files.html': Permission denied
...

Vấn đề là 644lấy ra bit danh sách thư mục và hiệu ứng phụ này ngăn chặn việc truyền tải thêm của cây tệp. Bạn có thể giải quyết vấn đề này bằng cách sử dụng sudo, nhưng bạn vẫn kết thúc với các thư mục hoàn toàn vô dụng đối với người dùng không root.

Vấn đề là, chmod -Rchỉ hoạt động tốt trong một số trường hợp (ví dụ chmod -R g-r), nhưng không hoạt động trong trường hợp bạn muốn gây rối với -xbit, vì nó hoạt động trên các tệp và thư mục một cách bừa bãi.


Tại sao bạn lại cho rằng anh ta muốn thiết lập 644hoặc anh ta đang thiết lập -xcác thư mục? Câu hỏi chỉ quy định rằng anh ta muốn thay đổi quyền, chứ không phải những gì cụ thể.
Reese Moore

@Reese Moore: Bạn nói đúng. Người hỏi thậm chí không nói bất cứ điều gì về việc thay đổi quyền đệ quy.
Joey Adams

1
Bạn thường muốn sử dụng công cụ chế độ + và - biểu tượng cho điều đó; tức là,chmod -R go=u,go-w /dir
dannysauer

6

chmodcó một -Rcờ có nghĩa là thay đổi quyền trên các tệp và thư mục theo cách đệ quy.

Bạn có thể sử dụng chữ 'X' để thực hiện đúng các thư mục: 'X' = "chỉ thực hiện / tìm kiếm nếu tệp là thư mục hoặc đã có quyền thực thi cho một số người dùng"

Vì vậy, ví dụ: chmod -R ug = rwX, o-rwx.

Sẽ làm cho toàn bộ cây có thể truy cập được đối với chủ sở hữu và nhóm của mỗi tệp và không thể truy cập được cho bất kỳ ai khác. Bất kỳ tệp nào đã thực thi sẽ vẫn có thể được thực thi sau đó và tất cả các thư mục sẽ có 'x' cho người dùng và nhóm chứ không phải cho người khác.


Hãy thử chmod -R 444 somedirtrên một thư mục với các tập tin trong đó. Bạn nhận được Permission deniedvì cờ -x đang bị xóa khỏi thư mục và cần tiếp tục đọc thư mục.
Joey Adams

1
Một phụ lục hữu ích cho điều này là cú pháp X = Y. Ví dụ, bạn có thể đặt quyền nhóm cho quyền người dùng bằng chmod -R g = u dir để đặt nhóm và người dùng tương đương. Điều này hoạt động xung quanh những thứ như thư mục cần thực thi trong khi các tệp "đơn giản" thì không.
Paul Rubel

3
chmod -R <file permission> *

Từ trang người đàn ông của chmod:

-R, --recursive
              change files and directories recursively

Sử dụng chmodvới -Rswitch cho nhiều hướng có cây thư mục con có hàng triệu tệp bên trong và bạn muốn thay đổi quyền truy cập tệp của các tệp này cùng một lúc.

Quyền cho phép tập tin có thể là ví dụ. 777, 755, 644, v.v.

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.