बाश में पाथ कैसे काम करता है?

How Does Path Work Bash



जब आप लिनक्स टर्मिनल में एक कमांड टाइप कर रहे होते हैं, तो आप आम तौर पर एक निश्चित कार्य करने के लिए एक प्रोग्राम को कॉल कर रहे होते हैं, उदाहरण के लिए, रास , सीडी , आर एम , एमकेडीआईआर , आदि। ये सभी प्रोग्राम फाइल सिस्टम में कहीं स्थित हैं, है ना? बैश कैसे जानता है कि ये कार्यक्रम कहां हैं?

यहाँ पर्यावरण चर खेल में आते हैं, विशेष रूप से PATH चर। यह चर बैश को यह बताने के लिए ज़िम्मेदार है कि उन कार्यक्रमों को कहाँ देखना है। आइए देखें कि PATH कैसे काम करता है और PATH को कैसे देखें/संशोधित करें।







पर्यावरण चर और $PATH

शेल शब्दावली में, पर्यावरण एक ऐसा क्षेत्र है जो हर बार सत्र शुरू होने पर शेल बनाता है। पर्यावरण के प्रबंधन के लिए, पर्यावरण के विभिन्न भागों को दर्शाने वाले पर्यावरण चर हैं। चर का मान स्ट्रिंग, निर्देशिका स्थान, मान या अन्य हो सकता है।



PATH एक ऐसा पर्यावरण चर है जो कुछ निर्देशिकाओं का ट्रैक रखता है। डिफ़ॉल्ट रूप से, PATH चर में निम्नलिखित स्थान होते हैं।



  • /usr/बिन
  • /usr/sbin
  • /usr/स्थानीय/बिन
  • /usr/स्थानीय/sbin
  • /पूर्वाह्न
  • /sbin
  • / स्नैप / बिन (यदि स्नैप स्थापित है)

देखना चाहते हैं कि वर्तमान में PATH के तहत कौन सी निर्देशिका पंजीकृत हैं? एक टर्मिनल को फायर करें और निम्न कमांड चलाएँ।





$फेंक दिया $पथ

यहाँ, $ चिह्न एक चर को निरूपित करने के लिए है। NS फेंक दिया कमांड पाथ वेरिएबल के मान को प्रिंट करता है।



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

उदाहरण के लिए, आइए के साथ परीक्षण करें फेंक दिया आदेश। यहाँ, मैं एक इको कमांड चला रहा हूँ।

$फेंक दियानमस्ते दुनिया!

की निष्पादन योग्य फ़ाइल कहाँ है फेंक दिया ? पता लगाने के लिए अगला कमांड चलाएँ।

$कौन फेंक दिया

जैसा कि हम देख सकते हैं, फेंक दिया निष्पादन योग्य /usr/bin/echo पर स्थित है। कहाँ स्थित है? चलो पता करते हैं।

$कौन कौन

यह /usr/bin/जो पर भी स्थित है। अधिकांश कमांड टूल्स /usr/bin निर्देशिका के अंतर्गत स्थित हैं। यहां, कमांड के निष्पादन योग्य (ओं) को खोजने के लिए स्थानों के लिए बैश PATH से परामर्श कर रहा है।

पथ को संशोधित करना

इससे पहले कि हम PATH के मान को संशोधित करें, इसकी संरचना को समझना महत्वपूर्ण है। PATH का मान जांचने के लिए फिर से कमांड चलाएँ।

$फेंक दिया $पथ

ध्यान दें कि प्रत्येक निर्देशिका को : चिह्न से अलग किया जाता है।

पथ में निर्देशिका जोड़ना

PATH में एक कस्टम निर्देशिका जोड़ने के लिए, हम bashrc फ़ाइल की मदद लेंगे। यह एक विशेष बैश स्क्रिप्ट है जो हर बार एक नया बैश सत्र शुरू होने पर बैश लोड करता है। ध्यान दें कि bashrc फ़ाइल Linux सिस्टम में हर एक उपयोगकर्ता के लिए अद्वितीय है।

टेक्स्ट एडिटर में bashrc फाइल खोलें। यदि bashrc फ़ाइल पहले से मौजूद नहीं है, तो संपादक इसे स्वचालित रूप से बना देगा।

$मैं आया~/.bashrc

यहाँ, यह डिफ़ॉल्ट bashrc है जो Ubuntu के साथ आता है। फ़ाइल के अंतिम भाग पर जाएँ (यदि यह मौजूद है) और निम्न पंक्ति जोड़ें।

$निर्यात पथ='$पथ: / '

यहां, PATH वैरिएबल का नया मान हमारे द्वारा अभी जोड़ी गई नई निर्देशिका के साथ पुराना वैरिएबल होगा।

फ़ाइल को सहेजें और बैश को इसे पुनः लोड करने के लिए कहें।

$स्रोत~/.bashrc

आइए सत्यापित करें कि क्या नया पथ सफलतापूर्वक जोड़ा गया था।

$फेंक दिया $पथ

वोइला! पथ सफलतापूर्वक अपडेट किया गया! अब, बैश निष्पादन योग्य के लिए नया पथ भी खोजेगा। मेरे पास पहले से ही एक स्क्रिप्ट है डेमो.शो डेस्कटॉप पर। आइए देखें कि क्या बैश सटीक स्थान निर्दिष्ट किए बिना इसे कॉल कर सकता है।

$डेमो.शो

हाँ, बैश बिना किसी समस्या के इसे सीधे कॉल कर सकता है।

पथ से निर्देशिका हटाना

PATH से निर्देशिका जोड़ने/निकालने का कोई सीधा तरीका नहीं है। मुझे समझाने दो।

PATH का मान वास्तव में निश्चित होता है। फिर, bashrc ट्रिक के बारे में क्या? Bashrc एक बैश स्क्रिप्ट है जो हर बार सत्र शुरू करने पर बैश लोड करती है। Bashrc में, हमने अभी घोषित किया है कि PATH का नया मान इसका डिफ़ॉल्ट मान और उपयोगकर्ता द्वारा परिभाषित निर्देशिका होगा। अब, हर बार बैश लोड होने पर, यह देखता है कि bashrc PATH का एक नया मान निर्दिष्ट करने के लिए कह रहा है और यही वह करता है।

इसी तरह, यदि हम PATH से किसी निर्देशिका को हटाना चाहते हैं, तो हमें bashrc में PATH का एक अलग मान फिर से असाइन करना होगा ताकि हर बार बैश शुरू होने पर, यह संशोधित मान का उपयोग करे।

आइए इस उदाहरण पर एक नजर डालते हैं। मैं पथ से निर्देशिका ~/डेस्कटॉप को हटाने के लिए तैयार हूं।

$फेंक दिया $पथ | एसईडी -और 'एस/:~/डेस्कटॉप$//'

यदि निर्देशिका/घर/गलत/डीआईआर होगी, तो आदेश इस तरह दिखेगा।

$फेंक दिया $पथ | एसईडी -और 's/:/home/गलत/dir$//'

यहाँ, दिलचस्प हिस्सा sed टूल है। sed . के बारे में और जानें यहां तथा यहां . लंबी कहानी छोटी, sed का उपयोग करके, हम के आउटपुट को संशोधित कर रहे हैं फेंक दिया आदेश। अब, हम इस संशोधित आउटपुट का उपयोग PATH के मान को बदलने के लिए कर सकते हैं।

टेक्स्ट एडिटर में bashrc खोलें और निम्न पंक्तियाँ जोड़ें। मैं जानबूझकर पिछली पंक्तियों को यह साबित करने के लिए रख रहा हूं कि यह काम कर रहा है।

$निर्यात पथ='$(echo $PATH | sed -e 's/:~/Desktop$//')'

वैकल्पिक रूप से, आप मैन्युअल रूप से PATH का मान भी सेट कर सकते हैं। यह एक श्रमसाध्य प्रक्रिया है लेकिन अधिक सीधी और सरल है।

$निर्यात पथ=/usr/स्थानीय/sbin:/usr/स्थानीय/पूर्वाह्न:/usr/सबिन:/usr/पूर्वाह्न:/sbin:/पूर्वाह्न:
/usr/खेल:/usr/स्थानीय/खेल:/चटकाना/पूर्वाह्न

यहां, कमांड का मान PATH को सौंपा जाएगा। फ़ाइल सहेजें और bashrc पुनः लोड करें।

$स्रोत~/.bashrc

आइए परिणाम सत्यापित करें।

$फेंक दिया $पथ

पथ मान अपडेट किया गया है!

अंतिम विचार

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

बैश के लिए सभी पर्यावरण चर देखने के लिए, इस कमांड को चलाएँ। पहला कमांड भाग सभी पर्यावरण चर लौटाएगा और दूसरा भाग आउटपुट को आरोही क्रम में सॉर्ट करेगा।

$env | तरह

अपने बैश अनुभव को मसाला देना चाहते हैं? बैश उपनाम चीजों को तेज करने और मसाला देने का एक अनूठा तरीका प्रदान करते हैं। बैश उपनामों के बारे में और जानें .

आनंद लेना!