ประเด็นแรก:
อ้างถึงคุณ:
การสร้างและการลบทำงานได้ดี แต่การปรับปรุงไม่ทำงาน หลังจากดำเนินการคำสั่งนี้ symlink จะไม่ถูกต้อง
ปัญหากับโครงสร้างไดเรกทอรีที่กำหนด:
~ / สคริปต์ / ทดสอบ / ~ / สคริปต์ / ทดสอบ / remote_loc / ~ / สคริปต์ / ทดสอบ / remote_loc / ไซต์ 1 / ~ / สคริปต์ / ทดสอบ / remote_loc / ไซต์ 1 / stuff1.txt ~ / สคริปต์ / ทดสอบ / remote_loc / site2 / ~ / สคริปต์ /test/remote_loc/site2/stuff2.txt ~ / สคริปต์ / ทดสอบ / remote_loc / site2 / ~ / สคริปต์ / ทดสอบ / remote_loc / site3 / stuff3.txt
และใช้คำสั่ง:
ln -s /remote_loc/site1 test_link
มันคือการสร้างลิงค์สัญลักษณ์ใน $ PWD หรือไดเรกทอรีการทำงานของคุณซึ่งชี้ไปยังไฟล์ที่ไม่มีอยู่นอก / หรือรูทที่ / remote_loc / site1
หาก PWD ของคุณอยู่ใน ~ / สคริปต์ / คุณควรใช้สิ่งนี้:
ln -s remote_loc/site1 test_link
อื่นคุณสามารถใช้เส้นทางที่สมบูรณ์แบบเช่น:
ln -s /home/yourusername/remote_loc/site1 test_link
ประเด็นที่สอง:
อ้างถึงคุณ:
ฉันได้อ่านที่นี่และมันเป็นไปไม่ได้ที่จะอัปเดต / แทนที่ลิงค์ ดังนั้นจึงมีข้อมูลที่ขัดแย้งกันในเน็ต ถูกต้องใคร หาก symlink สามารถอัปเดต / แทนที่ได้ฉันจะทำสิ่งนี้ได้อย่างไร
ในการตอบคำถามของคุณ "ใครถูกต้อง" ฉันไม่แน่ใจว่าคุณอ่านอะไรหรือเข้าใจแล้ว แต่สิ่งต่อไปนี้ควรช่วยให้ชัดเจนขึ้น:
- สิ่งที่สามารถอัปเดตและ
- สิ่งที่ไม่สามารถอัปเดตได้หากไม่ใช้สวิตช์ที่เหมาะสม
การอัพเดตลิงก์สัญลักษณ์กับเป้าหมายที่ไม่ใช่ไดเร็กทอรี
ln -sf:
-f หรือ - บังคับลบไฟล์ปลายทางที่มีอยู่ซึ่งใช้เพื่ออัปเดตเป้าหมายหรือปลายทางของลิงก์
ตัวอย่าง:
ln -sf /tmp/test /tmp/test.link; ls -go /tmp |grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 9 Jun 8 17:27 test.link -> /tmp/test
แต่อย่างที่คุณเห็นมันจะให้เส้นทางที่แน่นอนหากเส้นทางที่แน่นอนอยู่ในln
ข้อโต้แย้งของ การให้เส้นทางแบบเต็มจำเป็นสำหรับไดเรกทอรีการทำงานปัจจุบันแตกต่างจากไดเรกทอรีหลักของลิงก์
เส้นทางสัมพัทธ์:
ln -sfr:
-r หรือ - สัมพันธ์สร้างลิงก์สัญลักษณ์สัมพันธ์กับตำแหน่งของลิงก์
ตัวอย่าง:
ln -sfr /tmp/test /tmp/test.link ; ls -go /tmp| grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 4 Jun 8 17:27 test.link -> test
แต่การอัปเดตลิงก์ไปยังไดเรกทอรีจะไม่ทำงานหากเป้าหมายคือไดเรกทอรี
ตัวอย่าง:
ln -sf /tmp/testdir /tmp/testdir.link ; ls -go /tmp |grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:47 testdir.link -> testdir
อย่างที่คุณเห็นแม้จะใช้ชื่อพา ธ สัมบูรณ์ที่ระบุในln
อาร์กิวเมนต์ของด้านบนโดยไม่มีตัวเลือก -r ลิงก์สัญลักษณ์ยังคงสัมพันธ์กับลิงก์
อัปเดตลิงค์ไปยังไดเรกทอรี:
ln -sfrn:
-n หรือ - no-dereference ถือว่า LINK_NAME เป็นไฟล์ปกติหากเป็นลิงก์สัญลักษณ์ไปยังไดเรกทอรี
ตัวอย่าง:
ln -sfn /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 12 Jun 8 17:48 testdir.link -> /tmp/testdir
เมื่อเทียบกับ:
ln -sfnr /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:48 testdir.link -> testdir
unlink
rm
ด้วยunlink
คุณจะไม่มีความเสี่ยงที่จะสูญเสียไฟล์ใด ๆ ในไดเรกทอรีต้นทางโดยไม่ได้ตั้งใจโดยใช้สวิตช์ที่ผิด