บน Unix โดยทั่วไปไฟล์เป็นรายการบางรายการในสารบัญ มีไฟล์หลายประเภท: ไฟล์ปกติ, อุปกรณ์, ลิงก์สัญลักษณ์, ประตู, ท่อ, ซ็อกเก็ต, ไดเรกทอรี ...
หมายเลขไอโหนด (ซึ่งคุณสามารถเห็นได้ในผลลัพธ์ls -i) เป็นดัชนีในตารางนั้น
ตอนนี้คุณทำไม่ได้ไฟล์การเข้าถึงโดยinodeแต่เส้นทาง เส้นทางเป็นห่วงโซ่ของไดเรกทอรีรายการ คุณจะสังเกตเห็นว่าเราไม่ได้พูดถึงโฟลเดอร์แต่เป็นไดเรกทอรีที่นี่ เพราะมันคือสิ่งที่เป็นไดเรกทอรี (คิดว่าสมุดโทรศัพท์)
ไดเร็กทอรีเป็นไฟล์ชนิดพิเศษที่ให้ชื่อแก่จำนวน inodes รายการไดเร็กทอรีคือการแม็พจากชื่อไปยัง inode
ไฟล์ที่กำหนด (inode) สามารถมีได้มากกว่าหนึ่งชื่อในหนึ่งไดเรกทอรี (เช่นเดียวกับที่มีมากกว่าหนึ่งชื่อที่หมายเลขโทรศัพท์) และยังสามารถมีชื่อ (รายการ) ในไดเรกทอรีมากกว่าหนึ่ง ลิงก์เหล่านั้นเรียกว่าลิงก์ซึ่งเรียกว่าฮาร์ดลิงก์เพื่อแยกความแตกต่างกับซอฟต์ลิงก์ (ไฟล์ชนิดพิเศษซึ่งเป็นตัวชี้ไปยังพา ธ )
ไฟล์ (inode) ติดตามจำนวนลิงก์ (ของรายการในไดเรกทอรีใด ๆ ) ที่มีดังนั้นเมื่อจำนวนถึง 0 (เมื่อมันถูกยกเลิกการเชื่อมโยงจากไดเรกทอรีสุดท้ายที่ถูกอ้างอิงใน) มันจะถูกจัดสรรคืน
นั่นคือหมายเลขนั้น (จำนวนลิงก์) ที่แสดงในls -lเอาต์พุต
เมื่อไฟล์ที่ไม่ใช่ไดเรกทอรีถูกสร้างขึ้นเป็นครั้งแรก (ที่มีopenหรือcreat(หรือbindหรือmknodบางประเภทของไฟล์) สายระบบ) ก็จะทำโดยการให้มีเส้นทางไปยังไฟล์ใหม่ (ชอบ"/a/b") สิ่งที่เกิดขึ้นคือไฟล์ใหม่และมีการจัดสรร inode และมีการเพิ่มรายการใหม่ในไดเรกทอรีที่เกี่ยวข้องกับ"a"ชื่อใน"/"ไดเรกทอรีราก นั่นคือลิงค์เริ่มต้นดังนั้นจำนวนลิงก์จึงเป็นหนึ่ง
สามารถเพิ่มลิงก์เพิ่มเติมได้ในภายหลังด้วยการlink()เรียกระบบ ( lnคำสั่ง) และลิงก์สามารถลบออกได้ด้วยการunlink()เรียกระบบ ( rmคำสั่ง)
คุณจะสังเกตเห็นว่าไฟล์ประเภทไดเรกทอรีโดยทั่วไปมีจำนวนลิงก์มากกว่าหรือเท่ากับ 2
ตอนนี้เมื่อคุณสร้างไดเรกทอรีคุณกำลังเรียกการโทรของmkdir()ระบบ mkdir("/a/b")สิ่งที่ชอบ สิ่งที่มันทำคือการจัดสรรไฟล์ใหม่ของไดเรกทอรีประเภท ในไดเรกทอรีใหม่นั้นมันจะสร้างสองรายการโดยอัตโนมัติ:
"."( จุดสำหรับไดเรกทอรี ) ซึ่งเป็นลิงค์ไปสู่ตัวมันเอง ดังนั้นการนับลิงก์จึงเป็น 1
".."(สำหรับไดเรกทอรีของไดเรกทอรี ) "/a"ซึ่งเป็นเชื่อมโยงไปยัง ดังนั้นจำนวนลิงก์ของ"/a"จะเพิ่มขึ้นทีละหนึ่ง
จากนั้นไดเรกทอรีใหม่นั้นจะถูกลิงก์ไปยัง"/a"(มีการเพิ่มรายการไว้ใน"/a"นั้น) ดังนั้นการนับลิงก์จะเป็น 2 ในขณะนี้หากมี"/a/b/c"การสร้างไดเรกทอรีเนื่องจาก".."รายการใน"/a/b/c"การนับลิงก์"/a/b"จะกลายเป็น 3
Unices ส่วนใหญ่ จำกัด การสร้างลิงก์เพิ่มเติมไปยังไดเรกทอรีเนื่องจากอาจทำให้เกิดปัญหาได้ เมื่อพวกเขาอนุญาตlink()ในไดเรกทอรีโดยทั่วไป superuser เท่านั้นที่สามารถทำได้
ระบบไฟล์บางระบบเช่นbtrfsออกจากโครงสร้างไดเรกทอรีดั้งเดิมนั้น คุณจะสังเกตเห็นว่าลิงก์นั้นมีอยู่ในไดเรกทอรีในbtrfsระบบไฟล์เสมอแม้ว่าไดเรกทอรีเหล่านั้นจะมี"."รายการที่มีหมายเลขไอโหนดเหมือนกันกับตัวมันเอง
ความจริงที่ว่าจำนวนลิงก์เป็นแบบดั้งเดิม 2 บวกกับจำนวนย่อยที่มีการใช้งาน ตัวอย่างเช่นใน:
find . -name '*.c' -print
หาก.ไม่มีส่วนย่อย แต่มีจำนวนไฟล์นับล้าน โดยการตรวจสอบการเชื่อมโยงของการนับ., findสามารถรู้ว่าไม่มี subdir ดังนั้นสิ่งที่findต้องทำคืออ่านเนื้อหาของไดเรกทอรีและรายงานรายการที่ลงท้ายด้วย.c(เช่นgrep '\.c$'ไฟล์ megabyte ไม่กี่ไฟล์, ไม่มีเรื่องใหญ่) มิฉะนั้นfindจะต้องตรวจสอบประเภทของไฟล์ทุกไฟล์เพื่อดูว่ามีไดเรกทอรีที่จะลงไปในนั้นหรือไม่ (ส่งผลให้หลาย ๆ ไฟล์ยังไม่จำเป็น)lstat()ไม่ แน่นอนว่าการเพิ่มประสิทธิภาพประเภทนี้ไม่สามารถใช้งานได้btrfs(แม้ว่าใน Linux รุ่นที่ทันสมัยประเภทของไฟล์จะถูกเก็บไว้ในรายการไดเรกทอรีสำหรับระบบไฟล์บางระบบ (รวมถึงbtrfs) และส่งคืนโดย thegetdents(2)เรียกระบบที่ใช้เพื่อเรียกรายการของรายการ ในไดเรกทอรีดังนั้นlstat