सवाल कमांड लाइन के माध्यम से प्रतीकात्मक लिंक लक्ष्य का पता लगाएं


कहें कि मैंने एक प्रतीकात्मक लिंक स्थापित किया है:

ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt

क्या लक्ष्य देखने का कोई तरीका है myothertextfile.txt कमांड लाइन का उपयोग कर रहा है?


105
2017-10-19 18:36


मूल




जवाब:


उपयोग -f canonicalized संस्करण मुद्रित करने के लिए ध्वज। उदाहरण के लिए:

readlink -f /root/Public/myothertextfile.txt

से man readlink:

-f, --canonicalize
      canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist

142
2017-10-19 18:42



जैसा कि सुझाव दिया गया है एक और सवाल, आप उपयोग करना चाह सकते हैं readlink -f। - Denilson Sá Maia
यह मैक ओएस एक्स पर काम करने के लिए, brew install coreutils। यह पत्र के साथ prefixed आदेशों के बुनियादी gnu संस्करण स्थापित करता है g, अर्थात। greadlink -f somefile - Mike D
-f स्विच के साथ, कमांड मेरे मामले में कुछ भी नहीं देता .. - sotn
-F का उपयोग करके मुझे वह जानकारी दी जो मैं चाहता था, यानी एकाधिक सिम्लिंक को हल करना और अंतिम लक्ष्य दिखा रहा हूं। - isapir


रीडलिंक वह आदेश है जिसे आप चाहते हैं। आपको कमांड के लिए मैन पेज को देखना चाहिए। क्योंकि यदि आप वास्तविक फ़ाइल के प्रतीकात्मक लिंक की एक श्रृंखला का पालन करना चाहते हैं, तो आपको -e या -f स्विच की आवश्यकता है:

$ ln -s foooooo zipzip   # fooooo doesn't actually exist
$ ln -s zipzip zapzap

$ # Follows it, but doesn't let you know the file doesn't actually exist
$ readlink -f zapzap
/home/kbrandt/scrap/foooooo

$ # Follows it, but file not there
$ readlink -e zapzap

$ # Follows it, but just to the next symlink
$ readlink zapzap
zipzip

18
2017-10-19 19:03



पहले जवाब के साथ कुछ भी गलत नहीं है, लेकिन यह एक और अधिक पूर्ण और सहायक है। - Mike S


यह भी काम करेगा:

ls -l /root/Public/myothertextfile.txt

परंतु readlink पार्सिंग के बजाय स्क्रिप्ट में उपयोग के लिए प्राथमिकता दी जाएगी ls


4
2017-10-19 19:02





यदि आप लिंक के स्रोत और गंतव्य को दिखाना चाहते हैं, तो कोशिश करें stat -c%N files*। जैसे

$ stat -c%N /dev/fd/*
‘/dev/fd/0’ -> ‘/dev/pts/4’
‘/dev/fd/1’ -> ‘/dev/pts/4’

पार्सिंग के लिए यह अच्छा नहीं है (उपयोग करें readlink इसके लिए), लेकिन यह अव्यवस्था के बिना लिंक नाम और गंतव्य दिखाता है ls -l

-c लिखा जा सकता है --format तथा %N का अर्थ है "प्रतीकात्मक लिंक अगर dereference के साथ उद्धृत फ़ाइल नाम"।


4
2017-09-29 17:44





readlink एक अच्छी बात है, लेकिन जीएनयू-विशिष्ट और गैर क्रॉस प्लेटफ़ॉर्म। मैं क्रॉस प्लेटफार्म स्क्रिप्ट लिखता था /bin/sh, इसलिए मैं कुछ ऐसा उपयोग करता हूं:

 ls -l /root/Public/myothertextfile.txt | awk '{print $NF}'

या:

 ls -l /root/Public/myothertextfile.txt | awk -F"-> " '{print $2}'

लेकिन इन्हें विभिन्न प्लेटफॉर्म पर परीक्षण करने की आवश्यकता है। मुझे लगता है कि वे काम करेंगे, लेकिन 100% निश्चित नहीं है ls आउटपुट स्वरूप।


2
2018-04-17 21:35





यदि आप उपयोग नहीं कर सकते हैं readlink, फिर परिणाम का विश्लेषण ls -l इस तरह किया जा सकता है।

सामान्य परिणाम होगा:

ls -l /root/Public/myothertextfile.txt
lrwxrwxrwx 1 root root 30 Jan  1 12:00 /root/Public/myothertextfile.txt -> /root/Public/mytextfile.txt

तो हम "->" से पहले सब कुछ बदलना चाहते हैं और तीर शामिल है। हम उपयोग कर सकते थे sed इसके लिए:

ls -l /root/Public/myothertextfile.txt | sed 's/^.* -> //'
/root/Public/mytextfile.txt

1
2017-09-02 08:25





ll या ls -l निर्देशिका प्रतीकों को सूचीबद्ध करना चाहिए, जिसमें आपके प्रतीकात्मक लिंक और इसका लक्ष्य शामिल है

cd -P /root/Public/myothertextfile.txt (आपके मामले में) मूल पथ को इंगित करना चाहिए


0
2018-05-02 13:48