Kích thước của một thư mục có ý nghĩa gì trong đầu ra của lệnh 'ls -l'?


Câu trả lời:


45

Đây là kích thước của không gian trên đĩa được sử dụng để lưu trữ thông tin meta cho thư mục (tức là bảng các tệp thuộc về thư mục này). Nếu nó có nghĩa là 1024 thì điều này có nghĩa là 1024 byte trên đĩa được sử dụng (nó luôn phân bổ các khối đầy đủ) cho mục đích này.


3
và khi một thư mục chứa hàng ngàn tệp, kích thước của thư mục có thể dễ dàng> 10KB
glenn jackman

1
@txwikinger Tôi nghĩ rằng các thư mục chứa danh sách các nút, không phải tên tệp thực tế.
Ярослав Рахматуллин

6
@ Рос mặc dù là một mục nhập thư mục bao gồm một số inode và một tên tệp.
200_success

2
Vì vậy, "kích thước" của một thư mục chỉ liên quan đến số lượng tệp bên trong, không phải kích thước của các tệp?
Lee

1
@Lee: Vâng, đúng vậy.
con mèo

14

"Kích thước của một thư mục" được in bằng ls -l(như với bất kỳ loại tệp nào) giá trị được báo cáo bởi stat()cuộc gọi trong statbuf.st_size.

Điều này st_sizecó nghĩa gì đối với các thư mục, hoàn toàn phụ thuộc vào loại hệ thống tệp. Trừ khi bạn biết loại hệ thống tập tin và hiểu các khái niệm của nó, bạn không thể suy ra bất cứ điều gì từ giá trị trong st_size.

  • Trong hệ thống tệp UNIX lịch sử hiện tại thường được đặt tên v7-fs, các thư mục được lặp lại các mục 16 byte chứa số inode 16 bit và 14 byte tên tệp. "Kích cỡ" của một thư mục có ý nghĩa đối với read(2)hoạt động và luôn luôn tăng hoặc giữ nguyên. Các mục ...mục được tạo bằng cách liên kết cứng chúng với thư mục hiện tại và thư mục một cấp trên. Số lượng liên kết cho một thư mục thiếu nữ trống rỗng là 2.

  • Trong hệ thống tệp BSD-4.2 mà từ năm 1989 (SVr4) được gọi ufs, các thư mục là một chuỗi các bản ghi độ dài thay đổi sử dụng định dạng không được cấp để ổn định, vì vậy các lệnh không gian người dùng không được phép đọc định dạng này. "Kích thước" được báo cáo là kích thước tính theo byte như trong v7-fs, kích thước thường tăng hoặc giữ nguyên, nhưng các phiên bản mới hơn của hệ thống tệp có thể thu nhỏ kích thước trong một số điều kiện - nhưng không phải lúc nào bạn cũng mong đợi điều này. Số lượng liên kết được báo cáo cho một thư mục trống là 2 như với v7-fs.

  • Trong WOFS, hệ thống tập tin tôi thiết kế và triển khai từ mùa hè 1988 đến tháng 5 năm 1991, các thư mục luôn báo cáo "kích thước" 0 và không bao giờ có một loại nội dung có thể được đọc bằng read(2)cuộc gọi. Điều này là do WOFShệ thống tệp Copy-on-Write đầu tiên và bởi vì trong WOFScác tệp báo cáo thư mục mà chúng nằm trong thay vì được liệt kê trong thư mục. Nếu bạn đọc một WOFSthư mục bằng cách sử dụng readdir(), bạn chỉ nhận được dữ liệu cho các mục dự định, nhưng không bao giờ cho .... Số lượng liên kết của một thư mục trống trên WOFSlà 1 và toàn bộ hành vi hoàn toàn tuân thủ POSIX.

  • Trong ZFSđó, đã được thực hiện sau khi đọc các WOFSbài báo. ZFSlà một hệ thống tập tin sao chép và ghi và các tác giả của nó không phủ nhận rằng họ đã sao chép các khái niệm từ đó WOFS. Các thư mục trên ZFS báo cáo number of directory entriestrong st_size, vì vậy "kích thước" được báo cáo không có ý nghĩa thực sự đối với không gian đĩa bị chiếm dụng từ dữ liệu thư mục. Không có ...các mục trong thư mục ZFS, nhưng nếu bạn gọi readdir(), các mục này sẽ bị làm giả và trả về cho hai thao tác đầu tiên. ZFS là FS duy nhất trong danh sách không hỗ trợ các thư mục liên kết cứng nhưng số lượng liên kết được báo cáo cho các thư mục luôn là 2. Hai bất thường trong ZFS được triển khai để giảm sự nhầm lẫn trong các chương trình lịch sử không phải POSIX.

  • Tương tự như ZFS, WAFL sao chép một số nhưng không phải tất cả các ý tưởng từ WOFS. Netapp WAFLđã được viết 3 năm sau khi WOFSbài báo được xuất bản, WAFL là bản sao chép, nhưng WAFL dường như báo cáo các giá trị "kích thước" có thể là "kích thước thư mục thực" theo giả định rằng thư mục có nội dung.


13

Một thư mục dự trữ 4096 byte (tối thiểu) cho siêu dữ liệu về chính nó và nội dung của nó.

Ngoài ra, 4096 byte là đơn vị phân bổ mặc định (khối) cho hệ thống tập tin ext2 / ext3 / ext4 và do đó một thư mục không thể nhỏ hơn.

Trên các hệ thống tệp khác nhau, bạn có thể tìm thấy các thư mục có kích thước mặc định khác nhau, đó là do kích thước khối mặc định của hệ thống tệp.

Kích thước thư mục cũng có thể tăng trưởng linh hoạt khi chúng được lấp đầy, nhưng một khi đã lấp đầy không gian dành cho dữ liệu meta có thể được phân bổ lại mà không cần xóa thư mục.


1
Bạn đang đề cập đến siêu dữ liệu nào?
Stéphane Chazelas

1
chi tiết phụ thuộc vào hệ thống tệp nhưng thường bao gồm dữ liệu meta như tên tệp, số inode, loại tệp (tệp, dir, fifo, socket, nút thiết bị, symlink, v.v.), chủ sở hữu, nhóm, quyền, thuộc tính, ACL, mục tiêu liên kết.
cas

6
@CraigSanders, thư mục chứa tên đối tượng và số inode tương ứng chỉ . Inode chứa loại đối tượng, chủ sở hữu / nhóm, quyền, tham chiếu đến bất cứ nơi nào ACL và thuộc tính mở rộng được giữ, ... Bất cứ điều gì khác sẽ gây ra sự phá vỡ nghiêm trọng về ngữ nghĩa hệ thống tập tin POSIX.
vonbrand

UFS của tôi chỉ dự trữ 512 byte cho dữ liệu meta của riêng nó cho mỗi thư mục.
FUZxxl

4

Một thư mục chỉ là một thư mục, giống như một thư mục điện thoại. Nó chỉ là một tập tin với một danh sách các số và một tên bên cạnh chúng. Mỗi số tham chiếu một tệp trong hệ thống tệp (số inode) và tên là tên tệp.

Bạn cần không gian đĩa để lưu dữ liệu đó, cách phân bổ và phát triển và thu nhỏ tùy thuộc vào hệ thống tệp.


bạn có thể bao gồm các chi tiết thực tế về những gì dữ liệu meta được lưu giữ và các cân nhắc phân bổ khối liên quan đến việc tăng kích thước. nó sẽ làm cho một câu trả lời chính xác hơn hoàn thành với câu chuyện ngụ ngôn đã được đưa ra. :)
n611x007

3
@naxa, đó là phụ thuộc hệ thống tệp và thậm chí trong một hệ thống tệp (như ext4), phụ thuộc vào tùy chọn bạn bật, vì vậy tôi muốn để nó là "phụ thuộc hệ thống tệp", thay vì cố gắng và không mệt mỏi có liên quan cho câu hỏi này.
Stéphane Chazelas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.