सभी के लिए वैश्विक पर्यावरण चर निर्धारित करना


17

अगर मैं एक चर सेट करता हूं /etc/environment, तो यह केवल व्यवस्थापकों पर लागू होता है sudo su

मैं सभी को लागू करने के लिए चर कैसे प्राप्त कर सकता हूं? खासकर जब वे टर्मिनल में हों? क्या सेटिंग /etc/enviromentबैश में लागू नहीं होती है?

जवाबों:


13

/etc/environmentअद्यतन केवल अगले सत्र पर काम करेंगे, यह स्वतः ही पुनः लोड नहीं है।

इसका मतलब है कि आप इसे उन सत्रों के लिए नहीं बदल सकते जो पहले ही अन्य उपयोगकर्ताओं के लिए शुरू हो चुके हैं।

यदि आप जो कुछ भी चाहते हैं उसे "पुनः लोड" करना चाहते हैं, तो /etc/environmentआपको निम्नलिखित कमांड की आवश्यकता होगी:

source /etc/environment

लेकिन फिर से यह केवल आपके वर्तमान सत्र के लिए काम करेगा, अन्य उपयोगकर्ता तब तक प्रभावित नहीं होंगे जब तक कि वे एक नया सत्र शुरू नहीं करते हैं या अपने स्वयं के सत्र में उपरोक्त आदेश चलाते हैं।


4

टी एल; डॉ

ये कॉन्फिग्रेशन फ़ाइलें कि क्या वैश्विक ( या) /etc/environment, /etc/profileया उपयोगकर्ता-विशिष्ट ( ) ~/.profile, ~/.bashrcकेवल अगले लॉगिन / सत्र पर संसाधित होती हैं।

वैश्विक फ़ाइलें सभी उपयोगकर्ताओं (न केवल रूट) पर लागू होते हैं ... लेकिन आप परिवर्तन वातावरण में परिलक्षित देखने के लिए अपनी प्रवेश सत्र को पुनः आरंभ करने की है। यह suआपके द्वारा देखे गए के रूप में ... या लॉग आउट करके या रीबूट करके कॉल किया जा सकता है । आप suएक गैर-रूट उपयोगकर्ता के लिए कर सकते हैं और आप देखेंगे कि उनके पास पर्यावरण परिवर्तन भी हैं।

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

वैश्विक पर्यावरण

जैसा कि किसी और ने उल्लेख किया है, आपको बदलावों के लिए रिबूट या लॉगआउट / लॉगिन की आवश्यकता है /etc/profile, /etc/profile.d/*.shऔर /etc/environmentउठाया जाना है।

ऐसा इसलिए है क्योंकि ये फ़ाइलें वैश्विक वातावरण को निर्दिष्ट करती हैं ... वे केवल एक बार लॉगिन पर चलती हैं और इसलिए मौजूदा लॉगिन / सत्र उन फ़ाइलों में परिवर्तन को प्रतिबिंबित नहीं करेंगे। एक रिबूट हर किसी के लॉगिन को "रीसेट" करता है जो उन्हें नए वातावरण को चुनने के लिए मजबूर करता है।

अपने स्वयं के लॉगिन सत्र में आप source /etc/profileरिबूट या लॉगआउट / लॉगिन के बिना परिवर्तनों को लेने के लिए कर सकते हैं ... लेकिन यह केवल आपके सत्र और आपके सत्र के भीतर चलने वाली नई प्रक्रियाओं को प्रभावित करेगा।

ध्यान दें कि इसमें कोई वैरिएबल इंटरपोलेशन नहीं है /etc/environment(यह एक स्क्रिप्ट नहीं है) इसलिए आप PATH="$PATH:/my/custom/path"वहां सामान नहीं कर सकते ।

ध्यान दें कि /etc/profileऔर /etc/profile.d/*.shकेवल लॉगिन सत्रों के लिए चलाए जाते हैं और इसलिए कॉन्फ़िगर किया गया वातावरण वहां गैर-लॉगिन खातों के लिए उपलब्ध नहीं होगा (अर्थात यदि आप एक डीमन प्रक्रिया के लिए एक पर्यावरण चर सेट करने का प्रयास कर रहे हैं जो आपके लॉगिन शेल के बाहर चलता है)।

नोट है कि bashrcपूरे लॉगिन खोल के लिए लेकिन बैश के गोले और उप प्रक्रियाओं के लिए पर्यावरण की स्थापना के लिए उपयोगी नहीं है ... इसलिए के लिए सच "वैश्विक" या "उपयोगकर्ता वैश्विक" आप शायद में अपने वातावरण config रखना चाहते हैं /etc/profileया /etc/profile.d/my-custom-env.shया ~/.profile। अन्य गोले (जैसे zsh) की अपनी स्वयं की कॉन्फिग फाइलें होती हैं और साथ ही bashrc में नॉन-बैश-स्पेसिफिक एनवायरनमेंट कॉन्फिगरेशन के कारण समस्याएँ या भ्रम पैदा हो जाता है, यदि आप गोले को स्विच करते हैं (या अलग शेल के उपयोग से सिस्टम पर अन्य उपयोगकर्ता हैं)।

एक नया कार्यक्रम स्थापित करना एक सामान्य समस्या है और इसे ठीक से चलाने के लिए कुछ वातावरण को निर्दिष्ट करने की आवश्यकता है। वैश्विक पर्यावरण एक उत्तर है, लेकिन अक्सर एक रिबूट की आवश्यकता होगी जो सर्वर और ऑटो-प्रोविजनिंग / कॉन्फ़िगरेशन मामलों का उपयोग करने के लिए आदर्श नहीं है। आपको अपने आप से पूछना चाहिए कि क्या यह वास्तव में एक चर है जिसे सिस्टम पर सभी उपयोगकर्ताओं और कार्यक्रमों की आवश्यकता है या यदि यह वास्तव में सिर्फ एक ऐसी चीज है जो आपको किसी विशिष्ट उपयोगकर्ता या कार्यक्रम को उपलब्ध कराने की आवश्यकता है।

विशिष्ट उपयोगकर्ता के लिए

उपयोगकर्ता के घर निर्देशिका (जैसे ~/.profile ~/.bashrc) में प्रोफ़ाइल या बैशकेक में पर्यावरण को शामिल करें , इस पर निर्भर करता है कि क्या आप इंटरैक्टिव, लॉगिन गोले, बैश-केवल, आदि के लिए यह चाहते हैं।

ध्यान रखें कि इसके लिए उपयोगकर्ता के सत्र के भीतर सभी प्रक्रियाओं के लिए उपलब्ध होने वाले पर्यावरण परिवर्तनों के लिए रिबूट या लॉगआउट / लॉगिन की भी आवश्यकता होती है। उपयोगकर्ता कर सकता है source ~/.profile... लेकिन यह एक टर्मिनल के भीतर किया जाता है और केवल उस टर्मिनल सत्र और बच्चे की प्रक्रियाओं के भीतर पर्यावरण को अद्यतन करता है ... जरूरी नहीं कि उपयोगकर्ता के संपूर्ण लॉगिन वातावरण के लिए।

एक विशिष्ट कार्यक्रम के लिए कुछ विकल्प हैं।

एक कमांड चलाने के दौरान पर्यावरण प्रदान करना है:

VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE" /path/to/program --opt1 --op2

क्या आप systemd उपयोग कर रहे हैं यह भी के तहत इकाई / सेवा फ़ाइल में पर्यावरण निर्दिष्ट कर सकते हैं [Service]साथEnvironment=VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE

यह विकल्प आपको क्लिंकी लग सकता है क्योंकि आपको हर बार प्रोग्राम चलाने के दौरान पर्यावरण को निर्दिष्ट करना पड़ता है, लेकिन अगर पर्यावरण को वास्तव में केवल उस प्रोग्राम की आवश्यकता है ... यह वास्तव में सबसे अच्छा तरीका है और आपको इसकी आदत डालनी चाहिए और सब कुछ डंप नहीं करना चाहिए एक bashrc या प्रोफाइल फाइल में।

यदि आप सेटअप वातावरण के लिए systemd या init का उपयोग नहीं कर रहे हैं और प्रोग्राम चला रहे हैं ... तो निश्चित रूप से आप बस प्रोग्राम को एक bash स्क्रिप्ट के साथ लपेट सकते हैं जहाँ आप सुविधा के लिए पर्यावरण सेटअप सहित पूरी कमांड को सहेजते हैं।

संदर्भ:

यहाँ एक बहुत विस्तृत उत्तर भी है जो मैं आपको पढ़ने का सुझाव देता हूं: /ubuntu//a/247769/824160


3

के तहत एक कस्टम शेल स्क्रिप्ट बनाएं

/etc/profile.d/

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


मेरा मानना ​​है कि यह / etc / पर्यावरण फ़ाइल को संपादित करने की तुलना में अधिक विश्वसनीय दृष्टिकोण है क्योंकि पैकेज को अपडेट किए जाने के बाद उस फ़ाइल को बदला जा सकता है।
पंथ

2

/etc/environmentमेरे लिए काम करने के लिए एक चर जोड़ना ।

हालाँकि मुझे /etc/environmentपरिवर्तन को प्रभावी होने के लिए बदलने के बाद रिबूट करना पड़ा। बस टर्मिनल विंडो को बंद करना और फिर से खोलना पर्याप्त नहीं था।


3
आप source /etc/environmentइसे पुनः लोड करने के लिए हमेशा ए कर सकते हैं ।
पंथ्रो

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