
บนระบบ Linux ที่ใช้งานได้ สมมติว่าคุณมีไฟล์ซ้อนอยู่ในไดเรกทอรีหลายชั้น เพื่อให้เข้าถึงไฟล์นั้นได้ง่าย คุณต้องการสร้างทางลัดสำหรับไฟล์นั้นบนเดสก์ท็อปของคุณ เป็นไปได้ที่จะใช้ symlink (หรือที่เรียกว่าซอฟต์ลิงค์) นอกจากนี้ยังมีลิงก์อีกรูปแบบหนึ่งที่เรียกว่าฮาร์ดลิงก์ ในบทความนี้ เราจะอธิบายความแตกต่างระหว่างซอฟต์ลิงก์และฮาร์ดลิงก์ และดูว่าคุณควรใช้อันไหน
ซอฟต์กับฮาร์ดลิงก์
ซอฟต์ลิงก์หรือ symlink เป็นเพียงลิงก์สัญลักษณ์ มันเป็นเพียงตัวชี้ไปยังพาธไฟล์เป้าหมาย ซอฟต์ลิงค์ไม่สนใจว่าไฟล์หรือโฟลเดอร์ที่พา ธ ไฟล์มีอยู่จริงหรือไม่ หากไม่มีไฟล์หรือโฟลเดอร์ มันจะส่งผลให้ลิงก์เสีย คุณสามารถแก้ไขหรือลบ symlink ได้ และจะไม่มีผลกับไฟล์เป้าหมาย
ในทางกลับกัน ฮาร์ดลิงก์มีผลทำให้ไฟล์เป้าหมายมีชื่อเพิ่มเติม เมื่อคุณแก้ไขเนื้อหาในไฟล์หนึ่ง จะเป็นการแก้ไขเนื้อหาในอีกไฟล์หนึ่งด้วย กล่าวโดยย่อ ซอฟต์ลิงก์เป็นเพียงการอ้างอิงไปยังพาธไฟล์เป้าหมาย ในขณะที่ฮาร์ดลิงก์คือลิงก์โดยตรงไปยังข้อมูลของไฟล์เป้าหมาย
ด้านล่างนี้เราจะอธิบายวิธีการทำงานของลิงก์แบบซอฟต์และฮาร์ด
ใช้งานซอฟต์ลิงค์
สมมติว่าเรามีไฟล์ชื่อ “first_file.txt” ที่มีข้อความสี่บรรทัดอยู่ภายใน

เราจะสร้างซอฟต์ลิงค์ในโฮมไดเร็กตอรี่ของเรา
ln -s first_file.txt ~/sl-firstfile.txt
ใน GNOME Desktop Environment สามารถสร้างซอฟต์ลิงก์สำหรับไฟล์ได้โดยคลิกขวาที่ไฟล์และเลือก "สร้างลิงก์" ซอฟต์ลิงค์ถูกสร้างขึ้นโดยที่ชื่อคล้ายกับ “ลิงก์ไปยัง

หากเราพยายามดูเนื้อหาของ “sl-firstfile.txt” เราจะเห็นว่าเหมือนกับ “first_file.txt”

หากเราดูสองไฟล์นี้ในตัวจัดการไฟล์ ซอฟต์ลิงก์จะปรากฏเป็นทางลัดไปยังไฟล์ต้นฉบับ ลูกศรสีดำในไอคอนของไฟล์แสดงถึงสิ่งนี้

เมื่อเราพยายามดูรายชื่อไดเรกทอรีปัจจุบันโดยใช้คำสั่ง ls -l
คุณสามารถดูได้ว่าซอฟต์ลิงก์ชี้ไปที่ไฟล์เป้าหมายที่ใด อักขระตัวแรกในสตริงการอนุญาตสำหรับ “sl-firstfile.txt” คือ “l” ซึ่งหมายความว่ารายการนี้มีไว้สำหรับลิงก์

พฤติกรรมการลบของซอฟต์ลิงก์
เมื่อไฟล์เป้าหมายถูกลบ ซอฟต์ลิงค์จะยังคงอยู่

อย่างไรก็ตาม มันได้กลายเป็นลิงก์ที่ "ห้อยต่องแต่ง" หรือ "ขาด" และไม่มีประโยชน์

ตอนนี้ หากคุณสร้างไฟล์อื่นที่มีชื่อเดียวกัน – “first_file.txt” – ซอฟต์ลิงก์จะกลับมาใช้งานได้อีกครั้ง
หมายเหตุ :ในกรณีที่คุณพบซอฟต์ลิงก์และต้องการค้นหาเส้นทางที่แน่นอนของไฟล์ที่สร้างลิงก์ไว้ เพียงใช้ readlink
คำสั่งดังรูปด้านล่าง

ผลลัพธ์ของคำสั่งนี้จะเป็นเส้นทางที่แน่นอนของไฟล์ต้นฉบับ
ฮาร์ดลิงก์ใช้งานได้จริง
ตอนนี้เราจะสร้างฮาร์ดลิงก์สำหรับไฟล์เดียวกันในโฮมไดเร็กทอรีของเรา สามารถทำได้โดยใช้คำสั่งต่อไปนี้:
ln first_file.txt hl-first-file.txt
หมายเหตุ :วิธีการสร้างซอฟต์ลิงก์และฮาร์ดลิงก์ทั้งสองใช้ ln
สั่งการ. ข้อแตกต่างเพียงอย่างเดียวคือ -s
แฟล็กซึ่งแสดงถึงการเชื่อมโยงเชิงสัญลักษณ์
อีกวิธีหนึ่งในการสร้างฮาร์ดลิงก์คือการใช้ link
คำสั่ง
link hl-firstfile.txt hl2-firstfile.txt
การตรวจสอบทั้งสองไฟล์แสดงว่าเนื้อหาเหมือนกัน


ใน GUI ไฟล์ทั้งสองจะปรากฏเป็นเอนทิตีที่แตกต่างกัน ไม่มีข้อบ่งชี้เกี่ยวกับการมีอยู่ของฮาร์ดลิงก์

ให้เราลองเพิ่มบรรทัดใหม่ให้กับไฟล์ฮาร์ดลิงก์ “hl-firstfile.txt”
echo "hello" >> hl-first-file.txt
สามารถดูการเปลี่ยนแปลงข้อมูลได้ทั้ง 2 ไฟล์


เมื่อมีการสร้างฮาร์ดลิงก์ จะเหมือนกับว่ามีไฟล์สองไฟล์ที่ต่างกัน แต่มีการเชื่อมโยงข้อมูล การเปลี่ยนแปลงในสิ่งหนึ่งสะท้อนให้เห็นในอีกสิ่งหนึ่ง
เคล็ดลับด่วน :เมื่อสร้างซอฟต์ลิงก์และฮาร์ดลิงก์ ควรใช้นามสกุลเดียวกันกับไฟล์ที่สร้างลิงก์
พฤติกรรมการลบของฮาร์ดลิงก์
สำหรับฮาร์ดลิงก์ การลบไฟล์ต้นฉบับหรือฮาร์ดลิงก์นั้นไม่เป็นปัญหา ข้อมูลที่จัดเก็บในไฟล์ในตอนแรกยังสามารถเข้าถึงได้ผ่านฮาร์ดลิงก์


ซอฟต์ลิงก์จะมีประโยชน์เมื่อใด
เราสังเกตเห็นว่าซอฟต์ลิงก์ปรากฏเป็นทางลัดสำหรับไฟล์ เมื่อเรามีไฟล์ในไดเร็กทอรีหลายชั้นและต้องการเก็บไว้ในตำแหน่งที่เข้าถึงได้ง่าย ทางเลือกที่ดีคือสร้างลิงก์สั้นๆ สำหรับไฟล์นั้น
ฮาร์ดลิงก์จะมีประโยชน์เมื่อใด
เราได้เห็นแล้วว่าเมื่อสร้างฮาร์ดลิงก์สำหรับไฟล์แล้ว การเปลี่ยนแปลงใดๆ ในไฟล์หรือฮาร์ดลิงก์จะมีผลในทั้งสองอย่าง
สมมติว่าคุณมีเซิร์ฟเวอร์สำรอง มีการใช้กลไกการสำรองข้อมูลแบบเพิ่มหน่วยโดยจะมีผลเฉพาะการเปลี่ยนแปลงไฟล์/โฟลเดอร์เท่านั้นนับตั้งแต่การสำรองข้อมูลครั้งล่าสุด คุณสามารถสร้างฮาร์ดลิงก์ระหว่างไฟล์ในเซิร์ฟเวอร์และสำเนาที่เกี่ยวข้องในคอมพิวเตอร์ เมื่อการสำรองข้อมูลเกิดขึ้น การเปลี่ยนแปลงในไฟล์ในคอมพิวเตอร์จะมีผลโดยอัตโนมัติกับไฟล์ที่มีการเชื่อมโยงฮาร์ดลิงก์ในเซิร์ฟเวอร์ แม้ว่าไฟล์จะได้รับการเปลี่ยนชื่อก็ตาม
บทสรุป
ทั้งซอฟต์ลิงก์และฮาร์ดลิงก์มีการใช้งานของตนเองและควรใช้ในสถานการณ์ที่แตกต่างกัน การทำความเข้าใจความแตกต่างจะช่วยให้คุณตัดสินใจได้ดีขึ้นเมื่อสร้างลิงก์ ซอฟต์ลิงก์และฮาร์ดลิงก์สามารถสร้างขึ้นสำหรับไดเร็กทอรีได้เช่นกัน แม้ว่าซอฟต์ลิงก์สามารถสร้างได้ระหว่างระบบไฟล์ แต่ฮาร์ดลิงก์สามารถสร้างขึ้นได้ภายในระบบไฟล์เดียวกันเท่านั้น