जावा स्थान / usr / बिन / जावा से


20

मैं अपने लिनक्स सिस्टम के भीतर अपना जावा स्थान ढूंढने का प्रयास कर रहा हूं और मुझे यह मिल गया है

[980@b449 ~]$ which java
/usr/bin/java


[980@b449 ~]$ readlink -f $(which java)
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java

2 आज्ञाओं के बीच क्या अंतर है?

जवाबों:


21

कौन सी 2 कमांड? /usr/bin/javaएक नरम (प्रतीकात्मक) लिंक है, /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java
इसमें कोई अंतर नहीं है क्योंकि वे एक ही फ़ाइल हैं।
यदि आप कुछ टाइप करते हैं

ls -l /usr/bin/java

आपको एक परिणाम मिल सकता है जैसे:

lrwxrwxrwx. 1 root root 22 Aug  5 17:01 /usr/bin/java -> /etc/alternatives/java

इसका मतलब है कि आपके सिस्टम पर कई जावा संस्करण हो सकते हैं और डिफ़ॉल्ट को बदलने के लिए विकल्पों का उपयोग कर सकते हैं। अन्यथा आप बस डिफ़ॉल्ट को मैन्युअल रूप से बदलने के लिए लिंक जोड़ और हटा सकते हैं।

प्रतीकात्मक लिंक बनाने के लिए कमांड का उपयोग करें

ln -s /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java /usr/bin/java

या सामान्य रूप में

ln -s <original file> <link to file>

और rmलिंक को हटाने के लिए उपयोग करें क्योंकि आप किसी अन्य फ़ाइल को हटा देंगे।


5

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 -freadlinkतब पथ को देखता है और पाता है कि यह एक प्रतीकात्मक लिंक है , और इसलिए यह उस लिंक (और किसी भी अन्य को पाता है) को वास्तविक फ़ाइल के लिए एक पूर्ण प्रत्यक्ष पथ बनाने के लिए हल करता है।

लगभग सभी उद्देश्यों के लिए, ये पथ आपके लिए विनिमेय होंगे - javaआपके द्वारा उपयोग किए जाने पर सिम्लिंक स्वचालित रूप से वास्तविक पथ पर हल हो जाएगा, और फ़ाइल का संशोधन आपके पैकेज प्रबंधक द्वारा ही किया जाएगा, आपके बजाय, इसलिए आपके पास कभी नहीं होगा इसे देखने के लिए। आप प्रोग्राम को या तो पथ से चला सकते हैं, या बस के साथ java, और परिणाम बिल्कुल वैसा ही होगा, क्योंकि यह वही वास्तविक निष्पादन योग्य है जो अंत में चलता है।

पैकेज प्रबंधक वास्तविक फ़ाइल को अंदर रखने के बजाय एक सिम्लिंक का उपयोग कर रहा होगा /usr/binक्योंकि जेआरई के पास उन फ़ाइलों का एक पूरा सेट है जो असामान्य कॉन्फ़िगरेशन में एक-दूसरे के बगल में होना पसंद करते हैं, और सिम्लिंक पैकेज प्रबंधक को एक सामान्य-दिखने वाली व्यवस्था पेश करने देता है। आप उपयोगकर्ता के रूप में। इसके अंदर कई अन्य फाइलें होंगी जिनसे /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64निपटने के लिए आपके पास कभी कोई कारण नहीं होगा, और यह सिस्टम की सामान्य लाइब्रेरी व्यवस्था में भाग नहीं लेता है।


0

यह सिंगल लाइन कमांड:

which java | xargs readlink -f

आपके लिए काम करेंगे

  • which java आपको देता है अर्थात: /usr/bin/java
  • readlink -fसभी प्रतीकात्मक लिंक के माध्यम से जाता है /usr/bin/java-> /etc/alternatives/java-> /usr/lib/jvm/java-8-oracle/jre/bin/javaऔर पिछले एक रिटर्न।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.