ในระบบ 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 เดียวกัน