symlinking ไปยังไดเรกทอรีให้กับผลที่แตกต่างกันls -l
ขึ้นอยู่กับว่าผมหรือln -s dir
ln -s dir/
แต่อะไรคือความแตกต่างที่แท้จริงและฉันควรเลือกข้อใด
symlinking ไปยังไดเรกทอรีให้กับผลที่แตกต่างกันls -l
ขึ้นอยู่กับว่าผมหรือln -s dir
ln -s dir/
แต่อะไรคือความแตกต่างที่แท้จริงและฉันควรเลือกข้อใด
คำตอบ:
ไม่มีความแตกต่าง (จะมีความแตกต่างหากเป้าหมายไม่ใช่ไดเรกทอรีที่มีอยู่)
เฉือนสุดท้ายอาจต้องลงเอยด้วยการมีเพราะของเปลือกเสร็จ: กับการกำหนดค่าบางอย่างเสร็จสิ้นไปln -s tar
TabSpacelink
ln -s target/ link
foo -> bar/
แล้วเทียบเท่ากับfoo/qux
bar//qux
ในขณะที่ชื่อของคำถามที่พูดอย่างเป็นทางการไม่รวมถึงfoo -> bar/
ฉันยังพูดถึงกรณีที่ในคำตอบของฉันที่นั่น
สิ่งเดียวที่ฉันคิดได้ก็คือมัน "ปกป้อง" คุณจากการลบไดเรกทอรีและสร้างไฟล์
[user@host linktest]$ mkdir test
[user@host linktest]$ ln -s test/ slash
[user@host linktest]$ ln -s test noslash
[user@host linktest]$ ls -l
total 4
lrwxrwxrwx 1 paul paul 4 Feb 21 21:00 noslash -> test
lrwxrwxrwx 1 paul paul 5 Feb 21 21:00 slash -> test/
drwxrwxr-x 2 paul paul 4096 Feb 21 20:59 test
[user@host linktest]$ file *slash
noslash: symbolic link to `test'
slash: symbolic link to `test/'
[user@host linktest]$ rmdir test
[user@host linktest]$ file *slash
noslash: broken symbolic link to `test'
slash: broken symbolic link to `test/'
[user@host linktest]$ touch test
[user@host linktest]$ file *slash
noslash: symbolic link to `test'
slash: broken symbolic link to `test/'
[user@host linktest]$
เวอร์ชันที่มีสแลชหยุดทำงานเมื่อเป้าหมายถูกแทนที่ด้วยไฟล์
คำถามที่น่าสนใจ ฉันได้ทำการทดสอบเล็กน้อย:
$ mkdir dir
$ ln -s dir/ test_slash
$ ln -s dir test_noslash
$ ls -l
total 4
drwxr-xr-x 2 vrusinov vrusinov 4096 Feb 21 16:41 dir
lrwxrwxrwx 1 vrusinov vrusinov 3 Feb 21 16:41 test_noslash -> dir
lrwxrwxrwx 1 vrusinov vrusinov 4 Feb 21 16:41 test_slash -> dir/
$ strace ls test_slash 2> trace_slash
$ strace ls test_noslash 2> trace_noslash
$ wc -l trace_*
79 trace_noslash
79 trace_slash
$ diff -u trace_* | less
อย่างที่คุณเห็นไม่มีความแตกต่างของจำนวนการเรียกของระบบ (อย่างน้อยสำหรับ ls) และการติดตามมีลักษณะคล้ายกันมาก อย่างไรก็ตามนี่เป็นเพียงการทดสอบการถ่ายโอนข้อมูลและฉันไม่แน่ใจ - อาจมีความแตกต่างบ้าง
คำถามของคุณเกี่ยวกับพฤติกรรมของls
โปรแกรมจริงๆ
1) ถ้าคุณทำในls -l $dir
ที่ที่ $ dir เป็น symlink คุณจะได้รับข้อมูลเกี่ยวกับ symlink
2) ถ้าคุณทำls -lL $dir
ที่ $ dir เป็น symlink ไปยังไดเรกทอรีคุณจะได้รับข้อมูลเกี่ยวกับไดเรกทอรีเป้าหมาย
3) หากคุณls -l $dir/.
บังคับให้ symlink ติดตามและให้ข้อมูลเกี่ยวกับไดเรกทอรีเป้าหมาย
4) หากคุณทำls -l $dir/
ผลลัพธ์อาจเป็น # 1 หรืออาจเหมือนกับ # 3 ขึ้นอยู่กับเวอร์ชันls
ที่ใช้ ฉันเคยชินกับ Solaris รุ่นเก่าที่ทำมันเช่น # 1 และรู้สึกประหลาดใจโดย Linux ที่ทำมันเหมือนกับ # 3
และฉันควรเลือกข้อใด
โดยไม่ต้องต่อท้ายเครื่องหมายทับหากคุณอาจกังวลว่าชื่อไดเรกทอรีให้เป็นไดเรกทอรีจริงกับ symlink ไปยังไดเรกทอรี
ด้วยการต่อท้ายเครื่องหมายทับหากคุณมีความกังวลเกี่ยวกับไฟล์ในไดเรกทอรีมากกว่าไดเรกทอรีเอง