เหตุใด ln -s จึงยอมรับอาร์กิวเมนต์เดี่ยว


27
> cd /tmp
> ln -s foo
> ls -alhF /tmp
lrwxrwxrwx 1 user user    3 Jul 29 14:00 foo -> foo

นี่เป็นข้อบกพร่องlnหรือมีกรณีการใช้งานสำหรับการเชื่อมโยงไฟล์กับตัวเองหรือไม่?

coreutils 8.21-1ubuntu5.1นี้จะมีการ

คำตอบ:


45

มันไม่ใช่ข้อผิดพลาด กรณีการใช้งานใช้สำหรับเมื่อคุณต้องการเชื่อมโยงไฟล์ไปยังชื่อฐานเดียวกัน แต่ในไดเรกทอรีอื่น:

cd /tmp
ln -s /etc/passwd
ls -l passwd
lrwxrwxrwx 1 xxx xxx 11 Jul 29 09:10 passwd -> /etc/passwd

เป็นความจริงที่ว่าเมื่อคุณทำเช่นนี้กับชื่อไฟล์ที่อยู่ในไดเรกทอรีเดียวกันมันจะสร้างลิงค์ไปยังตัวเองซึ่งไม่ได้ทำอะไรมากมายเลย!

สิ่งนี้ใช้ได้ผลไม่ว่าคุณจะใช้ symlink หรือฮาร์ดลิงก์


15
อีกวิธีในการใส่: ln -s /path/to/fileย่อมาln -s /path/to/file .จาก เช่นเดียวสั้นสำหรับls ls .
Stéphane Chazelas

3
@ StéphaneChazelasใช่แล้วและคุณประหยัดการกดแป้นพิมพ์ทั้งสองครั้ง! :-)
Celada

4
โปรดทราบว่าพฤติกรรมดังกล่าวไม่ได้ระบุไว้โดย POSIX แต่ดูเหมือนว่าจะค่อนข้างธรรมดา (GNU, busybox, FreeBSD, Solaris, Ultrix อย่างน้อยและเป็นเช่นนั้นอยู่แล้ว (แม้ว่า -s ไม่ได้รับการสนับสนุนแน่นอน) ใน Unix รุ่นแรก ในช่วงต้นยุค 70)
Stéphane Chazelas

9

วิธีที่ง่ายที่สุดในการค้นหาหลักสูตรคือการลองและดู เมื่อไม่ได้ระบุอาร์กิวเมนต์ที่ 2 lnจะสร้างลิงก์ในไดเรกทอรีปัจจุบันที่มีชื่อเหมือนกับของเดิม:

$ ln -s /etc
$ ls -l
lrwxrwxrwx 1 terdon terdon         4 Jul 29 16:09 etc -> /etc

นี่คือคำอธิบายในman ln:

ในฟอร์มที่ 2 ให้สร้างลิงก์ไปยัง TARGET ในไดเรกทอรีปัจจุบัน

"รูปแบบที่ 2" หมายถึง:

ln [ตัวเลือก] ... เป้าหมาย (แบบฟอร์มที่ 2)

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