readlink -f
होगा :
पुनरावर्ती रूप से दिए गए नाम के प्रत्येक घटक में प्रत्येक सिम्लिंक का अनुसरण करके एक मार्ग को निर्दिष्ट करना; सभी लेकिन अंतिम घटक मौजूद होना चाहिए
which
खोज करेंगे :
पर्यावरण चर PATH में सूचीबद्ध निर्देशिकाओं में एक निष्पादन योग्य या स्क्रिप्ट के लिए bash (1) के समान एल्गोरिथ्म का उपयोग करना
which
परवाह नहीं करता है कि यह क्या पाता है एक सिमिलिंक है या नहीं: बस यह निष्पादन योग्य है। यह गारंटी देता है कि यह जिस मार्ग से प्रिंट करता है वह हमेशा एक निर्देशिका में अंदर होगा PATH
।
आपके सिस्टम पर, के /usr/bin/java
लिए एक सहानुभूति है /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java
। जब आप इस तरह एक साथ दो आदेशों गठबंधन आप स्थानापन्न के उत्पादन which
की कमान लाइन में readlink -f
बनाने के लिए:
readlink -f /usr/bin/java
यही है, which
जहां पाया गया है कि पहली निष्पादन योग्य फ़ाइल java
आपके पास है PATH
, और शेल ने उस पथ को एक तर्क के रूप में डाला है readlink -f
। readlink
तब पथ को देखता है और पाता है कि यह एक प्रतीकात्मक लिंक है , और इसलिए यह उस लिंक (और किसी भी अन्य को पाता है) को वास्तविक फ़ाइल के लिए एक पूर्ण प्रत्यक्ष पथ बनाने के लिए हल करता है।
लगभग सभी उद्देश्यों के लिए, ये पथ आपके लिए विनिमेय होंगे - java
आपके द्वारा उपयोग किए जाने पर सिम्लिंक स्वचालित रूप से वास्तविक पथ पर हल हो जाएगा, और फ़ाइल का संशोधन आपके पैकेज प्रबंधक द्वारा ही किया जाएगा, आपके बजाय, इसलिए आपके पास कभी नहीं होगा इसे देखने के लिए। आप प्रोग्राम को या तो पथ से चला सकते हैं, या बस के साथ java
, और परिणाम बिल्कुल वैसा ही होगा, क्योंकि यह वही वास्तविक निष्पादन योग्य है जो अंत में चलता है।
पैकेज प्रबंधक वास्तविक फ़ाइल को अंदर रखने के बजाय एक सिम्लिंक का उपयोग कर रहा होगा /usr/bin
क्योंकि जेआरई के पास उन फ़ाइलों का एक पूरा सेट है जो असामान्य कॉन्फ़िगरेशन में एक-दूसरे के बगल में होना पसंद करते हैं, और सिम्लिंक पैकेज प्रबंधक को एक सामान्य-दिखने वाली व्यवस्था पेश करने देता है। आप उपयोगकर्ता के रूप में। इसके अंदर कई अन्य फाइलें होंगी जिनसे /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64
निपटने के लिए आपके पास कभी कोई कारण नहीं होगा, और यह सिस्टम की सामान्य लाइब्रेरी व्यवस्था में भाग नहीं लेता है।