CentOS में $ PATH के लिए एक निर्देशिका जोड़ना?


84

हमें अभी-अभी अपना नया सर्वर मिला है और हम उन सभी पर CentOS चला रहे हैं। रूबी एंटरप्राइज संस्करण को सफलतापूर्वक स्थापित करने के बाद, मैं अब /usr/lib/ruby-enterprise/binसर्वर पर डिफ़ॉल्ट रूबी दुभाषिया बनाने के लिए आरईई / बिन (स्थित ) निर्देशिका को जोड़ना चाहूंगा ।

मैंने निम्नलिखित कोशिश की है, जो इसे केवल वर्तमान शेल सत्र में जोड़ता है:

export PATH=/usr/lib/ruby-enterprise/bin:$PATH

सभी उपयोगकर्ताओं के लिए इस निर्देशिका को $ PATH में स्थायी रूप से जोड़ने का सही तरीका क्या होगा । मैं वर्तमान में रूट के रूप में लॉग इन हूं।

अग्रिम में धन्यवाद!

जवाबों:


115

/etc/profileइस तरह की चीजों को संपादित करना एक अच्छा विचार नहीं है , क्योंकि जब भी CentOS इस फाइल के लिए अपडेट प्रकाशित करता है, आप अपने सभी बदलाव खो देंगे। यह वास्तव में क्या /etc/profile.dहै:

# echo 'pathmunge /usr/lib/ruby-enterprise/bin' > /etc/profile.d/ree.sh
# chmod +x /etc/profile.d/ree.sh

लॉग इन करें और अपने (सुरक्षित रूप से) अपडेट किए गए पाथ का आनंद लें:

# echo $PATH
/usr/lib/ruby-enterprise/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# which ruby
/usr/lib/ruby-enterprise/bin/ruby

लॉग-इन वापस करने के बजाय, आप प्रोफ़ाइल पुनः लोड कर सकते हैं:

# . /etc/profile

यह $PATHपरिवर्तनशील को अद्यतन करेगा ।


1
~/.profileएक और वैध विकल्प भी है
Zypher

4
हाँ, एकल उपयोगकर्ता के लिए। लेकिन सवाल सभी उपयोगकर्ताओं के लिए PATH को बदलने के बारे में था ।
माइक

2
@ मायके यह पथ-प्रदर्शक आदेश क्या है?
निकोलाई लेसचोव

@NickolaiLeschov मुझे पूरा यकीन है कि यह सिर्फ $ PATH के लिए एक रास्ता है।
माइक

@NickolaiLeschov यह एक ऐसा फंक्शन है जिसे / etc / प्रोफाइल में परिभाषित किया गया है
CrazyPheel

11

फ़ोमनक की सलाह का पालन करने के बाद /etc/bashrc, मैंने जाँच की , जहाँ मैंने कहा था कि "पर्यावरण का सामान / आदि / प्रोफाइल में चला जाता है।" मैं देखने के लिए आगे बढ़ा /etc/profile, मैंने यह देखा:

pathmunge () {
    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
       if [ "$2" = "after" ] ; then
          PATH=$PATH:$1
       else
          PATH=$1:$PATH
       fi
    fi
}

[...]

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /sbin
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
fi

अपनी समस्या को हल करने के लिए, मैंने बस pathmunge /usr/lib/ruby-enterprise/binif स्टेटमेंट के नीचे जोड़ा । इससे मेरी समस्या हल हो गई।


क्या कोई समझा सकता है कि "$EUID" = "0"इस संदर्भ में क्या मतलब है?
एली

EUID 0 का मतलब है कि उपयोगकर्ता रूट है।
बीबीजा ४२

6
आपको /etc/profile.d का उपयोग करना चाहिए था। नीचे मेरा जवाब देखें।
माइक

कृपया @MikeConigliaro उत्तर को सही मानने पर विचार करें। उसका तरीका सही है। यह उस तरह से काम करने के लिए विकसित किया गया है। /etc/profile.d/फ़ोल्डर में फ़ाइलों पर एक नज़र डालें और आप इसे नोटिस करेंगे। इसके अलावा, जैसा कि उन्होंने कहा, एक सिस्टम अपडेट आपके समाधान को पूर्ववत कर सकता है।
13-14 को कैयो कुन्हा

4

"/ Etc / passwd फ़ाइल को पढ़कर / बिन / लॉगिन का उपयोग करके, एक सफल लॉगिन के बाद एक इंटरेक्टिव लॉगिन शेल शुरू किया गया है। यह शेल इनवोकेशन आम तौर पर / etc / प्रोफाइल और इसके निजी समकक्ष ~ / .bash_profile पर स्टार्टअप पर पढ़ता है।

एक इंटरएक्टिव नॉन-लॉगिन शेल आमतौर पर शेल प्रोग्राम (जैसे, [प्रॉम्प्ट] $ / बिन / बैश) या / bin / su कमांड का उपयोग करके कमांड-लाइन पर शुरू किया जाता है। एक इंटरैक्टिव नॉन-लॉगिन शेल भी टर्मिनल प्रोग्राम के साथ शुरू होता है जैसे कि ग्राफिकल वातावरण में xterm या konsole। इस प्रकार के शेल इनवोकेशन आम तौर पर मूल वातावरण को कॉपी करते हैं और फिर अतिरिक्त स्टार्टअप कॉन्फ़िगरेशन निर्देशों के लिए उपयोगकर्ता की ~ / .bashrc फ़ाइल पढ़ते हैं। " http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile.html

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

रेडहैट पर /etc/profileमुझे यह टिप्पणी मिली:

"सिस्टम विस्तृत उपनाम और फ़ंक्शन / etc / bashrc में जाना चाहिए। व्यक्तिगत पर्यावरण चर और स्टार्टअप प्रोग्राम ~ / .bash_profile में जाना चाहिए। व्यक्तिगत उपनाम और फ़ंक्शन ~ / .bashrc में जाना चाहिए।"

इसलिए यदि आप उपयोगकर्ता आधार पर पर्यावरण चर सेट करना चाहते हैं, तो इसे उपयोगकर्ता .bash_profile फ़ाइल में करें।

.bash_profileमैं पढ़ने के लिए शीर्षक :

"व्यक्तिगत पर्यावरण चर और स्टार्टअप कार्यक्रम।

व्यक्तिगत उपनाम और कार्य ~ / .bashrc में जाना चाहिए। सिस्टम विस्तृत पर्यावरण चर और स्टार्टअप कार्यक्रम / etc / प्रोफाइल में हैं। सिस्टम वाइड एलियासेस और फ़ंक्शंस / etc / bashrc में हैं। "

निष्कर्ष
यदि आप केवल प्रोग्राम को देखने के लिए रूट चाहते हैं, उदाहरण के लिए / sbinमैं रूट को .bash_profileफ़ाइल के रूट में जोड़ दूंगा । लेकिन अगर आप को देखने के लिए हर उपयोगकर्ता चाहता हूँ क्या जड़ विशिष्ट कार्यक्रमों अपने बॉक्स मैं डाल पर स्थापित कर रहे हैं /sbinमें /etc/.profile। अब प्रत्येक उपयोगकर्ता रूट विशिष्ट कार्यक्रमों को देखने और यदि आवश्यक हो तो अधिकारों को बढ़ाने के लिए टैब पूरा करने का उपयोग कर सकता है।

विशेष मामला: SSH
जब ssh को कमांडलाइन के साथ शुरू किया जाता है, तो एक इंटरेक्टिव लॉगिन शेल शुरू किया जाता है। लेकिन इस मामले /etc/profileमें पढ़ा नहीं है। जब मैंने पर्यावरण चर .bash_profileको प्रत्येक उपयोगकर्ता की फ़ाइल में परिभाषित किया, जो ssh के साथ काम करता था।


2

SORRY ने इस प्रश्न का गलत अर्थ निकाला कि निम्नलिखित asnwer एक USER की प्रोफ़ाइल के लिए है, यदि वह किसी की मदद करता है तो उसे छोड़ देता है

संशोधित करें .bash_profile

nano ~/.bash_profile

तब कहीं जाकर आपके द्वारा अलग किए गए पथों को जोड़ / संशोधित किया जा सकता है:

 PATH=$PATH:$HOME/bin:/your/path
 export PATH

फिर अपना प्रोफ़ाइल पुनः लोड करें

source ~/.bash_profile

या लॉगआउट करें और फिर से लॉगिन करें

यदि आप पथ की जाँच करते हैं तो इसमें आपके नए जोड़े गए पथ शामिल होने चाहिए

echo $PATH

1

आप एक .rc फ़ाइल में पर्यावरण चर सेट कर सकते हैं; बैश शेल के लिए (मेरा मानना ​​है कि CentOS में सबसे आम और डिफ़ॉल्ट) प्रत्येक उपयोगकर्ता के पास अपने होम डायरेक्टरी में .bashrc नामक एक फाइल होती है।

इस फ़ाइल को किसी भी एक विशेष उपयोगकर्ता के लिए सेट करने के लिए कमांड PATH = / usr / lib / ruby-Enterprise / bin: $ PATH जोड़ें।

सभी उपयोगकर्ताओं के लिए इसे सेट करने के लिए (जैसा कि आप उल्लेख करते हैं), इसे / etc / bashrc (प्रत्येक उपयोगकर्ता के घर निर्देशिका में डिफ़ॉल्ट .bashrc इस फ़ाइल को स्रोत बनाना चाहिए, लेकिन इसे दोगुना करना चाहिए) में बदल दें।

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