สมมติว่าฉันเพิ่งสร้างไดเรกทอรีใหม่ไดเรกทอรีแล้วฉันทำคำสั่ง ls -ld ฉันเห็นว่าจำนวนฮาร์ดลิงก์คือ 2 อะไรทำให้ฮาร์ดลิงก์ 2 ตั้งแต่เริ่มต้น? นอกจากนี้ยังมีจำนวนไดเรกทอรีย่อยในไดเรกทอรีปัจจุบันเท่ากับจำนวนฮาร์ดลิงก์ - 2?
สมมติว่าฉันเพิ่งสร้างไดเรกทอรีใหม่ไดเรกทอรีแล้วฉันทำคำสั่ง ls -ld ฉันเห็นว่าจำนวนฮาร์ดลิงก์คือ 2 อะไรทำให้ฮาร์ดลิงก์ 2 ตั้งแต่เริ่มต้น? นอกจากนี้ยังมีจำนวนไดเรกทอรีย่อยในไดเรกทอรีปัจจุบันเท่ากับจำนวนฮาร์ดลิงก์ - 2?
คำตอบ:
ในอดีตระบบไฟล์ Unix แรกสร้างสองรายการในทุกไดเรกทอรี: .ชี้ไปที่ไดเรกทอรีตัวเองและ..ชี้ไปที่ผู้ปกครอง นี่เป็นวิธีที่ง่ายในการสำรวจระบบไฟล์ทั้งสำหรับแอปพลิเคชันและสำหรับระบบปฏิบัติการ
ดังนั้นแต่ละไดเรกทอรีจะมีลิงค์นับเป็น 2 + n โดยที่ n คือจำนวนไดเรกทอรีย่อย ลิงก์คือรายการสำหรับไดเรกทอรีนั้นในพาเรนต์.รายการของตนเองของไดเรกทอรีและ..รายการในแต่ละไดเรกทอรีย่อย ตัวอย่างเช่นสมมติว่านี่เป็นเนื้อหาของทรีย่อยที่ root ที่/parentไดเร็กทอรีทั้งหมด:
/parent
/parent/dir
/parent/dir/sub1
/parent/dir/sub2
/parent/dir/sub3
จากนั้นdirมีจำนวนการเชื่อมโยงของ 5: dirรายการใน/parentที่.รายการใน/parent/dirและทั้งสาม..รายการในแต่ละ/parent/dir/sub1, และ/parent/dir/sub2 /parent/dir/sub3เนื่องจาก/parent/dir/sub1ไม่มีไดเรกทอรีย่อยการนับลิงก์คือ 2 ( sub1รายการใน/parent/dirและ.รายการใน/parent/dir/sub1)
เพื่อลดจำนวนของการทำพิเศษสำหรับไดเร็กทอรีรูทซึ่งไม่มีพาเรนต์ "ที่เหมาะสม" ไดเร็กทอรีรูทจะมี..รายการที่ชี้ไปยังตัวเอง วิธีนี้มันเกินไปมีจำนวนการเชื่อมโยงของ 2 บวกจำนวนไดเรกทอรีย่อยที่ 2 เป็นอยู่และ/./..
ระบบไฟล์ในภายหลังมีแนวโน้มที่จะติดตามไดเรกทอรีหลักในหน่วยความจำและมักไม่ต้องการ.และ..มีอยู่เป็นรายการจริง โดยทั่วไประบบยูนิกซ์ที่ทันสมัยจะปฏิบัติต่อ.และ..เป็นค่าพิเศษซึ่งเป็นส่วนหนึ่งของรหัสระบบไฟล์ที่เป็นอิสระต่อระบบไฟล์ ระบบไฟล์บางตัวยังคงมี.และ..รายการอยู่หรือแสร้งทำเป็นแม้ว่าจะไม่มีสิ่งใดปรากฏบนดิสก์
ระบบไฟล์ส่วนใหญ่ยังคงรายงานจำนวนลิงก์ของ 2 + n สำหรับไดเรกทอรีโดยไม่คำนึงว่ามี.และ..รายการอยู่หรือไม่ แต่มีข้อยกเว้นตัวอย่างเช่น btrfs ไม่ได้ทำเช่นนี้
..การชี้ไปที่พาเรนต์จะไม่ส่งผลต่อการนับลิงค์ของไดเรกทอรีปัจจุบัน จำนวน 2 มาจาก.และรายชื่อ (ดั้งเดิม) ของไดเรกทอรีเอง วิธีที่คุณทำให้มันดูคลุมเครือเล็กน้อยและทำให้มันดูเหมือน.และ..เป็นสองอย่าง ..ควรจะใช้เพื่ออธิบายวิธีการทางคณิตศาสตร์ทำงานออกไป2+n:)
.อยู่ในนั้น" หากยังไม่ชัดเจนสำหรับคุณฉันเสียใจมากฉันไม่สามารถชี้แจงเพิ่มเติมได้ สิ่งที่ฉันทำได้ดีกว่าก็คือคัดลอก + วางคำตอบของเขาที่นี่ในความคิดเห็น
มีหนึ่งสำหรับไดเรกทอรีตัวเองและหนึ่งสำหรับ.ภายในนั้น
นอกจากนี้ยังมีจำนวนไดเรกทอรีย่อยในไดเรกทอรีปัจจุบันเท่ากับจำนวนฮาร์ดลิงก์ - 2?
มันสมเหตุสมผลแล้วเนื่องจากแต่ละไดเรกทอรีย่อยสร้าง..ฮาร์ดลิงก์และยิ่งกว่านั้นคุณไม่สามารถสร้างลิงก์ไปยังไดเรกทอรีได้ 1 อย่างไรก็ตามฉันจะไม่ไว้ใจสิ่งนี้อย่างจริงจังโดยเฉพาะ เนื่องจากเป็นการง่ายที่จะนับไดเรกทอรีย่อยและรับจำนวนจริง
หากคุณเพียงแค่ดูที่lsเอาต์พุตเพื่อหาแนวคิดของจำนวนหมวดย่อยที่มีอยู่นั่นจะทำให้คุณมีความคิดที่ดี
1lnหรืออย่างน้อยคุณจะไม่สามารถมี ฉันไม่ได้พยายามเขียนโปรแกรมและman 2 linkคลุมเครือ - ไม่มีข้อผิดพลาดที่เห็นได้ชัดสำหรับการเชื่อมโยงไปยังไดเรกทอรีแม้ว่าจะมีคู่ที่อาจใช้ ( EMLINK, EPERM) ดังนั้นหากไม่มีมาตรฐานบางแห่งที่ระบุว่ามีการเชื่อมโยงฮาร์ดไดรฟ์ที่เป็นไปได้เพียงไดเรกทอรีเดียว.และ..อีกครั้งฉันจะถือว่าลิงก์ฮาร์ดไดรฟ์นั้นนับเป็นเงื่อนงำที่ไม่เป็นทางการ