บทแนะนำนี้จะอธิบายวิธีสร้างลิงก์สัญลักษณ์ (ลิงก์สัญลักษณ์) หรือที่เรียกว่า "ซอฟต์ลิงก์" ใน Linux โดยใช้คำสั่ง ln
หากคุณมาที่ Linux จากพื้นหลังโดยใช้ระบบปฏิบัติการ Windows คุณจะคุ้นเคยกับแนวคิดของทางลัด – ไฟล์ที่ไม่มีข้อมูลจริงและมีลิงก์ไปยังไฟล์หรือโฟลเดอร์จริงที่คุณต้องการเข้าถึง
สิ่งเหล่านี้อาจมีอยู่เพื่อความสะดวกของคุณ (เพื่อประหยัดเวลาในการคลิกผ่านโฟลเดอร์ที่ซ้อนกัน) หรือเพื่อเปลี่ยนเส้นทางเอาต์พุต (คุณมีโปรแกรมที่มีไดเร็กทอรีฮาร์ดโค้ดซึ่งจะส่งออกไฟล์และคุณต้องการส่งไปที่อื่น)
Soft Links (Symlinks) ใน Linux มีจุดประสงค์เดียวกันเป็นหลัก
ฮาร์ดลิงก์กับซอฟต์ลิงก์
- ซอฟต์ลิงค์ (เรียกอีกอย่างว่า ลิงก์สัญลักษณ์หรือลิงก์สัญลักษณ์ ) อ้างถึงตำแหน่งของไฟล์หรือโฟลเดอร์อื่นในระบบไฟล์
- ดังนั้น หากไฟล์ที่ได้ ซอฟต์ลิงค์ ถูกลบซอฟต์ลิงก์ไม่มีความหมายเนื่องจากชี้ไปยังไฟล์ที่ไม่มีอยู่จริง
- เนื่องจากซอฟต์ลิงก์เป็นเพียงการอ้างอิงไปยังตำแหน่งไฟล์ที่ลิงก์ จึงสามารถอยู่ในระบบไฟล์ต่างๆ ได้
- ไม่มีการแชร์สิทธิ์ระหว่างลิงก์และลิงก์
- ฮาร์ดลิงก์ เป็นสำเนามิเรอร์ของไฟล์ที่เชื่อมโยง – ทั้งสองสำเนาอ้างถึงข้อมูลเดียวกันบนอุปกรณ์จัดเก็บข้อมูล
- ดังนั้น การลบไฟล์ที่ฮาร์ดลิงก์จะไม่ลบข้อมูล – “ฮาร์ดลิงก์” อีกอันไปยังข้อมูลจะยังคงเป็นไฟล์ในระบบไฟล์
- ระบบไฟล์จะนับจำนวน การอ้างอิง มีไฟล์อยู่บนดิสก์ เมื่อฮาร์ดลิงก์ทั้งหมดถูกลบ การนับนั้นจะเป็น 0 (ศูนย์) เมื่อจำนวนถึงศูนย์ ไฟล์จะถูกลบ และพื้นที่ข้อมูลจะถูกยกเลิกการจัดสรรเพื่อให้สามารถเก็บไฟล์อื่นๆ ได้
- เนื่องจากเป็นข้อมูลอ้างอิงสองรายการ จึงต้องมีอยู่ในระบบไฟล์เดียวกัน
- มีการแชร์สิทธิ์ – ทั้งที่ลิงก์และลิงก์ เป็นไฟล์เดียวกันบนดิสก์ที่อ้างอิงจากสองแห่ง
- ดังนั้น การลบไฟล์ที่ฮาร์ดลิงก์จะไม่ลบข้อมูล – “ฮาร์ดลิงก์” อีกอันไปยังข้อมูลจะยังคงเป็นไฟล์ในระบบไฟล์
ไวยากรณ์
ln [OPTIONS] SOURCE_PATH LINK_PATH
โปรดทราบว่า:
- ทั้งไฟล์และโฟลเดอร์สามารถใช้เป็น SOURCE_PATH
- ซอฟต์ไลค์จะถูกสร้างขึ้นที่ LINK_PATH
ตัวเลือก
คุณสามารถส่งตัวเลือกต่อไปนี้ไปยัง ln คำสั่ง:
-F | หากลิงก์ที่เสนอ (link_name) มีอยู่แล้วและเป็นไดเรกทอรี ให้ลบออกเพื่อให้เกิดลิงก์ได้ ควรใช้ตัวเลือก -F กับตัวเลือก -f หรือ -i หากไม่มีการระบุ -f จะเป็นนัย อ็อพชัน -F เป็นแบบ no-op เว้นแต่จะระบุอ็อพชัน -s |
-h | หาก link_name หรือ link_dirname เป็นลิงก์สัญลักษณ์ อย่าทำตาม สิ่งนี้มีประโยชน์มากที่สุดกับตัวเลือก -f เพื่อแทนที่ symlink ที่อาจชี้ไปที่ไดเร็กทอรี |
-f | หากลิงก์ที่เสนอ (link_name) มีอยู่แล้ว ให้ยกเลิกการลิงก์เพื่อให้เกิดลิงก์ได้ (ตัวเลือก -f จะแทนที่ตัวเลือก -i ก่อนหน้า) |
-i | ทำให้ ln เขียนข้อความแจ้งข้อผิดพลาดมาตรฐาน หากมีลิงก์ที่เสนออยู่ หากการตอบสนองจากอินพุตมาตรฐานเริ่มต้นด้วยอักขระ y หรือ Y ให้ยกเลิกการเชื่อมโยงลิงก์ที่เสนอเพื่อให้เกิดลิงก์ มิฉะนั้น อย่าพยายามเชื่อมโยง (ตัวเลือก -i จะแทนที่ตัวเลือก -f ก่อนหน้า) |
-n | เหมือนกับ -h เพื่อความเข้ากันได้กับการใช้งาน ln อื่นๆ |
-s | สร้างลิงค์สัญลักษณ์ |
-v | ทำให้ ln เป็น verbose แสดงไฟล์ในขณะที่ประมวลผล |
ตัวเลือกเหล่านี้และรายละเอียดทั้งหมดสำหรับ ls คำสั่งสามารถพบได้ในคู่มือผู้ใช้โดยเรียกใช้:
man ls
ตัวอย่าง
เพื่อสาธิตการสร้างลิงก์สัญลักษณ์อย่างง่าย (symlink สั้น ๆ ) เราสามารถสร้างไฟล์:
touch test_file.txt
จากนั้นเราก็สร้าง ซอฟต์ลิงค์ ไปที่มัน:
ln -s test_file.txt link_to_test_file
คุณสามารถตรวจสอบลิงก์ได้โดยเรียกใช้:
ls -l
ซึ่งจะแสดงผลเช่น:
-rw-r--r-- 1 user staff 0 2 Jan 01:31 test_file.txt lrwxr-xr-x 1 user staff 9 2 Jan 01:32 link_to_test_file -> test_file.txt
โปรดทราบว่า:
- ตัวอักษรในคอลัมน์แรกแสดงถึงประเภทไฟล์หรือโฟลเดอร์และการอนุญาต
- ตัวเลขต่อไปนี้คือจำนวนไฟล์ที่มีอยู่
- ผู้ใช้/พนักงาน คือผู้ใช้/กลุ่มที่มีสิทธิ์เข้าถึงไฟล์หรือโฟลเดอร์
- ตามด้วยขนาดไฟล์ วันที่แก้ไข และชื่อ
- เห็นว่า ล ที่จุดเริ่มต้นของแถว? ซึ่งหมายความว่าเป็นลิงก์
- นอกจากนี้ คุณยังสามารถดู -> bit at end ซึ่งแสดงว่าไฟล์นั้นเชื่อมโยงกับ test_file.txt
- สอ้อ นี่มันลิงค์ชัดๆ
บทสรุป
เมื่อฉันเข้าสู่ระบบส่วนใหญ่ ฉันจะถูกส่งไปยังโฮมไดเร็กทอรีของผู้ใช้โดยตรง แทนที่จะพิมพ์พาธไปยังไดเร็กทอรี ฉันต้องการทำงานในวันนั้น (เช่น ในไดเร็กทอรีที่โฮสต์ไฟล์สำหรับเว็บแอปที่ฉันปรับใช้) สิ่งแรกที่ฉันมักจะทำคือสร้างซอฟต์ ลิงก์ไปยังโฟลเดอร์นั้น เพื่อที่ฉันจะได้ไม่ต้องพิมพ์พาธแบบเต็มทุกครั้งที่ต้องการย้อนกลับไปยังโฟลเดอร์นั้น
มีประโยชน์มาก
ยังใหม่กับลินุกซ์? นำไปใช้ได้ทันทีโดยการเรียนรู้โค้ด!