ไม่ลิงค์ฮาร์ดแตกต่างอย่างสิ้นเชิง ซอฟต์ลิงค์นั้นอยู่ใกล้กับทางลัดของ Windows (แม้ว่าจะมีความแตกต่างที่สำคัญ แต่ลิงค์สัญลักษณ์จะคล้ายกับทางลัดของวินโดว์มากกว่าที่จะมีฮาร์ดลิงก์) การเชื่อมโยงที่ยากเป็นสิ่งที่แตกต่างและคุณแทบจะไม่ต้องการเลย
สังเขปลิงค์นุ่มถูกสร้างขึ้นด้วยคำสั่งนี้:
ln -s foo bar
หากคุณเรียกใช้แล้วls -l
คุณจะเห็น:
lrwxrwxrwx 1 terdon terdon 3 Mar 10 15:58 bar -> foo
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo
->
หมายความว่าคือการเชื่อมโยงไปยังbar
foo
ดังนั้นการเปิดด้วยโปรแกรมแก้ไขข้อความเช่นจะจริงเปิดแฟ้มที่แยกต่างหากbar
foo
อย่างไรก็ตามการลบก็จะลบทางลัดก็จะไม่ส่งผลกระทบไฟล์bar
foo
ในทางกลับกันฮาร์ดลิงก์ถูกสร้างด้วยคำสั่งนี้:
ln foo bar
หากคุณรันตอนนี้ls -l
จะไม่มีการบ่งชี้ความสัมพันธ์ระหว่างไฟล์:
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 bar
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo
แต่และนี้เป็นสิ่งสำคัญมากเหล่านั้นเป็นจริงไฟล์เดียวกัน ไฟล์บนระบบไฟล์ Unix จะถูกเก็บไว้โดยใช้inodes ; inode นั้นเป็นวิธีที่ระบบไฟล์แมปชื่อไฟล์ไปยังตำแหน่งเฉพาะบนฮาร์ดไดรฟ์ทางกายภาพ ดังนั้นฮาร์ดลิงก์คือไฟล์ที่ชี้ไปที่ไอโหนดเดียวกันกับเป้าหมาย อีกวิธีในการวางสิ่งนี้คือไฟล์ทั้งหมดเป็นลิงก์ที่เชื่อมโยงไปยัง inodes การสร้างฮาร์ดลิงก์ไปยังไฟล์เพียงสร้างตัวชี้ใหม่ (ไฟล์) บนระบบไฟล์ที่ชี้ไปที่ไอโหนดเดียวกัน แต่ละไอโหนดสามารถมีหลายไฟล์ที่ชี้ไปหรืออย่างใดอย่างหนึ่งหรือไม่มี
เพื่อให้เข้าใจได้ชัดเจนยิ่งขึ้นใช้ls -i
สิ่งที่แสดงไอโหนดที่เกี่ยวข้องกับไฟล์ มาสร้างซอฟต์ลิงค์และฮาร์ดลิงค์แล้วดูว่าเกิดอะไรขึ้น:
ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo
ตอนนี้ตรวจสอบ inodes ของพวกเขา:
อย่างที่คุณเห็นข้างต้นทั้งคู่foo
และHardLinkToFoo
มีไอโหนดเดียวกัน (16648029) ในขณะที่ SoftLinkToFoo มีอีกอันหนึ่ง (16648036)
จะเกิดอะไรขึ้นถ้าเราเปลี่ยนชื่อfoo
ด้วยmv foo bar
?
สีแดงหมายถึงลิงค์อ่อนที่ขาดซึ่งไม่สามารถหาเป้าหมายได้อีกต่อไป นี่เป็นเพราะซอฟต์ลิงค์ชี้ไปที่ชื่อไฟล์ไม่ใช่ไอโหนด โปรดทราบว่าแม้จะมีการเปลี่ยนชื่อ inode ยังคงเหมือนเดิมดังนั้นฮาร์ดลิงก์จะใช้ได้ แต่ก็ยังใช้งานได้
โดยสรุปแล้วการเชื่อมโยงฮาร์ดเป็นการแสดงสองอย่างของไฟล์เดียวกัน มันเป็นตัวชี้ไปยังส่วนเดียวกันของดิสก์ ซอฟต์ลิงค์เป็นเพียงทางลัด ในการเปรียบเทียบโลกแห่งความเป็นจริงนั้น hardlinks ก็เหมือนหมายเลขโทรศัพท์สองหมายเลขที่แตกต่างกันสำหรับสายโทรศัพท์เดียวกันและลิงก์แบบ soft จะเหมือนกับมีสองสายโทรศัพท์ที่แตกต่างกันในบ้านเดียวกัน