มีคำตอบที่ถูกต้องค่อนข้างมากที่นี่ แต่ฉันไม่คิดว่าใครจะจัดการกับความเข้าใจผิดที่แท้จริง คำถามเดิมนั้นโดยทั่วไปแล้ว "เมื่อฉันสร้างลิงก์สัญลักษณ์มันง่ายที่จะระบุในภายหลัง แต่ฉันไม่สามารถหาวิธีระบุลิงก์ที่ยากได้" และใช่คำตอบโดยทั่วไปต้มลงไปที่ "คุณทำไม่ได้" และอธิบายได้มากขึ้นหรือน้อยลงว่าทำไม แต่ดูเหมือนไม่มีใครยอมรับว่าจริงๆแล้วมันสับสนและแปลก
หากคุณกำลังอ่านสิ่งนี้ทั้งหมดและคุณพบว่าเกิดอะไรขึ้นคุณก็เป็นคนดี คุณไม่จำเป็นต้องอ่านตัวฉันสักหน่อย หากคุณยังสับสนอยู่ให้ไปต่อ
คำตอบสั้น ๆ จริง ๆ คือการเชื่อมโยงที่ยากไม่ใช่การเชื่อมโยงทั้งหมดไม่ใช่ในลักษณะการเชื่อมโยงสัญลักษณ์ มันเป็นรายการใหม่ในโครงสร้างไดเรกทอรีที่ชี้ไปยังจำนวนไบต์เดียวกันกับที่รายการไดเรกทอรีดั้งเดิมทำและเมื่อคุณสร้างมันขึ้นมาแล้วมันก็เหมือนกับ 'จริง' และถูกต้องตามกฎหมายเป็นรายการแรก ไฟล์ 'ปกติ' ทุกไฟล์ในไดรฟ์ของคุณมีฮาร์ดลิงก์อย่างน้อยหนึ่งลิงก์ หากปราศจากสิ่งนั้นคุณจะไม่เห็นสิ่งใดเลยไดเรกทอรีและจะไม่สามารถอ้างถึงหรือใช้งานได้ ดังนั้นหากคุณมีไฟล์ Fred.txt และคุณเชื่อมโยงอย่างหนักกับ Wilma.txt และ Barney.txt ทั้งสามชื่อ (และรายการไดเรกทอรี) จะอ้างถึงไฟล์เดียวกันและพวกมันก็ใช้ได้อย่างเท่าเทียมกัน ไม่มีวิธีใดที่ระบบปฏิบัติการจะบอกได้ว่ารายการใดรายการหนึ่งถูกสร้างขึ้นเมื่อคุณกด "บันทึก" ในเท็กซ์เอดิเตอร์ของคุณและรายการอื่น ๆ ถูกสร้างด้วยคำสั่ง "ln"
ระบบปฏิบัติการจะต้องติดตามจำนวนรายการต่าง ๆ ที่ชี้ไปยังไฟล์เดียวกัน หากคุณลบ Wilma.txt ไม่แปลกใจเลยที่คุณจะไม่เพิ่มที่ว่างในไดรฟ์ แต่ถ้าคุณลบ Fred.txt (ไฟล์ 'ดั้งเดิม') คุณจะยังไม่เพิ่มพื้นที่ว่างในไดรฟ์ของคุณเนื่องจากข้อมูลในไดรฟ์ที่รู้จักกันในชื่อ Fred.txt นั้นยังคงเป็น Barney.txt เฉพาะเมื่อคุณลบทั้งหมดของรายการไดเรกทอรีจะ OS เดจัดสรรพื้นที่ที่ข้อมูลที่ตัวเองได้รับการครอบครอง
หาก Barney.txt เป็นลิงก์แบบสัญลักษณ์การลบ Fred.txt จะเป็นการยกเลิกการจัดสรรพื้นที่และ Barney.txt จะเป็นลิงก์ที่เสีย นอกจากนี้หากคุณย้ายหรือเปลี่ยนชื่อไฟล์ที่มีลิงก์สัญลักษณ์ซึ่งชี้ไปที่ไฟล์นั้นคุณจะทำลายลิงก์ แต่คุณสามารถย้ายหรือเปลี่ยนชื่อไฟล์ฮาร์ดลิงก์ทั้งหมดที่คุณต้องการโดยไม่ต้องทำลายรายการไดเรกทอรีอื่นที่ชี้ไปที่ไฟล์ / ข้อมูลนั้นเพราะทั้งหมดนั้นเป็นรายการไดเรกทอรีที่อ้างถึงบล็อกข้อมูลบนไดรฟ์เดียวกัน (โดยใช้ inode # ของข้อมูลนั้น)
[อีกสองปีต่อมาและสุดท้ายก็ทำให้ฉันสับสนสักครู่หนึ่งดังนั้นฉันคิดว่าฉันจะชี้แจง หากคุณพิมพ์ "mv ./Wilma.txt ../elswhere/Betty.txt" ดูเหมือนว่าคุณกำลังย้ายไฟล์ แต่ที่จริงแล้วคุณไม่ใช่ สิ่งที่คุณกำลังทำอยู่จริงๆคือการลบรายการโฆษณาออกจากรายการไดเรกทอรีของไดเรกทอรีปัจจุบันของคุณรายการที่ระบุว่า "ชื่อ 'Wilma.txt' นั้นเชื่อมโยงกับข้อมูลที่สามารถพบได้โดยใช้ inode ###### #, "และเพิ่มรายการโฆษณาใหม่ลงในรายการไดเรกทอรีของไดเรกทอรี ../elshere ที่ระบุว่า" ชื่อ 'Betty.txt' นั้นเชื่อมโยงกับข้อมูลที่สามารถพบได้ผ่าน inode ######## " นี่คือเหตุผลที่คุณสามารถ 'ย้าย' ไฟล์ 2 กิกะไบต์ได้เร็วเท่ากับไฟล์ 2 กิโลไบต์ตราบใดที่คุณย้ายพวกมันไปยังตำแหน่งอื่นบนไดรฟ์เดียวกัน]
เนื่องจากระบบปฏิบัติการต้องติดตามจำนวนรายการไดเรกทอรีที่แตกต่างกันที่ชี้ไปยังกลุ่มข้อมูลเดียวกันคุณสามารถบอกได้ว่าไฟล์ใดไฟล์หนึ่งมีการเชื่อมโยงอย่างหนักถึงแม้ว่าคุณจะไม่สามารถบอกได้อย่างชัดเจนว่ารายการไดเรกทอรีที่คุณ กำลังดูอยู่ว่าเป็น 'ดั้งเดิม' อย่างใดอย่างหนึ่งหรือไม่ วิธีหนึ่งคือคำสั่ง "ls" โดยเฉพาะ "ls -l" (นั่นคือ L ตัวพิมพ์เล็กหลังจากเส้นประ)
เพื่อขอยืมตัวอย่างก่อนหน้านี้ ....
-rw-r--r-- 3 stephane stephane 0 Nov 12 19:55 f1
ตัวอักษรตัวแรกเป็นเส้นประดังนั้นจึงไม่ใช่ไดเรกทอรีหรืออย่างอื่นที่แปลกใหม่มันเป็นไฟล์ธรรมดา 'ปกติ' แต่ถ้ามันเป็นเรื่องธรรมดาจริง ๆ ตัวเลขนั้นหลังจากส่วน rwx-ish จะเป็น "1" ดังเช่นใน "มีรายการไดเรกทอรีหนึ่งรายการที่ชี้ไปยังบล็อกข้อมูลนี้" แต่มันเป็นส่วนหนึ่งของการสาธิตการเชื่อมโยงอย่างหนักดังนั้นแทนที่จะบอกว่า "3"
โปรดทราบว่าสิ่งนี้อาจนำไปสู่พฤติกรรมที่แปลกและลึกลับได้ (หากคุณไม่ได้คาดหัวกับลิงก์ที่ยากนั่นก็คือ) หากคุณเปิด Fred.txt ในโปรแกรมแก้ไขข้อความและทำการเปลี่ยนแปลงคุณจะเห็นการเปลี่ยนแปลงเดียวกันใน Wilma.txt และ Barney.txt หรือไม่ อาจจะ. อาจ. หากโปรแกรมแก้ไขข้อความของคุณบันทึกการเปลี่ยนแปลงโดยการเปิดไฟล์ต้นฉบับและเขียนการเปลี่ยนแปลงไปแล้วใช่ทั้งสามชื่อจะยังคงชี้ไปที่ข้อความเดียวกัน (เพิ่งเปลี่ยนใหม่) แต่หากตัวแก้ไขข้อความของคุณสร้างไฟล์ใหม่ (Fred-new-temp.txt) ให้เขียนเวอร์ชันที่คุณเปลี่ยนไปแล้วลบ Fred.txt จากนั้นเปลี่ยนชื่อ Fred-new-temp.txt เป็น Fred.txt, Wilma และ Barney จะ ยังคงชี้ไปที่เวอร์ชันดั้งเดิมไม่ใช่เวอร์ชันที่เปลี่ยนแปลงใหม่ หากคุณไม่เข้าใจลิงก์ที่ยากอาจทำให้คุณโมโหเล็กน้อย :) [โอเคฉันไม่รู้จริง ๆ เป็นการส่วนตัวเครื่องมือแก้ไขข้อความที่จะทำสิ่งที่เป็นไฟล์ / เปลี่ยนชื่อใหม่ แต่ฉันรู้ว่ามีโปรแกรมอื่น ๆ อีกมากมายที่ทำสิ่งนั้นอย่างแน่นอนดังนั้นโปรดระวัง]
หมายเหตุสุดท้าย: สิ่งใดสิ่งหนึ่งที่ 'fsck' (ตรวจสอบระบบไฟล์) จะตรวจสอบว่ามีบล็อกข้อมูลในไดรฟ์ของคุณหรือไม่ซึ่งไม่ได้อ้างอิงโดยรายการไดเรกทอรีใด ๆ อีกต่อไป บางครั้งมีข้อผิดพลาดและรายการไดเรกทอรีเดียวที่ชี้ไปที่ไอโหนดจะถูกลบ แต่พื้นที่ไดรฟ์เองไม่ได้รับการทำเครื่องหมายว่า "พร้อมใช้งาน" ดังนั้นหนึ่งในงานของ fsck คือการจับคู่พื้นที่ที่จัดสรรทั้งหมดกับรายการไดเรกทอรีทั้งหมดเพื่อให้แน่ใจว่าไม่มีไฟล์ที่ไม่มีการอ้างอิง หากพบบางรายการจะสร้างรายการไดเรกทอรีใหม่และวางไว้ใน "lost + found"