Thứ tự thư mục của người dùng trong các thư mục trong một thư mục (được sử dụng bởi `ls -U`) là gì?


19

Theo trang man cho ls, ls -Ucó nghĩa là:

không sắp xếp; liệt kê các mục theo thứ tự thư mục.

"Thứ tự thư mục" nghĩa là gì, và nó được xác định như thế nào?

Thử nghiệm sau đây (được thực hiện trên hệ thống tệp ext3), cho thấy rằng đó không phải là thứ tự mà các tệp được tạo:

root@sv1010vm0007:/tmp# mkdir test
root@sv1010vm0007:/tmp# touch test/2
root@sv1010vm0007:/tmp# touch test/1
root@sv1010vm0007:/tmp# touch test/3
root@sv1010vm0007:/tmp# ls -U test
2  3  1

Câu trả lời:


14

Nó phụ thuộc vào hệ thống tập tin. Đối với một số hệ thống tệp (ext3 trong số chúng), một thư mục thực sự là một tệp có định dạng nổi tiếng và bit 'd' được đặt trong các quyền hoặc chế độ của nó. Trong trường hợp đó, lịch sử của các tên tệp đã được tạo và xóa có độ dài. Nhân sẽ điền vào mục đầu tiên trong tệp thư mục có đủ chỗ để giữ tên tệp mới. Xem http://e2fsprogs.sourceforge.net/ext2intro.html để biết thêm chi tiết, phần có tiêu đề "Mô tả vật lý".

Đối với một số hệ thống tệp khác, Reiserfs trong số chúng, một thư mục thực sự chỉ là một số mục trong cây B + không hiển thị trong hệ thống tệp, do đó, lsmột thư mục trong hệ thống tệp Reiserfs theo thứ tự từ vựng.


@Bruce: Vậy, nội dung của tập tin "thư mục" này chính xác là gì?
Faheem Mitha

Theo truyền thống, một cái gì đó rất giống với struct dirent, mà tôi tìm thấy được xác định trong /usr/include/bits/dirent.h trên hộp RHEL và trên hộp Slackware 11.0. Cả hai máy đó đều từ chối mở () một thư mục trực tiếp. Tôi biết rằng tôi đã từng làm những việc như "cat.> Dot.as.file" để chuyển đổi một thư mục thành một tệp thông thường, lần cuối cùng tôi đã làm điều đó chắc chắn là Solaris 8, tôi nghĩ vậy. Về cơ bản, struct dirent chứa một inode (một số), độ dài bản ghi, độ dài tên và một chuỗi, như tôi nhớ lại, có thể hoặc không thể kết thúc ASCII-Nul.
Bruce Ediger

@Bruce: Ok. Và cấu trúc C này quản lý để có được tất cả thông tin về các tệp và thư mục con chứa trong các trường đó?
Faheem Mitha

Một thư mục trong các hệ thống tệp như ext2 hoặc BSD FFS hoặc hệ thống tệp Unix gốc, chỉ chứa một danh sách các số inode và tên tệp tương ứng. Gọi "ls" mà không có đối số chỉ giúp bạn có được danh sách tên tệp. Nếu bạn đã thực hiện "ls -l", "ls" sẽ tự tìm kiếm mọi tên tệp bằng cách thực hiện một cuộc gọi hệ thống (2) trên tên tệp và từ stat struct, nhận quyền, kích thước, "loại tệp", v.v. Vì vậy, không, một tệp thư mục không có tất cả thông tin, chỉ có một danh sách các tên.
Bruce Ediger

2
ext2.sourceforge.net/2005-ols/apers-html/node3.html giải thích rằng tính năng dir_index băm tên tệp và một bí mật cụ thể của hệ thống tệp. dump2efs bao gồm dir_index trong dòng tính năng Filesystem nếu tính năng này được bật.
Martin Dorey

3

Thật vậy, không có thứ tự cụ thể để mong đợi. Tùy thuộc vào hệ điều hành và triển khai hệ thống tệp để sắp xếp các mục theo cách nó thích. Một mục tiêu của tùy chọn này là để có được danh sách nhanh hơn có thể là một yếu tố quan trọng với các thư mục rất lớn.


Có các thuật toán lập lịch / lưu trữ trong trình điều khiển kernel và hệ thống tập tin ảnh hưởng khi dữ liệu chính xác được ghi vào đĩa. Điều này được thực hiện để tăng hiệu suất. Vì tối ưu hóa này, bạn thực sự không thể biết chính xác khi nào việc viết sẽ xảy ra. Ngoài ra, các nút cũ trong hệ thống tệp có thể được sử dụng lại để các tệp mới có thể xuất hiện trong các khe thư mục chứa các tệp cũ. Vì vậy, thứ tự tạo không cần thiết "thứ tự thư mục."
LawrenceC

@ultrasawblade: Không chắc tại sao bạn lại viết như một bình luận cho câu trả lời của riêng tôi thay vì trả lời bằng chính nó hay bất cứ điều gì.
jlliagre

@ultrasawblade: Nói đúng ra, "inodes cũ [đang được tái sử dụng" không liên quan gì đến việc tái sử dụng các khe thư mục cũ. Điều này có thể xảy ra bất cứ khi nào các mục trong thư mục cũ không được liên kết; nếu tất cả chúng đều là các liên kết cứng, thì điều này sẽ không dẫn đến việc các nút bị tách ra.
G-Man nói 'Phục hồi Monica'

2

Đó là thứ tự mà các mục được lưu trữ nội bộ trong hệ thống tập tin. Điều này sẽ thay đổi từ hệ thống tập tin để hệ thống tập tin. Ví dụ, các mục nhập có thể được lưu trữ trong một số loại cây cân bằng, chẳng hạn như Cây Đỏ-Đen . Có thể có tối ưu hóa hơn nữa cho các thư mục với một số lượng nhỏ các mục, hoặc để đối phó hiệu quả với các bổ sung và loại bỏ.


-1

Thư mục chỉ là một tệp khác, liệt kê siêu dữ liệu của các tệp thực tế. "ls -U" chỉ liệt kê các mục nhập theo thứ tự trong tệp thư mục.

Thứ tự được xác định bởi hệ điều hành và việc thực hiện hệ thống tập tin.

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.