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?
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?
Câu trả lời:
Để 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 chmod
lệ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à 644
lấ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 -R
chỉ 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 -x
bit, vì nó hoạt động trên các tệp và thư mục một cách bừa bãi.
644
hoặc anh ta đang thiết lập -x
cá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ể.
chmod -R go=u,go-w /dir
chmod
có một -R
cờ 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.
chmod -R 444 somedir
trên một thư mục với các tập tin trong đó. Bạn nhận được Permission denied
vì cờ -x đang bị xóa khỏi thư mục và cần tiếp tục đọc thư mục.
chmod -R <file permission> *
Từ trang người đàn ông của chmod
:
-R, --recursive
change files and directories recursively
Sử dụng chmod
với -R
switch 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.