पूरा सिम्कलिन पथ कैसे देखें


128

जब मैं उपयोग कर रहा हूं ls -la symlinkNameया stat symlinkNameनहीं तो सभी मार्ग प्रदर्शित हैं (उदाहरण के लिए ../../../one/two/file.txt)

लिनक्स कमांड क्या है जो पूर्ण पथ को प्रकट करती है?


4
यहाँ एक सावधान रहना चाहिए: जब ls या स्टेट कोई पूर्ण पथ प्रदर्शित नहीं करता - लिंक का कोई पूर्ण पथ नहीं है! यह esp है। जब एक अलग संदर्भ में डिवाइस को माउंट किया जाता है तो महत्वपूर्ण है (जैसे अगर आपके पास सीडी या यूएसबी-स्टिक पर कुछ है या कुछ टूटे हुए एचडी को पुनर्प्राप्त करने का प्रयास करें)। सभी उल्लिखित समाधान (realpath, readlink, ....) घुड़सवार संदर्भ में केवल पूर्ण पथ दिखाते हैं।
फ्लो

जवाबों:


225

realpathसभी linux जायके पर उपलब्ध नहीं है, लेकिन readlinkहोना चाहिए।

readlink -f symlinkName

ऊपर वाले को चाल चलनी चाहिए।

वैकल्पिक रूप से, यदि आपके पास उपरोक्त में से कोई भी स्थापित नहीं है, तो आप निम्न कार्य कर सकते हैं यदि आपके पास अजगर 2.6 (या बाद में) स्थापित है

python -c 'import os.path; print(os.path.realpath("symlinkName"))'

16
यदि OSX का उपयोग करते हैं, -fतो ध्वज को छोड़ दें और फिर यह काम करता है। यानीreadlink symlinkName
जोश डेवनपोर्ट

6
OSX पर -f ध्वज को केवल एक रिश्तेदार पथ देता है
timoxley

2
यह प्रश्न लिनक्स, y'all के बारे में था।
इयान स्टैपलटन कॉर्डैस्को

27

realpath <path to the symlink file> चाल चलनी चाहिए।


man realpathनीचे से पता चलता है कि यह "GNU कोरुटिल्स" का हिस्सा है, जो मुझे पूरा यकीन है कि हमेशा उबंटू पर आता है, इसलिए @IanStapletonCordasco का कहना है कि " realpathसभी लिनक्स स्वादों पर उपलब्ध नहीं है", यह कम से कम उपलब्ध होना चाहिए उबंटू और उबंटू व्युत्पन्न जायके मुझे विश्वास है।
गेब्रियल स्टेपल्स

10

यूनिक्स स्वाद -> ll symLinkName

OSX -> readlink symLinkName

अंतर यह है कि 1 तरीका ब्लिंकिंग तरीके से सिम्पल लिंक पथ को प्रदर्शित करेगा और दूसरा तरीका कंसोल पर इसे बाहर निकाल देगा।


प्रश्न विशेष रूप से पूर्ण / पूर्ण पथ के लिए पूछ रहा था, न कि सापेक्ष पथ (../../file.txt)। ये दोनों उत्तर सापेक्ष पथ देंगे।
वारबीस

3

जानकारी देखने का दूसरा तरीका यह है statकि अधिक जानकारी दिखाई जाएगी। stat ~/.sshमेरी मशीन के प्रदर्शन पर कमान

File: ‘/home/sumon/.ssh’ -> ‘/home/sumon/ssh-keys/.ssh.personal’
  Size: 34          Blocks: 0          IO Block: 4096   symbolic link
Device: 801h/2049d  Inode: 25297409    Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/   sumon)   Gid: ( 1000/   sumon)
Access: 2017-09-26 16:41:18.985423932 +0600
Modify: 2017-09-25 15:48:07.880104043 +0600
Change: 2017-09-25 15:48:07.880104043 +0600
 Birth: -

आशा है कि यह किसी की मदद कर सकता है।


1

आप पूर्ण सिमिलिंक पथ के साथ आउटपुट के बराबर प्राप्त करने के लिए कॉल के awkसाथ उपयोग कर सकते हैं । उदाहरण के लिए:systemreadlinkls

ls | awk '{printf("%s ->", $1); system("readlink -f " $1)}'

जैसे प्रदर्शित करेगा

thin_repair ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_restore ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_rmap ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_trim ->/home/user/workspace/boot/usr/bin/pdata_tools
touch ->/home/user/workspace/boot/usr/bin/busybox
true ->/home/user/workspace/boot/usr/bin/busybox

ls इसे बिना रीडिंक के कर सकते हैं; बस उपयोग करें ls -l। यह भी बिल्कुल भी काम नहीं करता है, यह निर्देशिका (गैर-लिंक) में सब कुछ पर करने की कोशिश करता है और यदि आपके एलएस को पूरी तरह से टूटने वाले रंगों का उपयोग करने के लिए कॉन्फ़िगर किया गया है। बस उपयोग करेंfind . -maxdepth 1 -type l -ls | awk '{print $11 "\t" $12 "\t" $13}'
हैशबोर्न
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.