Linux สนับสนุน link ทั้งแบบ hard และ symbolic ถึงแม้ว่าเราอาจจะไม่จำเป็นที่จะต้องเข้าใจว่าลิงค์ใน Linux มันทำงานอย่างไร แต่เราก็ควรจะเข้าใจถึงความแตกต่างของ link ทั้งสองชนิดนี้ และวิธีการใช้ link
ในการที่จะสร้าง hard หรือ symbolic link ให้เราใช้คำสั่ง ln หรือ link ซึ่งคำสั่งทั้งสองนี้สามารถสร้างได้ทั้ง 2 ชนิด (hard และ symbolic link) ถ้าเราใช้คำสั่ง ln ในการสร้าง hard link เราจะต้องทำการระบุไฟล์ที่สอง ใน command link ที่ต้องการให้มันอ้างอิงไปยังไฟล์ดั้งเดิมด้วย เช่น
# cat > file This is file1 # ln file1 file2 # ls -l file* -rw-rw-r-- 2 root root 14 Nov 13 18:54 file1 -rw-rw-r-- 2 root root 14 Nov 13 18:54 file2 # cat file2 This is file1
เราจะเห็นว่า file2 นั้นมีเนื้อหาเหมือนกับ file1 ถ้าหากเราทำการลบ file1 ออกไป file2 ก็จะยังคงอยู่ แต่ในกรณีที่ทำการแก้ไขเนื้อหาใน file1 จะทำให้มันไปทำการ update เนื้อหาใน file2 ด้วย ในทางกลับกัน ถ้าเราทำการแก้ไขหรือเพิ่มเนื้อหาใน file2 มันก็จะทำการ update เนื้อหาใน file1 เช่นกัน
ในทางกลับกัน ถึงแม้ว่า symbolic link จะมีประโยชน์ แต่มันก็มีข้อเสียเหมือนกัน ตัวอย่างต่อไปจะทำการแสดงให้เห็นถึงข้อเสียของมัน (ในการสร้าง symbolic link จะใช้คำสั่ง ln ตามด้วย option -s ดังนี้)
# ln -s file1 file2 # ls -l file* -rw-rw-r-- 1 root root 14 Nov 13 18:54 file1 lrwxrwxrwx 1 root root 5 Nov 13 19:04 file2 -> file1
จะเห็นว่าใน file2 จะมี ลูกศร ชี้ไปที่ file1 ( -> ) นั่นหมายความว่า file2 เป็น symbolic link ไปยัง file1 และเราจะเห็นว่า file2 นั้นมีขนาดเล็กกว่า file1
Symbolic links มีความแตกต่างจาก hard links ตรงที่มันจะทำการอ้างอิงแบบ alias ไปยัง pathname ที่ต้องการเพื่อไปยัง original file นั้น ๆ ได้ง่ายขึ้น และในกรณีที่เราทำการลบ symbolic link (ในที่นี้คือ file2) ออกไปก็ตาม แต่ original file (file1) ก็จะไม่ถูกลบออกไปตาม symbolic link แต่ในกรณีที่เราทำการลบ original file ออกไป จะทำให้ symbolic link ถูกลบตามด้วย เช่น
# rm -f file1 # cat file2 cat: file2: No such file or directory
เพราะว่า original file (file1) ถูกลบออกไปแล้ว เราก็ไม่สามารถเข้าถึงเนื้อหาของ symbolic link (file2) นั้นได้ แต่อย่างไรก็ตาม symbolic links ก็ยังมีข้อดีกว่า hard link เพราะว่า เราสามารถใช้ symbolic link เพื่อ point ไปยัง directory ใด ๆ ก็ได้บน file system ดังตัวอย่างต่อไปนี้ ถ้าเราต้องการสร้าง hard link ไปยัง /usr/local/games คำสั่ง ln จะต้องกำหนดดังนี้
# ln /usr/local/games play ln: /usr/local/games: hard link not allowed for directory
แต่ถ้าเราใช้ symbolic link จะต้องกำหนดคำสั่งดังนี้
# ln -s /usr/local/games play # ls -l play lrwxrwxrwx 1 root root 16 Nov 13 19:28 play -> /usr/local/games
เพียงเท่านี้เราก็สามารถเข้าถึง directory play แทนก็ใช้ path เต็ม ๆ แบบ /usr/local/games ได้แล้ว เช่น
# cd /usr/local/games
ให้ใช้คำสั่งนี้แทน (เข้าถึง symbolic link)
# cd play
Login
Search