2013-04-04 42 views
18

Tôi đang cố gắng đệ quy thay đổi quyền của thư mục và thư mục con cho thư mục" dữ liệu "và chạy vào lỗi sau..có thể ai đó cung cấp đầu vào về lỗi dưới đây?chmod: không thể đọc thư mục `. ': Quyền bị từ chối

<username:/local/mnt/workspace/data>chmod -R 0644 . 
chmod: cannot read directory `.': Permission denied 
+0

Thử 'sudo chmod -R 0644 .'. – Blender

+0

'sudo !!' sau khi thất bại. – alex

+1

@Blender: 'sudo chmod -R -644 .' sẽ xóa quyền thực hiện (tìm kiếm) khỏi thư mục hiện tại và tất cả các thư mục bên dưới nó - không phải là một ý tưởng hay. –

Trả lời

40

Thư mục cần có quyền thực thi được thiết lập để xem nội dung của chúng.

Từ http://content.hccfl.edu/pollock/AUnix1/FilePermissions.htm

Bạn có thể nghĩ về đọc và thực thi trên thư mục theo cách này: thư mục là các tập tin dữ liệu mà giữ hai mẩu thông tin cho mỗi tập tin bên trong, tên của tập tin và đó là số inode. Cần có quyền đọc để truy cập tên các tệp trong một thư mục. Thực thi (a.k.a. tìm kiếm) cho phép là cần thiết để truy cập các inodes của các tập tin trong một thư mục, nếu bạn đã biết tên của tập tin.

Khi bạn thay đổi quyền thư mục thành 644, bạn không thể đọc tệp trong thư mục đó mặc dù bạn có thể đọc thư mục đó để xem thư mục tồn tại.

Bạn cần phải làm điều này:

$ chmod -R 0755 . 

Cách tốt hơn có thể được sử dụng cho phép chuỗi nếu bạn chỉ muốn tắt

Nếu không, bạn sẽ nhìn thấy thư mục, nhưng không truy cập vào thông tin trong thư mục đó.

Bạn có lẽ nên sử dụng điều khoản tương đối thay vì quyền tuyệt đối:

$ chmod -R go-w . 

sẽ loại bỏ quyền ghi từ nhóm và khác, nhưng không chạm vào thực hiện phép.

Bạn cũng có thể sử dụng find chỉ để thiết lập các thư mục hoặc chỉ để thiết lập file:

$ find . -type d -exec chmod 755 {} \; 

này sẽ chỉ chạm vào các thư mục, thiết lập đọc và thực thi điều khoản trên tất cả các thư mục và thiết lập quyền ghi cho chủ sở hữu. Bằng cách này, bạn không đặt quyền thực thi trên các tệp.

+0

về cơ bản tôi muốn loại bỏ quyền thực thi trên các tệp trong các thư mục và thư mục con nhưng vẫn giữ các phép thực thi trên directoreis..how tôi có thể làm điều đó như thế nào? – user2125827

+1

Nó cũng khá giống nhau. Sử dụng cờ '-type f' trong' find' để chỉ trả về các tệp và scipt qua các thư mục: 'find. -type f -exec ugo-x {} \; '. Đó là sử dụng tên biểu tượng (u = người dùng g = nhóm o = khác. -x nghĩa là xóa quyền thi hành). Bằng cách này, bạn không chạm vào tệp.Bạn sẽ cần phải thêm quyền thực thi trở lại các thư mục mà bạn đã xóa chúng từ đầu tiên, vì vậy 'find' có thể đọc nội dung của chúng. –

0

Tôi đoán rằng vì bạn đang sử dụng đệ quy mà bạn đang cố gắng CD vào một thư mục không có quyền thực thi cho bạn.

Các vấn đề liên quan