Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

ความแตกต่างระหว่าง Soft Link และ Hard Link ใน Linux

ในระบบ Linux เมื่อมีไฟล์ซ้อนอยู่ลึกในโฟลเดอร์หลายชั้น และต้องการสร้าง "ทางลัด" (shortcut) บนเดสก์ท็อปเพื่อเข้าถึงง่ายขึ้น สามารถใช้ Symlink (Soft Link) หรือ Hard Link บทความนี้อธิบายความแตกต่างและกรณีที่ควรใช้แต่ละแบบ

Soft Link vs Hard Link

Soft Link (Symbolic Link) คือเพียง "ตัวชี้" (pointer) ไปยังพาธของไฟล์เป้าหมาย ไม่สนใจว่าไฟล์/โฟลเดอร์นั้นมีอยู่จริงหรือไม่ หากถูกลบ จะกลายเป็น "broken link" การแก้ไขหรือลบ soft link ไม่ส่งผลต่อไฟล์ต้นฉบับ

Hard Link คือการให้ "ชื่อเพิ่มเติม" แก่ไฟล์เดียวกัน (ชี้ไป inode เดียวกัน) แก้ไขเนื้อหาผ่านชื่อใดชื่อหนึ่ง จะสะท้อนให้อีกชื่อเห็นทันที สรุป: Soft link ชี้พาธ, Hard link ชี้ข้อมูลโดยตรง

ตัวอย่าง Soft Link

สมมติมีไฟล์ first_file.txt มีข้อความ 4 บรรทัด สร้าง soft link ในโฮม:

ln -s first_file.txt ~/sl-firstfile.txt

บน GNOME: คลิกขวาไฟล์ → Create Link จะได้ไฟล์ชื่อ "Link to first_file.txt" มีลูกศรสีดำบนไอคอน

ดูเนื้อหา sl-firstfile.txt จะเหมือน first_file.txt ทุกประการ ตรวจสอบด้วย ls -l จะ thấyตัวอักษรแรกของ permission เป็น l (link) และแสดงพาธปลายทาง

พฤติกรรมเมื่อลบไฟล์ต้นฉบับ

ลบ first_file.txt → soft link ยังคงอยู่ แต่กลายเป็น "dangling/broken link" ใช้งานไม่ได้ หากสร้างไฟล์ใหม่ชื่อ first_file.txt อีกครั้ง soft link จะกลับมาใช้งานได้อีก

เคล็ดลับ: หาตำแหน่งจริงของ soft link ด้วยคำสั่ง readlink

ตัวอย่าง Hard Link

สร้าง hard link เดียวกัน:

ln first_file.txt hl-first-file.txt

หรือใช้คำสั่ง link:

link hl-firstfile.txt hl2-firstfile.txt

ใน GUI: ไฟล์ทั้งสองดูเหมือนไฟล์คนละไฟล์ ไม่มีสัญลักษณ์ลูกศร เพิ่มบรรทัดใน hl-first-file.txt:

echo "hello" >> hl-first-file.txt

เนื้อหาใน first_file.txt ก็จะเพิ่มบรรทัด "hello" ด้วย เพราะทั้งสองชี้ข้อมูลเดียวกัน (inode เดียวกัน)

พฤติกรรมเมื่อลบไฟล์

ลบไฟล์ต้นฉบับ หรือลบ hard link ไหนก็ตาม ข้อมูลยังคงอยู่และเข้าถึงได้ผ่านอีกไฟล์หนึ่ง จนกว่าจะลบทุก hard link ที่ชี้ inode นั้นครบ

เมื่อไหร่ควรใช้ Soft Link?

  • ต้องการ "ทางลัด" ไปยังไฟล์/โฟลเดอร์ที่อยู่ลึก
  • ต้องการลิงก์ข้ามไฟล์ระบบ (cross-filesystem) ได้
  • ลิงก์ไปยังไดเรกทอรีได้

เมื่อไหร่ควรใช้ Hard Link?

  • ต้องการให้ไฟล์เดียวมีหลายชื่อ และการเปลี่ยนแปลงสะท้อนกันทันที
  • ระบบแบ็กอัปแบบ Incremental: สร้าง hard link ระหว่างไฟล์บนเซิร์ฟเวอร์และเครื่องลูกข่าย การเปลี่ยนแปลงจะสะท้อนอัตโนมัติ แม้เปลี่ยนชื่อไฟล์ก็ตาม
  • ใช้ได้เฉพาะภายในไฟล์ระบบเดียวกัน (same filesystem)

สรุป

Soft link และ Hard link มีประโยชน์ต่างกัน ควรเลือกใช้ตามสถานการณ์ ทั้งคู่สามารถสร้างให้กับไดเรกทอรีได้ แต่ soft link ข้าม filesystem ได้ ส่วน hard link ต้องอยู่ใน filesystem เดียวกัน