Đã làm việc với Linux trong nhiều năm và thấy mình có chút thời gian rảnh, tôi quyết định xem lại một số điều cơ bản. Vì vậy, tôi đã đọc lại nội dung về quyền (không kiểm tra mã nguồn) và các trường hợp đặc biệt của nó đối với các thư mục và đưa ra cách suy nghĩ mới (ít nhất là ...) đối với quyền thư mục (đối với người dùng cụ thể / nhóm / người khác): Tôi tưởng tượng một thư mục là một bảng có hai cột, như vậy:
filename | inode
foo | 111
bar | 222
Quyền đọc có nghĩa là bạn có thể đọc (và liệt kê) cột bên trái của bảng, quyền ghi tương ứng với việc thêm và xóa các mục vào bảng và quyền thực thi tương ứng với khả năng dịch từ tên tệp sang inode; tức là bạn có thể truy cập nội dung của thư mục.
Tôi đã thực hiện một số thử nghiệm và kết quả hoàn toàn phù hợp với "thế giới quan" này của tôi, nhưng một kết luận dường như không thể giải thích được: rằng một thư mục có quyền d-w-------
, hoàn toàn vô dụng. Xây dựng: bạn không thể liệt kê nội dung của nó, bạn không thể đọc bất kỳ tệp nào bạn biết tồn tại bên trong (vì bạn không thể dịch tên thành inodes), bạn không thể xóa hoặc đổi tên hoặc thêm tệp, vì một lần nữa điều đó có nghĩa là dịch và thậm chí bạn không thể thêm các liên kết cứng (bởi vì, tôi phỏng đoán, điều đó có nghĩa là thêm tên cũng như số inode, có nghĩa là bạn sẽ biết cả hai, lần lượt, lại phỏng đoán, vi phạm mục đích hủy đặt quyền thực thi) . Và tất nhiên, nếu có là tập tin bên trong một thư mục như vậy, thì bạn không thể xóa thư mục đó một trong hai, bởi vì bạn không thể xóa nội dung của nó.
Vì vậy, ... tôi muốn hỏi hai câu hỏi:
- Sự tương tự này của tôi có đúng không, hay nó là một sai lầm lớn?
- Bất kể câu trả lời trước đó, có tình huống nào có một thư mục có quyền như mô tả là phù hợp không?
mkdir foo ; chmod 200 foo ; touch foo/bar
tôi nhận được touch: cannot touch ‘foo/bar’: Permission denied
. Điều này xảy ra ngay cả khi foo / bar đã tồn tại. Tôi đang thử nghiệm trong bash (Arch Linux).