किसी निर्देशिका के प्रति सहानुभूति अलग-अलग परिणामों को देती है, ls -l
चाहे मैं हो ln -s dir
या नहीं ln -s dir/
। लेकिन वास्तविक अंतर क्या है, और मुझे कौन सा पसंद करना चाहिए?
किसी निर्देशिका के प्रति सहानुभूति अलग-अलग परिणामों को देती है, 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
कार्यक्रम के व्यवहार के बारे में है ।
1) यदि आप ऐसा करते हैं ls -l $dir
जहां $ dir वास्तव में एक सिम्लिंक है, तो आपको सिम्लिंक के बारे में जानकारी मिलती है।
2) यदि आप ऐसा करते हैं ls -lL $dir
जहां $ dir एक डायरेक्टरी के लिए एक सहानुभूति है, तो आपको टारगेट डायरेक्टरी के बारे में जानकारी मिलती है।
3) यदि आप ऐसा करते हैं, तो ls -l $dir/.
यह सिम्लिंक को अनुसरण करने के लिए मजबूर करता है और लक्ष्य निर्देशिका के बारे में जानकारी प्रदान करता है।
4) यदि आप करते हैं ls -l $dir/
, तो परिणाम # 1 के समान हो सकते हैं या # 3 के समान हो सकते हैं, जिसके आधार पर ls
इसका उपयोग किया जा रहा है। मैं Solaris के पुराने संस्करण का उपयोग # 1 की तरह कर रहा था और लिनक्स द्वारा # 3 की तरह इसे करने से आश्चर्यचकित था।
और मुझे कौन सा पसंद करना चाहिए?
स्लैश को पीछे किए बिना यदि आप चिंतित हो सकते हैं कि क्या कोई निर्देशिका नाम एक निर्देशिका के लिए एक सहानुभूति बनाम एक वास्तविक निर्देशिका है।
यदि आप निर्देशिका के बजाय निर्देशिका में फ़ाइलों के बारे में अधिक चिंतित हैं, तो स्लैश ट्रैशिंग के साथ।