Tại sao một thư mục mới có số lượng liên kết cứng là 2 trước khi bất cứ thứ gì được thêm vào nó?


38

Nói rằng tôi chỉ tạo thư mục newDirectory và sau đó tôi thực hiện lệnh ls -ld. Tôi thấy rằng số lượng liên kết cứng là 2. Điều gì chính xác làm cho liên kết cứng 2 từ đầu? Ngoài ra số lượng thư mục con trong thư mục hiện tại có bằng số lượng liên kết cứng - 2 không?


Câu trả lời:


39

Trong lịch sử , hệ thống tập tin Unix đầu tiên tạo ra hai mục trong mỗi thư mục: .chỉ vào chính thư mục đó và ..trỏ đến cha mẹ của nó. Điều này cung cấp một cách dễ dàng để duyệt qua hệ thống tập tin, cho cả ứng dụng và cho chính hệ điều hành.

Do đó, mỗi thư mục có số lượng liên kết là 2 + n trong đó n là số lượng thư mục con. Các liên kết là mục nhập cho thư mục đó trong phần tử mẹ, .mục nhập riêng của thư mục và ..mục nhập trong mỗi thư mục con. Ví dụ: giả sử đây là nội dung của cây con bắt nguồn từ /parent, tất cả các thư mục:

/parent
/parent/dir
/parent/dir/sub1
/parent/dir/sub2
/parent/dir/sub3

Sau đó dircó một số liên kết 5: các dirmục trong /parent, các .mục trong /parent/dir, và ba ..mục trong mỗi /parent/dir/sub1, /parent/dir/sub2/parent/dir/sub3. Vì /parent/dir/sub1không có thư mục con, số liên kết của nó là 2 ( sub1mục nhập /parent/dir.mục nhập /parent/dir/sub1).

Để giảm thiểu số lượng vỏ đặc biệt cho thư mục gốc, không có cha mẹ phù hợp, thì thư mục gốc chứa một ..mục nhập trỏ đến chính nó. Bằng cách này, nó cũng có số lượng liên kết là 2 cộng với số lượng thư mục con, 2 /./...

Các hệ thống tập tin sau này có xu hướng theo dõi các thư mục mẹ trong bộ nhớ và thường không cần ...tồn tại như các mục thực tế; các hệ thống unix hiện đại điển hình coi ...là các giá trị đặc biệt như là một phần của mã hệ thống tệp độc lập với kiểu hệ thống tệp. Một số hệ thống tập tin vẫn bao gồm ...các mục, hoặc giả vờ mặc dù không có gì xuất hiện trên đĩa.

Hầu hết các hệ thống tập tin vẫn báo cáo số lượng liên kết là 2 + n cho các thư mục bất kể có tồn tại ...các mục nhập hay không, nhưng có các trường hợp ngoại lệ, ví dụ btrfs không làm điều này.


4
..chỉ vào cha mẹ không ảnh hưởng đến số lượng liên kết của thư mục hiện tại. Số lượng 2 đến từ .và danh sách tên (bản gốc) của thư mục chính nó. Cách bạn đặt nó là một chút mơ hồ, và làm cho nó nghe như ...là hai. ..chỉ nên được sử dụng để giải thích cách toán học hoạt động 2+n:)
th3an0maly

@ th3an0maly Chỉ vào cha mẹ ảnh hưởng đến số lượng liên kết của cha mẹ. Tôi thực sự không thấy cách mà mục nhập .. trong mỗi thư mục con là mơ hồ và tôi không hiểu ý của bạn bằng cách liệt kê tên thư mục liệt kê chính nó.
Gilles 'SO- ngừng trở nên xấu xa'

Trên thực tế, câu trả lời này: unix.stackexchange.com/a/101516/160264 chính xác là những gì tôi đã gợi ý. Đọc nó sau khi tôi đọc câu trả lời của bạn, vì bạn là người đứng đầu.
th3an0maly

@ th3an0maly Tôi vẫn không biết bạn đang gợi ý điều gì. Bạn có thể diễn đạt rõ ràng, thay vì gợi ý?
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời của @ goldilocks là rõ ràng. Điều tôi muốn nói là câu trả lời của bạn có thể giống câu trả lời của anh ấy hơn. Nhưng sau đó tôi đã không đọc câu trả lời của anh ấy khi tôi đang đọc câu trả lời của bạn. Dòng đầu tiên chính xác là những gì bình luận ban đầu của tôi đã nói: "Có một cái cho chính thư mục và một cái cho .bên trong nó." Nếu nó vẫn chưa rõ ràng với bạn, tôi rất xin lỗi tôi không thể làm rõ thêm nữa. Tất cả những gì tôi có thể làm tốt hơn là sao chép + dán câu trả lời của anh ấy vào đây trong phần bình luận.
th3an0maly

13

Có một cái cho chính thư mục và một cái cho .bên trong nó.

Ngoài ra số lượng thư mục con trong thư mục hiện tại có bằng số lượng liên kết cứng - 2 không?

Điều đó có ý nghĩa, vì mỗi thư mục con tạo ra một liên kết ..cứng và hơn thế nữa bạn không thể tạo liên kết cứng đến các thư mục. 1 Tuy nhiên, tôi sẽ không tin điều này cho bất cứ điều gì nghiêm trọng, đặc biệt. vì nó rất dễ dàng để đếm các thư mục con và lấy số thực.

Nếu bạn chỉ nhìn vào lsđầu ra cho một ý tưởng có bao nhiêu subs, thì nó sẽ cho bạn một ý tưởng hay.

1 Hoặc ít nhất, bạn không thể với ln. Tôi đã không cố gắng lập trình và man 2 linkkhông rõ ràng - không có lỗi rõ ràng khi liên kết đến một thư mục, mặc dù có một vài điều có thể áp dụng ( EMLINK, EPERM). Vì vậy, trừ khi có một số tiêu chuẩn ở đâu đó nói rằng các liên kết cứng duy nhất có thể đến một thư mục là ..., một lần nữa, tôi sẽ chỉ coi số liên kết cứng đó là một đầu mối thông thường.


2
Việc các liên kết đến thư mục có được phép hay không và liệu bạn có thể đếm các thư mục con từ số lượng liên kết hay không, đều phụ thuộc vào hệ thống tập tin bạn đang sử dụng - một số cho phép, một số thì không.
alanc

Lưu ý rằng Time Machine của macOS thực sự là các thư mục liên kết cứng với các bản sao lưu trước đó; bằng cách đó, họ có thể giả vờ rằng mỗi bản sao lưu gia tăng là một bản sao đầy đủ và họ có thể xóa bất kỳ số gia tăng nào mà không ảnh hưởng đến các bản sao khác. Nó cũng rất dễ vỡ, tôi đã chơi với nó bằng cách sử dụng các tòa nhà thông thường và tôi đã triệt để hệ thống tập tin của mình.
w00t
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.