it-swarm-vi.com

Làm cách nào để thay đổi quyền cho một thư mục và tất cả các thư mục con và tệp của nó trong một bước trong Linux?

Tôi muốn thay đổi quyền của một thư mục và tất cả các thư mục và tệp phụ của nó trong một bước (lệnh) trong Linux.

Tôi đã thử lệnh dưới đây nhưng nó chỉ hoạt động cho thư mục được đề cập:

chmod 775 /opt/lampp/htdocs

Có cách nào để đặt chmod 755 cho /opt/lampp/htdocs và tất cả nội dung của nó bao gồm các thư mục con và tệp không?

Ngoài ra, trong tương lai, nếu tôi tạo thư mục hoặc tệp mới bên trong htdocs, làm thế nào các quyền của điều đó có thể tự động được đặt thành 755?

Tôi cũng đã xem qua liên kết này:

http://stackoverflow.com/questions/3740187/how-to-set-default-chmod-in-linux-terminal

1546
Adam

Các câu trả lời khác đều đúng, trong đó chmod -R 755 sẽ đặt các quyền này cho tất cả các tệp và thư mục con trong cây. Nhưng tại sao bạn muốn ? Nó có thể có ý nghĩa đối với các thư mục, nhưng tại sao lại thiết lập bit thực thi trên tất cả các tệp?

Tôi nghi ngờ những gì bạn thực sự muốn làm là đặt các thư mục thành 755 và để các tệp một mình hoặc đặt chúng thành 644. Để làm điều này, bạn có thể sử dụng lệnh find. Ví dụ:

Để thay đổi tất cả các thư mục thành 755 (drwxr-xr-x):

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

Để thay đổi tất cả các tệp thành 644 (-rw-r--r--):

find /opt/lampp/htdocs -type f -exec chmod 644 {} \;
2608
WombleGoneBad

Kiểm tra tùy chọn -R

chmod -R <permissionsettings> <dirname>

Trong tương lai, bạn có thể tiết kiệm rất nhiều thời gian bằng cách kiểm tra trang man trước:

man <command name>

Vì vậy, trong trường hợp này:

man chmod
709
Steve Robillard

Nếu bạn muốn đặt quyền trên tất cả các tệp thành a+r và tất cả các thư mục thành a+x và thực hiện điều đó một cách đệ quy thông qua cây thư mục con hoàn chỉnh, hãy sử dụng:

chmod -R a+rX *

X (nghĩa là vốn X, không nhỏ x!) Bị bỏ qua cho các tệp (trừ khi chúng có thể được thực thi cho ai đó) nhưng được sử dụng cho các thư mục.

340
Pete

Bạn có thể sử dụng -R với chmod để duyệt qua đệ quy của tất cả các tệp và thư mục con.

Bạn có thể cần Sudo vì nó phụ thuộc vào Đ&EGRAVE;N đang được người dùng hiện tại hoặc người khác cài đặt:

Sudo chmod 755 -R /opt/lampp/htdocs
122
ravi ranjan

Để đặt thành tất cả các thư mục con (đệ quy), hãy sử dụng -R

chmod 755 /folder -R

Và sử dụng umask để đặt mặc định thành thư mục/tệp mới cd/thư mục umask 755

71
Topera

Lệnh đệ quy đúng là:

Sudo chmod 755 -R /opt/lampp/htdocs

-R: thay đổi mọi thư mục con kể cả thư mục hiện tại

60
Pramendra Gupta

chmod 755 -R /opt/lampp/htdocs sẽ đệ quy các quyền. Không có cách nào để tự động đặt quyền cho các tệp trong thư mục này được tạo sau khi bạn đặt quyền, nhưng bạn có thể thay đổi quyền truy cập tệp mặc định trên toàn hệ thống bằng cách đặt umask 022.

49
sleepynate

Bạn có thể muốn xem xét câu trả lời này được cung cấp bởi nik trên superuser và sử dụng "one chmod" cho tất cả các tệp/thư mục như thế này:

chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
23
Iam Zesh

Sử dụng:

Sudo chmod 755 -R /whatever/your/directory/is

Tuy nhiên, hãy cẩn thận với điều đó. Nó thực sự có thể làm tổn thương bạn nếu bạn thay đổi quyền của các tệp/thư mục sai.

20
Nate Starner

Đây là một cách khác để đặt thư mục thành 775 và tệp thành 664.

find /opt/lampp/htdocs \
\( -type f -exec chmod ug+rw,o+r {} \; \) , \
\( -type d -exec chmod ug+rwxs,o+rx {} \; \)

Nó có thể trông dài, nhưng nó khá tuyệt vì ba lý do:

  1. Quét qua hệ thống tệp chỉ một lần thay vì hai lần.
  2. Cung cấp kiểm soát tốt hơn về cách tệp được xử lý so với cách thư mục được xử lý. Điều này hữu ích khi làm việc với các chế độ đặc biệt chẳng hạn như bit dính , mà bạn có thể muốn áp dụng cho các thư mục nhưng không phải các tệp.
  3. Sử dụng một kỹ thuật ra khỏi các trang man (xem bên dưới).

Lưu ý rằng tôi chưa xác nhận sự khác biệt về hiệu năng (nếu có) giữa giải pháp này và chỉ đơn giản là sử dụng hai lệnh find (như trong giải pháp của Peter Mortensen). Tuy nhiên, nhìn thấy một ví dụ tương tự trong hướng dẫn là đáng khích lệ.

Ví dụ từ trang man find:

find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)

Traverse the filesystem just once, listing setuid files and  direc‐
tories into /root/suid.txt and large files into /root/big.txt.

Chúc mừng

19
chrisfargen

chmod -R 755 directory_name hoạt động, nhưng làm thế nào bạn giữ các tệp mới thành 755? Quyền của tập tin trở thành quyền mặc định.

11
Sanchit Gupta

Bạn muốn đảm bảo rằng các tệp và thư mục phù hợp là chmod-ed/quyền cho những tệp phù hợp. Đối với tất cả các thư mục bạn muốn

find /opt/lampp/htdocs -type d -exec chmod 711 {} \;

Và đối với tất cả các hình ảnh, JavaScript, CSS, HTML ... tốt, bạn không nên thực hiện chúng. Vì vậy, sử dụng

chmod 644 img/* js/* html/*

Nhưng đối với tất cả mã logic (ví dụ: mã PHP), bạn nên đặt quyền để người dùng không thể thấy mã đó:

chmod 600 file
10
NikolaiDante

Đối với Mac OS X 10.7 (Lion), đó là:

chmod -R 755 /directory

Và vâng, như tất cả những người khác nói, hãy cẩn thận khi làm điều này.

7
wmartin

Tôi nghĩ rằng Adam đã hỏi làm thế nào để thay đổi giá trị umask cho tất cả các quy trình buộc hoạt động trên thư mục /opt/lampp/htdocs.

Mặt nạ chế độ tạo tệp người dùng (umask) được sử dụng để xác định quyền truy cập tệp cho các tệp mới được tạo. Nó có thể được sử dụng để kiểm soát quyền tập tin mặc định cho các tập tin mới.

vì vậy nếu bạn sẽ sử dụng một số loại chương trình ftp để tải tệp lên /opt/lampp/htdocs, bạn cần định cấu hình máy chủ ftp của mình để sử dụng umask bạn muốn.

Nếu tập tin/thư mục được tạo bởi ví dụ bởi php, bạn cần sửa đổi mã php

<?php
umask(0022);
// other code
?>

nếu bạn sẽ tạo các tệp/thư mục mới từ phiên bash của mình, bạn có thể đặt giá trị umask trong hồ sơ Shell của mình ~/.bashrc Hoặc bạn có thể thiết lập umask trong tệp /etc/bashrc hoặc /etc/profile cho tất cả người dùng. thêm phần sau vào tập tin: umask 022

Sample umask Values and File Creation Permissions
If umask value set to   User permission     Group permission     Others permission
000                         all              all                   all
007                         all              all                   none
027                         all          read / execute            none

Và để thay đổi quyền cho các tệp đã được tạo, bạn có thể sử dụng find. Hi vọng điêu nay co ich.

6
Viktor

Có hai câu trả lời về việc tìm tệp và áp dụng chmod cho chúng. Đầu tiên là find tệp và áp dụng chmod khi tìm thấy (như được đề xuất bởi @WombleGoneBad).

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

Giải pháp thứ hai là tạo danh sách tất cả các tệp bằng lệnh find và cung cấp danh sách này cho lệnh chmod (theo đề xuất của @lamgesh).

chmod 755 $(find /path/to/base/dir -type d)

Cả hai phiên bản này đều hoạt động tốt miễn là số lượng tệp được trả về bởi lệnh find là nhỏ. Giải pháp thứ hai trông tuyệt vời và dễ đọc hơn giải pháp thứ nhất. Nếu có số lượng tệp lớn, giải pháp thứ hai trả về lỗi: Argument list too long.

Vì vậy, đề nghị của tôi là

  1. Sử dụng chmod -R 755 /opt/lampp/htdocs nếu bạn muốn thay đổi quyền của tất cả các tệp và thư mục cùng một lúc.
  2. Sử dụng find /opt/lampp/htdocs -type d -exec chmod 755 {} \; nếu số lượng tệp bạn đang sử dụng rất lớn. Tùy chọn -type x chỉ tìm kiếm loại tệp cụ thể, trong đó d được sử dụng để tìm thư mục, f cho tệp và l cho liên kết.
  3. Sử dụng chmod 755 $(find /path/to/base/dir -type d) nếu không
  4. Tốt hơn là sử dụng cái đầu tiên trong mọi tình huống
4
Prabhu

Nó rất đơn giản.

Trong Terminal đi đến trình quản lý tập tin. ví dụ: Sudo nemo. Đi /opt/ sau đó nhấp Thuộc tính → Quyền . và sau đó Khác . Cuối cùng, thay đổi để tạo và xóa và tập tin acess để đọc và viết và nhấp vào nút áp dụng ... Và làm việc.

2
Debian.