ฉันควรรวมเครื่องหมายทับ / ใน symlink ไปยังไดเรกทอรีหรือไม่?


30

symlinking ไปยังไดเรกทอรีให้กับผลที่แตกต่างกันls -lขึ้นอยู่กับว่าผมหรือln -s dir ln -s dir/แต่อะไรคือความแตกต่างที่แท้จริงและฉันควรเลือกข้อใด

คำตอบ:


9

ไม่มีความแตกต่าง (จะมีความแตกต่างหากเป้าหมายไม่ใช่ไดเรกทอรีที่มีอยู่)

เฉือนสุดท้ายอาจต้องลงเอยด้วยการมีเพราะของเปลือกเสร็จ: กับการกำหนดค่าบางอย่างเสร็จสิ้นไปln -s tarTabSpacelinkln -s target/ link


คำถามที่เชื่อมโยงดูเหมือนจะเกี่ยวกับเครื่องหมายสแลชหลาย ๆ อันในเส้นทาง แต่ไม่เกี่ยวกับเครื่องหมายสแลชต่อท้ายบนลิงก์ ฉันไม่แน่ใจว่ามีอะไรจะพูดที่นี่
mwfearnley

จริงๆแล้วฉันไม่ควรพูดแบบนั้น มันค่อนข้างพูดได้นิดหน่อยจากความกังวลทั่วไปที่เกี่ยวข้องกับคำถาม ฉันไม่คิดว่ามันจะนำไปสู่ข้อสรุปนี้
mwfearnley

@mwfearnley มันเป็นเหตุผลสำคัญ: ถ้าfoo -> bar/แล้วเทียบเท่ากับfoo/qux bar//quxในขณะที่ชื่อของคำถามที่พูดอย่างเป็นทางการไม่รวมถึงfoo -> bar/ฉันยังพูดถึงกรณีที่ในคำตอบของฉันที่นั่น
Gilles 'หยุดชั่วร้าย'

สวัสดีขอบคุณที่ตอบกลับ .. มันบอกฉันว่าเส้นทางรวมถึง symlink นั้นเทียบเท่ากัน มันไม่จำเป็นต้องบอกฉันว่าจะเกิดอะไรขึ้นถ้าฉันเข้าถึง symlink ตัวเอง (โดยไม่มีเครื่องหมายทับ) และโดยไม่ต้องเป็นผู้เชี่ยวชาญของ Unix ฉันไม่จำเป็นต้องรู้ว่า 'ความเท่าเทียม' หมายถึงอะไรหรือไม่ได้หมายความว่าอะไร
mwfearnley

มีอย่างน้อยหนึ่งกรณีขอบที่มันสร้างความแตกต่างดังนั้นฉันต้องลงคะแนนคำตอบนี้
Flimm

27

สิ่งเดียวที่ฉันคิดได้ก็คือมัน "ปกป้อง" คุณจากการลบไดเรกทอรีและสร้างไฟล์

[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]$

เวอร์ชันที่มีสแลชหยุดทำงานเมื่อเป้าหมายถูกแทนที่ด้วยไฟล์


3

คำถามที่น่าสนใจ ฉันได้ทำการทดสอบเล็กน้อย:

$ 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) และการติดตามมีลักษณะคล้ายกันมาก อย่างไรก็ตามนี่เป็นเพียงการทดสอบการถ่ายโอนข้อมูลและฉันไม่แน่ใจ - อาจมีความแตกต่างบ้าง


ฉันยังสงสัยด้วยว่ามันสร้างความแตกต่างได้จริงหรือไม่ แต่ทำไมจะต้องเก็บสแลชเพิ่มเติม
Tobias Kienzler

2

คำถามของคุณเกี่ยวกับพฤติกรรมของ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 ไปยังไดเรกทอรี

ด้วยการต่อท้ายเครื่องหมายทับหากคุณมีความกังวลเกี่ยวกับไฟล์ในไดเรกทอรีมากกว่าไดเรกทอรีเอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.