hash
एक बैश बिल्ट-इन कमांड है। हैश टेबल की एक विशेषता है bash
कि यह $PATH
हर बार जब आप स्मृति में परिणाम कैशिंग द्वारा एक आदेश टाइप करने से रोकता है । तालिका उन घटनाओं पर साफ़ हो जाती है जो स्पष्ट रूप से परिणामों को अमान्य करती हैं (जैसे संशोधित करना $PATH
)
hash
आदेश सिर्फ आपको लगता है कि प्रणाली (जो भी कारण के लिए यदि आपको लगता है कि आप की जरूरत है) के साथ कैसे सहभागिता है।
कुछ उपयोग के मामले:
जैसे आपने देखा कि यह कितनी बार प्रिंट करता है, अगर आप इसे बिना किसी तर्क के टाइप करते हैं तो कौन सी कमांड आती है। यह आपको बता सकता है कि आप कौन सी आज्ञाओं का सबसे अधिक उपयोग करते हैं।
आप इसे गैर-मानक स्थानों में निष्पादन योग्य याद रखने के लिए भी उपयोग कर सकते हैं।
उदाहरण:
[root@policyServer ~]# hash -p /lol-wut/whoami whoami
[root@policyServer ~]# whoami
Not what you're thinking
[root@policyServer ~]# which whoami
/usr/bin/whoami
[root@policyServer ~]# /usr/bin/whoami
root
[root@policyServer ~]#
जो उपयोगी हो सकता है यदि आपके पास बस एक निर्देशिका में एक निष्पादन योग्य है जिसके बाहर $PATH
आप केवल उस निर्देशिका में सब कुछ शामिल करने के बजाय नाम लिखना चाहते हैं (यदि आप इसे जोड़ते हैं तो इसका प्रभाव होगा $PATH
)।
एक उपनाम आमतौर पर यह भी कर सकता है, हालांकि और जब से आप वर्तमान शेल के व्यवहार को संशोधित कर रहे हैं, यह उन कार्यक्रमों में मैप नहीं किया जाता है जिन्हें आप बंद करते हैं। अकेला निष्पादन योग्य के लिए एक सहानुभूति शायद यहाँ बेहतर विकल्प है। hash
यह करने का एक तरीका है।
- आप इसका उपयोग अन-याद रखने वाले फ़ाइल पथों के लिए कर सकते हैं। यह उपयोगी है अगर एक नया निष्पादन योग्य पहले की
PATH
निर्देशिका में पॉप अप करता है या mv
कहीं और जाता है और आप बैश को बाहर जाने के लिए बाध्य करना चाहते हैं और अंतिम स्थान के बजाय इसे ढूंढना याद रखते हैं।
उदाहरण:
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# cp /bin/ls /lol-wut
[root@policyServer ~]# hash
hits command
1 /bin/cp
1 /bin/ls
[root@policyServer ~]# hash -d ls
[root@policyServer ~]# ls
default.ldif newDIT.ldif notes.txt users.ldif
[root@policyServer ~]# hash
hits command
1 /bin/cp
1 /lol-wut/ls
[root@policyServer ~]#
cp
आदेश के एक नए संस्करण की वजह से ls
निष्पादन योग्य मेरे में पहले दिखाने के लिए $PATH
लेकिन हैश तालिका की एक पर्ज ट्रिगर नहीं किया। मैं हैश तालिका से hash -d
प्रविष्टि के लिए चुनिंदा रूप से शुद्ध करता था ls
। बैश को फिर से देखने के लिए मजबूर किया गया था $PATH
और जब यह किया, तो इसे नए स्थान पर पाया (पहले $ PATH में पहले की तुलना में चल रहा था)।
आप चुनिंदा रूप से इसे $PATH
"व्यवहार से निष्पादन योग्य का नया स्थान ढूंढ सकते हैं, हालांकि:
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# hash ls
[root@policyServer ~]# hash
hits command
0 /lol-wut/ls
[root@policyServer ~]#
आप ज्यादातर ऐसा करना चाहते हैं यदि आप हैश टेबल से कुछ चाहते थे और 100% नहीं थे कि आप लॉगआउट कर सकते थे और फिर सफलतापूर्वक वापस आ सकते थे, या आप अपने शेल में किए गए कुछ संशोधनों को संरक्षित करना चाहते थे।
बासी मैपिंग से छुटकारा पाने के लिए, आप भी कर सकते हैं hash -r
(या export PATH=$PATH
) जो प्रभावी रूप से बस बैश की पूरी हैश टेबल को शुद्ध करता है।
इस तरह की बहुत कम स्थितियाँ हैं। मुझे नहीं पता कि मैं इसे "सबसे उपयोगी" कमांडों में से एक कहूंगा लेकिन इसके कुछ उपयोग मामले हैं।