ลิงก์สัญลักษณ์จำเป็นต้องได้รับการแก้ไขแบบอะตอม หากคุณเขียนหนังสือไปครึ่งทางพวกเขาจะไม่ทำงาน เนื้อหาของลิงก์สัญลักษณ์มีขนาดค่อนข้างเล็ก (สูงสุด 4095 ตัวอักษรบน Linux: ความยาวสูงสุดของพา ธ ไปยังไฟล์) ดังนั้นจะมีจุดเล็กน้อยในการแก้ไขส่วนของลิงก์สัญลักษณ์ที่ระดับเคอร์เนล ดังนั้นเคอร์เนลจึงไม่ให้ส่วนต่อประสานใด ๆ ในการแก้ไขลิงก์สัญลักษณ์เฉพาะส่วนต่อประสานเพื่อสร้างอันใหม่การsymlink
เรียกของระบบ (รวมถึงอินเทอร์เฟซทั่วไปunlink
เพื่อลบไฟล์ใด ๆ )
การsymlink
เรียกระบบจะสร้างลิงก์สัญลักษณ์ใหม่เท่านั้นซึ่งจะไม่ลบไฟล์ใด ๆ ที่มีอยู่ นี้เป็นที่น่ารำคาญ แต่สอดคล้องกับระบบอื่น ๆ เรียกร้องให้สร้างไฟล์เช่นopen
(ซึ่งสามารถสร้างไฟล์ใหม่หรือตัดไฟล์ที่มีอยู่ แต่ไม่ได้แทนที่ไฟล์ที่มีอยู่โดยไฟล์ที่สร้างขึ้นใหม่) mkdir
และ
ในเชลล์ดังที่คุณค้นพบในขณะที่คุณไม่สามารถแทนที่ลิงก์สัญลักษณ์แบบอะตอมด้วยln
คำสั่ง ( ln -sf
ยกเลิกการลิงก์ไฟล์ก่อนหน้าแล้วสร้างลิงค์สัญลักษณ์) คุณสามารถทำได้โดยการสร้างลิงค์สัญลักษณ์ภายใต้ชื่อชั่วคราวและ จากนั้นย้ายเข้าที่
tmp=$(TMPDIR=$(dirname -- "$link") mktemp)
ln -sf -- "$target" "$tmp"
mv -f "$tmp" "$link"