Cấu trúc bên trong của các thư mục phụ thuộc vào hệ thống tập tin đang sử dụng. Nếu bạn muốn biết chính xác những gì xảy ra, hãy xem triển khai hệ thống tập tin.
Về cơ bản, trong hầu hết các hệ thống tập tin, một thư mục là một mảng kết hợp giữa tên tệp (khóa) và số inodes (giá trị). Một cái gì đó như thế này¹:
1167010 .
1158721 ..
1167626 subdir
132651 barfile
132650 bazfile
Danh sách này được mã hóa theo một số cách - ít nhiều - hiệu quả bên trong một chuỗi (thường) các khối 4KB. Lưu ý rằng nội dung của các tệp thông thường được lưu trữ tương tự. Trong trường hợp các thư mục, không có điểm nào để biết kích thước nào thực sự được sử dụng bên trong các khối này. Đó là lý do tại sao kích thước của các thư mục được báo cáo du
là bội số của 4KB.
Các nút ở đó để liên kết các khối lại với nhau, tạo thành một thực thể duy nhất, cụ thể là một "tệp" theo nghĩa chung. Chúng được xác định bởi một số là một loại địa chỉ và mỗi địa chỉ thường được lưu trữ dưới dạng một khối đặc biệt.
Quản lý tất cả điều này xảy ra trong chế độ kernel. Phần mềm chỉ yêu cầu tạo một thư mục có chức năng có tên int mkdir(const char *pathname, mode_t mode);
dẫn đến một cuộc gọi hệ thống và tất cả phần còn lại được thực hiện phía sau hậu trường.
Về cấu trúc liên kết:
Một liên kết cứng không phải là một tập tin, nó chỉ là một mục nhập thư mục mới (tức là một tên - liên kết số inode ) đề cập đến một thực thể inode có sẵn từ trước. Điều này có nghĩa là cùng một nút có thể được truy cập từ các tên đường dẫn khác nhau. Đặc biệt, vì metadatas (quyền, quyền sở hữu, dấu thời gian,) được lưu trữ trong inode, chúng là duy nhất và độc lập với tên đường dẫn được chọn để truy cập tệp.
Một liên kết tượng trưng là một tập tin và nó khác với mục tiêu của nó. Điều này có nghĩa là nó có inode riêng. Nó từng được xử lý giống như một tệp thông thường: đường dẫn đích được lưu trữ trong một khối dữ liệu. Nhưng bây giờ, vì lý do hiệu quả trong gần đây ext hệ thống tập tin, đường dẫn ngắn hơn 60 byte dài được lưu trữ trong các inode tự (sử dụng các lĩnh vực mà thông thường sẽ được sử dụng để lưu trữ các con trỏ đến khối dữ liệu).
-
1. điều này đã thu được bằng cách sử dụng ls -ai1 testdir
.
2. có loại phải khác với 'thư mục' ngày nay.