"Realpath" और "readlink -f" में क्या अंतर है


68

मैंने realpathकमांड के बारे में बहुत कुछ पढ़ा है और इसे readlink -fअब सुझाए जाने के साथ कैसे चित्रित किया गया है । मैंने कुछ जगहों पर यह भी देखा है कि रीयालथ को पेश करने का कारण रीडिंकल में इस तरह की कार्यक्षमता की कमी के कारण था और एक बार इसे पेश करने के बाद, रियलपैथ की जरूरत नहीं रह गई थी और अधिकांश ओएस विक्रेताओं द्वारा इसका समर्थन बंद कर दिया गया था।

मेरे सवाल का कारण यह है कि मैंने कई लोगों को readlink -fकमांड के रूप में "बहुत ज्यादा समान" की सिफारिश करते देखा है realpath, और यही मुझे परेशान कर रहा है, क्योंकि कोई भी उस "बहुत समान" भाग पर विस्तार से नहीं बताता है। वास्तविक अंतर क्या हैं?

जवाबों:


73

realpathआसपास कई कमांड हैं।

realpathउपयोगिता के चारों ओर एक आवरण है realpathपुस्तकालय कार्यों और कई को पुनः खोज कर दिया गया है बार

डेबियन एक realpathपैकेज को बनाए रखता था ( वुडी के बाद से अलग ) जो 2001 के बाद से पैकेजिंग और प्रलेखन को छोड़कर नहीं बदला है, लेकिन अब इसे चरणबद्ध कर दिया गया है। इस उपयोगिता को हटा दिया गया था क्योंकि अब अधिक मानक विकल्प (GNU और जल्द ही GNU ) हैं, लेकिन उस समय, GNU उपयोगिताओं में भी बिल्कुल नहीं था । यह कार्यान्वयन प्रतीकात्मक लिंक रिज़ॉल्यूशन को रोकने या अशक्त-उत्पादन को रोकने के लिए कुछ का समर्थन करता है । बिजीबॉक्स में अपना स्वयं का कमांड भी शामिल है (जो कोई विकल्प नहीं लेता है)।dwwwreadlinkrealpathreadlinkrealpathoptionsrealpath

GNU Coreutils ने जनवरी 2012 में 8.15 संस्करणrealpath में एक कमांड पेश की । यह बिजीबॉक्स और डेबियन के लिए एक सुसंगत प्रतिस्थापन है , और इसमें GNU के साथ कई विकल्प भी हैं ।realpathreadlink

realpathreadlink -fGNU के समान ही प्रभाव है readlink। जो दो आदेशों को अलग करता है (या इससे विभिन्न realpathकमांड readlink -f) अतिरिक्त विकल्प हैं जो वे समर्थन करते हैं।

जीएनयू realpathको पदावनत नहीं किया गया है; इसके विपरीत समस्या है: यह हर जगह उपलब्ध होने के लिए बहुत नया है। डेबियन अपने पैकेज से जीएनयूrealpath को छोड़ देता थाcoreutils और अपने साथ चिपका लेता था realpath। मुझे नहीं पता कि जीएनयू realpathको ड्रॉप-इन रिप्लेसमेंट क्यों होना चाहिए। डेबियन जेसी और उबंटू 16.04 के रूप में, हालांकि, जीएनयू realpathका उपयोग किया जाता है।

लिनक्स सिस्टम पर, इस समय, आपका सबसे अच्छा तरीका एक पथ को स्पष्ट करने के लिए है जिसमें प्रतीकात्मक लिंक हो सकते हैं readlink -f

BSD सिस्टम में एक readlinkकमांड है, जिसमें GNU की अलग-अलग क्षमताएं हैं readlink। विशेष रूप से, बीएसडी के readlinkपास रास्तों को रद्द करने का विकल्प नहीं है, यह केवल इसके लिए पास किए गए सिमलिंक का पता लगाता है।

readlink, संयोग से, एक ही समस्या थी - यह भी कई बार आविष्कार किया गया था (इस उपयोगिता को जोड़कर नहीं जब यूनिक्स में प्रतीकात्मक लिंक जोड़ा गया था एक अफसोसजनक चूक था)। यह अब कई असंगत झंडों (विशेष रूप से बीएसडी बनाम जीएनयू) के साथ कई कार्यान्वयनों में स्थिर हो गया है।


8
readlink -fGNU से बहुत पहले OpenBSD में था। अब सभी NetBSD, FreeBSD और OpenBSD readlink -f(आपके लिंक में भी इसका उल्लेख है)। realpathएक लंबे समय के लिए FreeBSD और IRIX में रहा है (अगर यह डेबियन में पहले से पता नहीं है)। HPUX और IRIX भी हैं readlink, हालांकि नहीं -frealpathडेबियन प्रयोगात्मक में पैकेज अब coreutils से एक (एक प्रयोग करता है, तो यह चीजों को देखने के लिए टूट जाता है के रूप में) है। गेनू realpathअधिक कार्य करता है readlink -eजबकि जीएनयू एक जैसा है readlink -fइसलिए यह पूर्ण ड्रॉपिन की जगह नहीं है
स्टीफन चेज़लस

2
realpath2002 के बाद से FreeBSD में रहा है। इससे पहले, pwdयह कर रहा था (2000 के बाद से, pwd some-fileकॉल realpath()करेगा file)। डेबियन एक पड़ा है realpathपैकेज 1996 के बाद से IRIX पर एक शायद यह पहले का है हालांकि मैं 1998 में OpenBSD एक जोड़ा कोई सबूत नहीं है अन्य की तुलना में यह IRIX 6.5 में था पाया -fकरने के लिए readlink 1997 मेंGNU readlink2003 में जोड़ा गया था और यह -fशुरू से था ।
स्टीफन चेजलस

2
बहुत बढ़िया सारांश धन्यवाद। डेब्यू के लिए GNU वैरिएंट पर स्विच करने के अनुरोध के लिए एक बेहतर बग पर ध्यान दें। बगेस। Debian.org/730779 यहां तक ​​कि मौजूदा रियलपथ अनुरक्षक चाहता है कि स्विच हो जाए
Pádraig ब्रैडी

1
बहुत बढ़िया जवाब। केवल आरएचईएल के कार्यान्वयन के संदर्भ में याद किया realpath। क्या किसी को पता है कि यह readlink -fसंस्करण से किसी तरह अलग है ?
फेलिप लेओ

1
@ StéphaneChazelas ओह वाह, वास्तव में मेरे उत्तरों में बहुत सारी त्रुटियां। उन्हें इंगित करने के लिए धन्यवाद। क्या आप एक सही उत्तर दे सकते हैं, और मैं उसे हटा दूंगा? (अन्यथा, मैं त्रुटियों को ठीक करूंगा, लेकिन यह मेरी लंबी टूडू सूची से निपटने के लिए और अधिक काम है ...)
गिल्स

17

tl; डॉ readlink -f वापस आ जाएगी 0, जबकि एक मौजूदा निर्देशिका में न के बराबर फ़ाइल के लिए realpathरिटर्न 1। हालाँकि, एक गैर-मौजूद फ़ाइल की readlink -eतरह व्यवहार करेगा realpathऔर वापस आएगा 1(संपादकों को ध्यान दें)।

readlink -f

$ readlink -f non-existent-file
/home/user/non-existent-file
$ echo $?
0

readlink -e

$ readlink -e non-existent-file
$ echo $?
1

realpath

$ realpath non-existent-file
non-existent-file: No such file or directory
$ echo $?
1

readlink -f गैर-मौजूद निर्देशिका के साथ

readlink -f व्यवहार इस बात पर निर्भर करता है कि पथ का कौन सा भाग मौजूद नहीं है।

$ readlink -f /tmp/non-existent-dir/foo
$ echo $?
1

उपलब्धता

readlinkसबसे लिनक्स वितरण के भीतर स्थापित किया गया है। जबकि, realpathअक्सर स्पष्ट रूप से स्थापित होना चाहिए।

संक्षेप में

यदि आप कॉल को बदलना चाहते हैं realpath ...तो उपयोग करें readlink -e ...


211 पर Ubuntu (जीएनयू कोरुटिल्स) 8.21 और रियलपैथ संस्करण 1.19 के साथ परीक्षण किया गया।

( Ed .: @AnthonyGeoghegan ने लिखा है " यह डेबियन संस्करण को संदर्भित करता है realpath। GNU संस्करण realpathव्यवहार के समान हैreadlink -f ")


3
मैंने इस उत्तर को बदल दिया, लेकिन मैं स्पष्ट करना चाहूँगा कि यह डेबियन संस्करण को दर्शाता है realpath। GNU संस्करण realpathजैसा व्यवहार करता है readlink -f
एंथनी जोगेगन

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