लिनक्स में पता लगाने और जो के बीच अंतर


27

locateऔर whichलिनक्स में क्या अंतर है ?

जब मैं उपयोग locate mentorकरता हूं तो यह सभी मेंटर को सूचीबद्ध करता है, लेकिन जब मैंने इसका उपयोग किया तो which mentorवह कहता है "नो मेंटर इन ..." - इसका क्या मतलब है?


इसे संबंधित देखें unix.stackexchange.com/a/60208/84427
वाक्य

whereऔर भी हैं whereis
बजे जन तोंजर

बैश में, पसंद करें type -all acommand:। और अगर मैं आपके प्रश्न के पीछे XYProblem पढ़ता हूं: आपके पास एक आदेश है, तो आप इसे पता लगाकर देख सकते हैं, लेकिन इसे निष्पादित नहीं कर सकते? फिर PATH को संपादित करें, या तो आपके विशिष्ट उपयोगकर्ता की ~/.profileफ़ाइल में, या यदि आप आश्वस्त हैं कि आप जानते हैं कि क्या करना है, वैश्विक /etc/profileफ़ाइल में [चेतावनी: आप सिस्टम स्क्रिप्ट तोड़ सकते हैं (और संभवतः बहुत से ओएस) यदि आप गलत रास्ता जोड़ते हैं। $ का पथ / / / प्रोफ़ाइल ... (पूर्व: आमतौर पर पाया गया कमांड वाले पथ)। केवल चर के अंत में जोड़ना पसंद करते हैं। और कृपया उस PATH में ::या .कहीं भी मत डालो ।
ओलिवियर दुलक

जवाबों:


45

बीच क्या अंतर है locateऔर which?

locate फ़ाइल का पता लगाने के लिए पहले से निर्मित डेटाबेस का उपयोग करता है।

locateupdatedb(8) द्वारा तैयार एक या एक से अधिक डेटाबेस पढ़ता है और मानक आउटपुट के कम से कम एक पैटर्न से मेल खाता नाम लिखता है, एक पंक्ति में।

स्रोत का पता लगाएं (1) - लिनक्स मैन पेज

updatedblocate(1) द्वारा उपयोग किए जाने वाले डेटाबेस को बनाता है या अपडेट करता है । यदि डेटाबेस पहले से मौजूद है, तो इसका डेटा पुन: उपयोग करने वाली निर्देशिकाओं से बचने के लिए पुन: उपयोग किया जाता है जो परिवर्तित नहीं हुए हैं।

updatedbcronडिफ़ॉल्ट डेटाबेस को अपडेट करने के लिए (8) दैनिक रूप से चलाया जाता है ( /var/lib/mlocate/mlocate.db)

स्रोत अद्यतन (8) - लिनक्स मैन पेज


whichPATHपर्यावरण चर में निर्देशिकाओं में इसे खोजकर एक निष्पादन योग्य फ़ाइल की तलाश करता है।

whichएक या अधिक तर्क लेता है। अपने प्रत्येक तर्क के लिए यह stdoutनिष्पादन योग्य के पूर्ण पथ पर प्रिंट करता है जिसे निष्पादित किया जाता था जब यह तर्क शेल प्रॉम्प्ट में दर्ज किया गया था। यह पर्यावरण चर में सूचीबद्ध निर्देशिकाओं में एक निष्पादन योग्य या स्क्रिप्ट की खोज करके करता है PATH

bash(1) के रूप में एक ही एल्गोरिथ्म का उपयोग करना ।

स्रोत जो (1) - लिनक्स मैन पेज


locate mentorमेंटर को सूचीबद्ध करता है, लेकिन which mentorकहता है "नो मेंटर इन ..."

इसका क्या मतलब है?

आपके पास कुछ फाइलें हैं mentorजिनका नाम locateडेटाबेस में पाया जा सकता है ।

आपके पास एक निष्पादन योग्य फ़ाइल या स्क्रिप्ट नहीं है जो mentorआपके नाम पर है PATH


2
"अपडेटेड" - यह जानना अच्छा है कि यह केवल माइक्रोसॉफ्ट नहीं है जो चीजों के लिए अत्यधिक गैर-विशिष्ट नामों के साथ आता है। (Win32 में, DeleteObjectGDI ऑब्जेक्ट को हटाता है, CloseHandleकर्नेल हैंडल को बंद करता है, इसी तरह DB को updatedbअपडेट करता है locate)
user253751

"जो" इस घटना में भी विशेष रूप से उपयोगी है कि आपके पास अपने पथ में विभिन्न स्थानों पर किक करने वाले एक ही कार्यक्रम के कई संस्करण हो सकते हैं, इसलिए यह आपको बताता है कि जब आप कमांड चलाते हैं तो वास्तव में कौन सा निष्पादित होता है। अप्रत्याशित व्यवहार का निदान करने से पहले यह मेरे लिए मददगार रहा है - उदाहरण के लिए, इसने मुझे यह महसूस करने में मदद की कि मैंने अपने सिस्टम पर एक उपयोगिता के मैन्युअल रूप से स्थापित संस्करण को छोड़ दिया है, जैसे कि यह पैकेज प्रबंधक द्वारा स्थापित संस्करण को ओवरराइड कर रहा था।
कार्टर

11

whichएक कमांड का पता लगाना है ( whichमौजूदा वातावरण में निष्पादित फ़ाइलों / लिंक का एक पथ नाम देता है)

locateनाम से फाइलें ढूंढना है ( locateद्वारा तैयार एक या एक से अधिक डेटाबेस को पढ़ता है updatedbऔर कम से कम एक पैटर्न के लिए स्टेंडर्ड आउटपुट, प्रति पंक्ति एक से मेल खाता नाम लिखता है)


2
कृपया अपने स्रोतों के लिए अटेंशन प्रदान करें - आपके उत्तर में विवरण उन उपयोगिताओं के लिए सीधे मैन पेज से लिए गए हैं।
मोनिका iamnotmaynard

5

locateडिफ़ॉल्ट रूप से एक ग्लोब पैटर्न लेता है (रेगेक्स पैटर्न का भी उपयोग किया जा सकता है) और /var/lib/mlocate/mlocate.dbपैटर्न के मिलान वाले किसी फ़ाइल नाम के लिए डेटाबेस की खोज करता है ।

whichPATHपर्यावरण चर द्वारा व्याख्या की गई निर्देशिकाओं में एक कमांड के पूर्ण पथ की खोज करने के लिए एक कमांड है ।

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