สมมติว่าฉันเพิ่งสร้างไดเรกทอรีใหม่ไดเรกทอรีแล้วฉันทำคำสั่ง 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
) ดังนั้นหากไม่มีมาตรฐานบางแห่งที่ระบุว่ามีการเชื่อมโยงฮาร์ดไดรฟ์ที่เป็นไปได้เพียงไดเรกทอรีเดียว.
และ..
อีกครั้งฉันจะถือว่าลิงก์ฮาร์ดไดรฟ์นั้นนับเป็นเงื่อนงำที่ไม่เป็นทางการ