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

यह सच है कि जब आप ऐसा फाइलनाम के साथ करते हैं जो उसी डायरेक्टरी में होता है तो यह अपने आप में एक लिंक बनाता है जो पूरी तरह से अच्छा नहीं करता है!

यह इस बात पर ध्यान दिए बिना काम करता है कि आप सहानुभूति या कड़ी का उपयोग करते हैं।


15
इसे लगाने का एक और तरीका: के ln -s /path/to/fileलिए छोटा है ln -s /path/to/file .। जैसे के lsलिए छोटा है ls .
स्टीफन चेज़लस

3
@ StéphaneChazelas हाँ, और आप दो पूरे कीस्ट्रोक्स बचाते हैं! :-)
सेलडा

4
ध्यान दें कि वह व्यवहार POSIX द्वारा निर्दिष्ट नहीं है, लेकिन यह काफी सामान्य (GNU, busybox, FreeBSD, Solaris, Ultrix) प्रतीत होता है, और यूनिक्स के पहले संस्करण में पहले से ही ऐसा था (हालांकि यह निश्चित रूप से समर्थित नहीं था) 70 के दशक में)।
स्टीफन चेज़लस

9

निश्चित रूप से पता लगाने का सबसे आसान तरीका है, इसे आज़माना और देखना। जब कोई दूसरा तर्क नहीं दिया जाता है, lnतो मूल नाम के समान वर्तमान निर्देशिका में एक लिंक बनाएगा:

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

इसमें भी बताया गया है man ln:

2 डी फॉर्म में, TARGET के लिंक को वर्तमान डायरेक्टरी में बनाएं।

"द्वितीय रूप" से तात्पर्य है:

ln [विकल्प] ... लक्ष्य (दूसरा फ़ॉर्म)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.