Linux ไม่มีลัดทาง (shortcuts) แต่มี Symbolic Links — หรือที่เรียกกันว่า Symlinks แต่ Symlinks คืออะไรจริงๆ? และสร้างอย่างไร? มาค้นหาคำตอบกัน
เราจะลองคำสั่งบนการติดตั้ง Ubuntu แม้ไวยากรณ์จะทำงานเหมือนกันในทุก Linux distros น่าเชื่อถือได้ว่า symlinks สร้างได้บน Mac PC ด้วย
Symbolic Links คืออะไร?
หากคุณต้องการเข้าถึงไฟล์จากหลายตำแหน่ง การคัดลอกเพียงอย่างเดียวไม่ใช่โซลูชันที่ดี คุณกำลังเสียพื้นที่ดิสก์ และทำให้ยากต่อการติดตามการเปลี่ยนแปลงเนื่องจากมีหลายไฟล์
ในระบบปฏิบัติการแบบ GUI คุณจะสร้าง shortcuts สำหรับ OS แบบ CUI (เช่น Linux distro ใดๆ) คำตอบคือ symlink แม้ Windows ก็ใช้ symlinks ได้ในบางสถานการณ์
Symlink หรือ symbolic link คือไฟล์ที่ชี้ไปยังไฟล์หรือไดเรกทอรีอื่น — แม้จะอยู่ในระบบไฟล์หรือพาร์ติชันที่ต่างกันก็ตาม การเปิด symlink ให้คุณเข้าถึงไฟล์ต้นฉบับเดียวกัน การเปลี่ยนแปลงใดๆ จะสะท้อนกลับไปที่ไฟล์หลักเช่นกัน
สิ่งนี้รวมถึงสิทธิ์การเข้าถึง — การใช้ chmod เปลี่ยนสิทธิ์ของไฟล์ symlink จะเปลี่ยนสิทธิ์ของไฟล์เป้าหมายจริงๆ
ประเภทของ Symlinks
Symbolic links เรียกอีกอย่างว่า soft links ตามชื่อที่บ่งชี้ ไม่ใช่ระบบเชื่อมโยงไฟล์ประเภทเดียวใน Linux Hard links ใช้เป็นทางเลือกแทน symlinks ในบางสถานการณ์ แต่มีข้อจำกัดหลายประการ
จากลำดับแรก Hard links คือชื่อไฟล์ที่ชี้ไปยัง inode เดียวกัน แม้จะทำให้มีประสิทธิภาพด้านพื้นที่จัดเก็บและความเร็วในการเข้าถึง แต่ก็จำกัดให้อยู่ในระบบไฟล์หรือพาร์ติชันเดียวกันเท่านั้น และเนื่องจากลักษณะการเข้าถึงโฟลเดอร์ใน Linux คุณไม่สามารถใช้ hard links สำหรับไดเรกทอรีได้
Soft links หรือ Symbolic links กลับคล้าย shortcuts บนเดสก์ท็อป แต่ละ soft link เป็นไฟล์เล็กๆ ที่ชี้ไปยังข้อมูลต้นฉบับโดยไม่ได้เชื่อมโยงโดยตรง หมายความว่า soft links ชี้ไปยังไฟล์และไดเรกทอรีบนพาร์ติชันและระบบไฟล์อื่นๆ ได้โดยไม่มีข้อจำกัด
Hard Links VS Soft Links — ควรใช้ประเภทไหน?
Soft links เป็นรูปแบบลิงก์ที่หลากหลายที่สุด ใช้ได้กับทั้งไฟล์และไดเรกทอรีข้ามระบบไฟล์หลายระบบโดยไม่มีข้อจำกัด แต่เราทำไมถึงมี hard links? Hard links ให้ข้อได้เปรียบอะไรเหนือ symlinks?
ในทฤษฎี Hard links มีประสิทธิภาพมากกว่า เนื่องจากใช้ inode เดียวกัน จึงไม่ใช้พื้นที่ดิสก์เพิ่มเติมและเข้าถึงได้เร็วกว่า soft links ดังนั้นผู้ดูแลระบบจึงแนะนำให้ใช้ hard links ทุกครั้งที่ทำได้
อย่างไรก็ตาม ข้อเสียของ symbolic links น้อยมาก คอมพิวเตอร์สมัยใหม่ไม่สนใจพื้นที่จัดเก็บเพิ่มอีกไม่กี่กิโลไบต์ และเว้นแต่คุณจะเติมระบบด้วย soft links หลายล้านลิงก์ ขนาดไฟล์เพิ่มเติมนั้น نادرๆ ที่สำคัญ
การสร้าง Symbolic Links
Symbolic links — หรือลิงก์ไฟล์โดยทั่วไป — สร้างด้วยคำสั่ง ln โดยค่าเริ่มต้นคำสั่งนี้สร้าง hard links เพื่อสร้าง symbolic link คุณต้องเพิ่มแฟล็ก -s ไปกับคำสั่ง ln
ไวยากรณ์ง่ายมาก คำสั่ง ln รับสองพารามิเตอร์ — พาธของไฟล์ (หรือโฟลเดอร์) ที่จะลิงก์ไป และพาธของไฟล์ลิงก์ที่จะสร้าง
เช่นนี้:
ln -s user_names.txt names
จะสร้าง symlink ชื่อ names ที่เชื่อมต่อกับไฟล์ข้อความ user_names เพื่อดูว่า symlink ถูกสร้างจริง ให้ใช้คำสั่ง ls
เห็นได้ว่า Ubuntu แสดงสีต่างกันสำหรับหมวดหมู่ไฟล์ต่างๆ ไดเรกทอรีเป็นสีน้ำเงินเข้ม และ symlinks เป็นสีฟ้าอ่อน (cyan จริงๆ)
เราสามารถใช้ไวยากรณ์เดียวกันสร้าง symlink สำหรับโฟลเดอร์ได้:
ln -s examples example_folder
สำหรับการสร้าง symlinks ไปยังไฟล์และโฟลเดอร์ในไดเรกทอรีอื่น ให้ใช้ full path ตัวอย่างเช่น:
ln -s examples/example3.txt distant_example
ข้อจำกัดของ Symlinks
Symbolic links เป็นวิธียอดเยี่ยมในการเชื่อมโยงไฟล์ทั่วระบบโดยไม่ต้องคัดลอก แต่ก็มีข้อจำกัดของตัวเอง แม้ soft links จะน้อยกว่าข้อจำกัด hard links ยังมีสิ่งที่ต้องระวัง
ข้อแรก คำสั่ง ln ไม่ได้ตรวจสอบลิงก์ที่สร้างขึ้น หมายความว่าสามารถป้อนชื่อไฟล์ที่ไม่มีอยู่จริงได้ และจะไม่ได้รับข้อผิดพลาดใดๆ วิธีเดียวยืนยันลิงก์คือลองใช้งานดูว่าชี้ไปยังไฟล์ที่ถูกต้องหรือไม่
ข้อที่สอง แม้การเข้าถึงหรือเปลี่ยนสิทธิ์ของ symlink จะเปลี่ยนคุณสมบัติของไฟล์ต้นฉบับ แต่การลบไฟล์ไม่ได้ คุณสามารถลบ symbolic link ได้อย่างปลอดภัยโดยไม่กระทบไฟล์หรือไดเรกทอรีที่ลิงก์
การสร้าง Symlinks ใน Linux
ความยุ่งยากในการใช้เทอร์มินัลสร้าง symbolic links คือการเข้าถึงไฟล์สำคัญที่กระจายอยู่ในไดเรกทอรีต่างๆ วิธีฉลาดคือสร้าง symbolic links ไปยังไฟล์เหล่านั้นจากไดเรกทอรี home เอง เหมือน shortcuts บนเดสก์ท็อป
และไม่เหมือน hard links symlinks สร้างได้ง่ายโดยไม่มีข้อจำกัด แม้สำหรับการเชื่อมต่อกับไดเรกทอรีหรือไฟล์ในพาร์ติชันและระบบไฟล์ที่ต่างกัน จงจำไว้ว่าหมายความว่า symlink อาจชี้ไปยังไฟล์ที่ไม่มีอยู่ — คุณต้องลองเข้าถึงลิงก์เพื่อตรวจสอบว่าไฟล์มีอยู่จริง