पता लगाने / कहाँ / के बीच क्या अंतर है


13

कमान locate whereisऔर whichकमान के बीच बुनियादी अंतर क्या है ।

बुनियादी अंतर यह है कि मैंने देखा कि है locateरेखांकित सभी पूरे फाइल सिस्टम में संबंधित फ़ाइल नाम, जबकि whereisऔर whichआदेशों केवल स्थापित आवेदन का स्थान (फ़ाइल की प्रणाली / स्थानीय पता) दे। मेरा अवलोकन कितना सही है?

इन आदेशों को आंतरिक रूप से कैसे लागू किया जाता है। locateडैश खोज की तुलना में इतनी तेजी से काम क्यों होता है , जबकि locateपूरे फाइलसिस्टम पदानुक्रम में लक्ष्य स्ट्रिंग से मेल खाते हुए एक विशेष फ़ाइल नाम की खोज करनी है?


2
और किस बारे में type? : पी
जेम्समस्टोन

@jamesmstone आपका क्या मतलब है type, कृपया विस्तृत करें
चिन्मय बी

2
क्षमा करें, मैं सिर्फ आपके प्रश्न को जोड़ने का प्रयास कर रहा था। typeएक अन्य आदेश है जो लगता है (मेरी आँखों के लिए) आपके द्वारा उल्लेखित लोगों के लिए एक समान काम करता है।
जेम्समस्टोन

@jamesmstone मुझे नहीं लगता कि किसी भी प्रकार का कमांड है जो मेरे सिस्टम में काम करता है। मैं typeकमांड के लिए कोई भी मैनुअल या जानकारी पृष्ठ खोजने में असमर्थ हूं । मैंने कोशिश की man typeऔर info type
चिन्मय बी

हम्म मुझे आश्चर्य है कि ... क्या आप बैश का उपयोग कर रहे हैं?
jamesmstone

जवाबों:


17

whichकार्यक्रम के द्विआधारी निष्पादन योग्य पाता है (यदि यह आपके पेट में है)। man whichअधिक स्पष्ट रूप से बताते हैं:

जो फ़ाइलों (या लिंक) के पथनाम को लौटाता है, जिसे वर्तमान परिवेश में निष्पादित किया जाएगा, उसके तर्क एक सख्त POSIX-अनुरूप शेल में कमांड के रूप में दिए गए थे। यह तर्कों के नाम से मेल खाती निष्पादन योग्य फ़ाइलों के लिए PATH की खोज करके करता है। यह प्रतीकात्मक लिंक का पालन नहीं करता है।

whereisकिसी प्रोग्राम के लिए बाइनरी, सोर्स और मैन पेज फाइल्स ढूंढता है। उदाहरण के लिए

$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

आप करने के लिए तर्क के रूप में इन आदेशों के उत्पादन में पास करके अतिरिक्त विवरण प्राप्त कर सकते हैं ls -lयाfile

$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8

$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8

locateवास्तव में उन सभी फ़ाइलों को ढूँढता है जिनके पैटर्न उनके पथ में कहीं भी निर्दिष्ट हैं। आप इसे केवल फाइलों और निर्देशिकाओं को खोजने के लिए कह सकते हैं जिनके नाम (पूर्ण पथ के बजाय) में -bविकल्प के साथ पैटर्न शामिल है , जो आमतौर पर आप चाहते हैं, और एक कम अक्षर सूची देता है।

locateयह तेज है क्योंकि यह एक द्विआधारी डेटाबेस का उपयोग करता है जो समय-समय पर अद्यतन (एक बार दैनिक, द्वारा cron) हो जाता है। हाल ही में जोड़ी गई फ़ाइलों को चलाकर सुनिश्चित करने के लिए आप इसे स्वयं अपडेट कर सकते हैंsudo updatedb

इसके बारे में एक और बात locate- यह परवाह नहीं करता है कि फाइलें अभी भी मौजूद हैं या नहीं, इसलिए हाल ही में हटाए गए फ़ाइलों को खोजने से बचने के लिए, उपयोग करें -e। अक्सर मैं भी पाइप करता हूं lessक्योंकि सूची लंबी हो सकती है। आमतौर पर मैं करता हूं:

sudo updatedb && locate -b -e gimp | less

यूनिटी का डैश कैसे काम करता है, इसे यहाँ बताया गया है - यह Zeitgeist का उपयोग इंडेक्स सिस्टम फाइलों में करता है और उपयोग पैटर्न से सीखता है, और अन्य एप्लिकेशन को इस डेटा का उपयोग करने में सक्षम बनाता है, इसलिए यह बहुत अधिक काम कर रहा है locate


क्या आप डैश की तुलना कर सकते हैं और कमांड प्रदर्शन और कार्यान्वयन विवरण का पता लगा सकते हैं? बाइनरी डेटाबेस का अपडेशन सिस्टम में किसी भी नई फ़ाइल के निर्माण के बाद किया जाना चाहिए, क्या ऐसा नहीं है कि यह अवधि अनिश्चित रूप से सही होगी या इसे सिस्टम प्रक्रियाओं द्वारा प्रबंधित किया जाता है?
चिन्मय बी

2
@ क्रिएट डेटाबेस को स्वचालित रूप से अपडेट करने का काम क्रोन द्वारा किया जाता है, प्रति दिन एक बार। जब आप कुछ स्थापित करते हैं, तो आप तुरंत फ़ाइलों को नहीं ढूँढ सकते locate। डैश पूरी तरह से अलग सूचकांक का उपयोग करता है - धीमी क्योंकि यह अधिक सामान करता है (मैंने अपना उत्तर संपादित किया)
ज़ाना

1
तो योग का पता लगाने के लिए उपयोगी और अधिक शक्तिशाली है जो या जहां से लेकिन गूंगा है, जबकि पानी का छींटा अधिक शक्तिशाली है और मशीन सीखना है। और sudo updatedbआपके आदेश के लिए धन्यवाद बहुत उपयोगी नहीं है पता है कि हालांकि मैं नियमित रूप से इस्तेमाल किया।
चिन्मय बी

@Creator हां, आपने इसे बेहतर बना दिया :) खुश कि यह मदद की
Zanna

0

केवल

$ which samba

कौन सी कमांड पाथ सेटिंग्स के माध्यम से नीचे सूचीबद्ध कार्यक्रमों की सूची खोजती है

$ whereis samba

जिसमें कमांड उन कार्यक्रमों की भी खोज करता है जो PATH सेटिंग में मौजूद नहीं हैं

$locate samba

फ़ाइल नाम से फ़ाइलें भी ढूँढता है, लेकिन निर्देशिका संरचना को खोजता नहीं है, लेकिन केवल एक डेटाबेस जिसे अपडेटेड द्वारा तैयार किया गया है। इसके कारण पता लगाने की तुलना में तेजी है, लेकिन कम सटीक है। उदाहरण:

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