मेरे लिनक्स सिस्टम के तहत सभी के लिए पर्यावरण चर कैसे सेट करें?


132

क्या मेरे पास कुछ सेटिंग्स हैं जो मेरे सभी उपयोगकर्ताओं के लिए सार्वभौमिक हैं?


2
क्या यह एक्सपोर्ट है? कहा कि और यह वैश्विक है?
TIMEX

मुझे लगता है कि यह केवल वर्तमान सत्र पर संलग्न है, जब आप टर्मिनल में नया सत्र खोलते हैं तो इसे गायब कर दिया जाएगा
हरिओन सरिपुत्र

जवाबों:


104

साथ ही साथ /etc/profileजो दूसरों ने उल्लेख किया है, कुछ लिनक्स सिस्टम अब एक निर्देशिका का उपयोग करते हैं /etc/profile.d/; .shवहां की कोई भी फाइल खटाई में पड़ जाएगी /etc/profile। यह इन फ़ाइलों में अपने कस्टम वातावरण सामान रखने के लिए सिर्फ संपादित करने की तुलना में थोड़ा neater है /etc/profile


4
क्या होगा अगर कुछ उपयोगकर्ता एक और शेल का उपयोग करते हैं, जैसे zsh?
Matthieu Napoli

70
यह वैश्विक नहीं है ... यह शेल तक ही सीमित है .. बहुत बुरा यह सबसे स्वीकृत उत्तर है
mmm

1
zsh स्रोत .sh फ़ाइलें /etc/profile.d/ में देख सकते हैं, आप इसे / etc / zshrc @Matthieu Napoli
Bily

4
ROOT उपयोगकर्ता के लिए लिपियों का उपयोग नहीं किया जाता है।
वैल

63

यदि आपके LinuxOS में यह फाइल है:

/etc/environment

आप इसे सभी उपयोगकर्ताओं के लिए स्थायी रूप से पर्यावरण चर सेट करने के लिए उपयोग कर सकते हैं।

इससे निकाला गया: http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html


मेरे लिए
कुबंटू

38

आदमी 8 pam_env

आदमी 5 pam_env.conf

यदि सभी लॉगिन सेवाएं PAM का उपयोग करती हैं , और सभी लॉगिन सेवाओं session required pam_env.soमें उनकी संबंधित /etc/pam.d/*कॉन्फ़िगरेशन फ़ाइलें होती हैं, तो सभी लॉगिन सत्रों में कुछ पर्यावरण चर होंगे जैसा कि pam_envकॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट है ।

अधिकांश आधुनिक लिनक्स वितरणों पर, यह सब डिफ़ॉल्ट रूप से होता है - बस अपने वांछित वैश्विक पर्यावरण चर को जोड़ें /etc/security/pam_env.conf

यह उपयोगकर्ता के शेल की परवाह किए बिना काम करता है, और ग्राफिकल लॉगिन के लिए भी काम करता है (यदि xdm / kdm / gdm / entry /… इस तरह सेट किया गया है)।


1
+1, आपको pam_env.conf में एक चर जोड़ने के बाद रिबूट करने की आवश्यकता है क्योंकि $ $ प्रतिध्वनि पर तुरंत $ $

9
आपको रिबूट करने की आवश्यकता नहीं है, आपको फिर से लिखना होगा। (मेरे लिए कोई रिबूटिंग क्रिटिकल सर्वर नहीं)
लिंडन व्हाइट

यह मेरे डिस्ट्रो, मिंट 17.2 पर लागू नहीं होता है। प्रीइंस्टॉल्ड फ़ाइल को पूरी तरह से टिप्पणी की जाती है, और अगर मैं कुछ जोड़ता हूं echo foo>/home/me/barऔर रिबूट (और फिर से लॉग इन करता हूं ), तो वह फ़ाइल बनाई नहीं जाती है। (इसका परीक्षण करने का एक और अधिक सुंदर तरीका है, लेकिन मैं यहां टिप्पणी करने से पहले निश्चित होना चाहता था।)
माइकल स्कैपर

16

आश्चर्यजनक रूप से, यूनिक्स और लिनक्स वास्तव में वैश्विक पर्यावरण चर सेट करने के लिए जगह नहीं है। सबसे अच्छा आप किसी भी विशिष्ट शेल के लिए साइट-विशिष्ट आरंभीकरण की व्यवस्था कर सकते हैं।

यदि आप इसे डालते हैं, तो यह /etc/profileअधिकांश पॉज़िक्स-संगत शेल उपयोगकर्ताओं के लिए चीजों की देखभाल करेगा। यह गैर-महत्वपूर्ण उद्देश्यों के लिए संभवतः "काफी अच्छा" है।

लेकिन शेल cshया tcshशेल वाला कोई भी व्यक्ति इसे नहीं देखेगा, और मुझे विश्वास नहीं है कि cshइसके पास एक वैश्विक आरंभीकरण फ़ाइल है।


8
/etc/environmentवास्तव में मेरे लिए रूट वेरिएबल के रूप में पर्यावरण चर सेट करना प्रतीत होता है। मुझे पता है कि /etc/environmentयह अमेज़ॅन लाइनक्स और ubuntu पर है। अगर csh, tsh, या zsh के लिए काम करता है, तो मुझे यह जांचने को नहीं मिला।
जॉर्डन स्टीवर्ट

यह आपके द्वारा उपयोग किए जा रहे शेल के लिए विशिष्ट नहीं है, यह वास्तव में वैश्विक है
Xerus

9

बैश मैनपेज के कुछ दिलचस्प अंश:

जब बैश को एक इंटरेक्टिव लॉगिन शेल के रूप में या --loginविकल्प के साथ एक गैर-इंटरैक्टिव शेल के रूप में लागू किया जाता है , तो यह पहले फ़ाइल से कमांड को पढ़ता है और निष्पादित करता है /etc/profile, यदि वह फ़ाइल मौजूद है। उस फ़ाइल को पढ़ने के बाद, यह उस क्रम में , और , के लिए लग रहा है ~/.bash_profile, ~/.bash_loginऔर ~/.profileपहले से मौजूद आदेशों को पढ़ता है और निष्पादित करता है और पठनीय है। --noprofileविकल्प इस्तेमाल किया जा सकता है जब खोल इस व्यवहार को बाधित करने के लिए शुरू कर दिया है।
...
जब एक इंटरेक्टिव शेल जो एक लॉगिन शेल नहीं है, तो bash पढ़ता है और कमांड से निष्पादित करता है /etc/bash.bashrcऔर ~/.bashrc, अगर ये फाइलें मौजूद हैं। --norcविकल्प का उपयोग करके इसे बाधित किया जा सकता है । --rcfileफ़ाइल विकल्प पढ़ सकते हैं और के बजाय फ़ाइल से आदेश पर अमल करने के लिए पार्टी के लिए बाध्य करेगा /etc/bash.bashrcऔर ~/.bashrc

तो एक नज़र डालें /etc/profileया /etc/bash.bashrc, ये फाइलें वैश्विक सेटिंग्स के लिए सही स्थान हैं। एक एनवायरनमेंट वैरिएबल सेट करने के लिए उनमें कुछ इस तरह रखें:

export MY_VAR=xxx

ध्यान दें कि क्लासिक यूनिक्स प्रणालियों पर, बॉर्न शेल और कॉर्न शेल दोनों भी पढ़ते हैं / आदि / प्रोफाइल - यह सिस्टम वातावरण सेटिंग के लिए संभवतः सबसे व्यापक रूप से उपयोग किया जाने वाला स्थान है। C शेल के कुछ संस्करण /etc/csh.cshrc और /etc/csh.login के साथ-साथ प्रति उपयोगकर्ता स्थानों पर दिखते हैं; अन्य किसी भी सिस्टम वातावरण सेटिंग फ़ाइल का उपयोग नहीं करते हैं।
जोनाथन लेफलर

बहुत बढ़िया, बस वही जो मैं देख रहा था जहाँ तक गैर-लॉगिन शेल उपयोगकर्ताओं के लिए एनवी सेट करना था।
डेविड मान

क्षमा करें, मुझे लगता है कि गलती से इसे तब डाउनवोट कर दिया गया था जब थोड़ी देर के लिए तीर दिखाई नहीं दे रहे थे ... क्या आप इसे संपादित कर रहे हैं (टाइपो "environEment" दूसरी पंक्ति में, उदाहरण के लिए) ताकि मैं डाउनवोट को हटा सकूं?
बेंजामिन डब्ल्यू।

4

PAM का उपयोग निष्पादन योग्य है।

# modify the display PAM
$ cat /etc/security/pam_env.conf 
# BEFORE: $ export DISPLAY=:0.0 && python /var/tmp/myproject/click.py &
# AFTER : $ python $abc/click.py &
DISPLAY  DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
abc   DEFAULT=/var/tmp/myproject

2

लिनक्स कर्नेल के तहत चलने वाली प्रत्येक प्रक्रिया को अपने स्वयं के, अद्वितीय वातावरण प्राप्त होता है जो इसे अपने माता-पिता से विरासत में मिलता है। इस मामले में, माता-पिता या तो स्वयं एक शेल होगा (एक उप शेल spawning), या 'लॉगिन' प्रोग्राम (एक विशिष्ट सिस्टम पर)।

जैसा कि प्रत्येक प्रक्रिया 'पर्यावरण संरक्षित है, हर चल रही प्रक्रिया के लिए एक पर्यावरण चर को' इंजेक्ट 'करने का कोई तरीका नहीं है, इसलिए भले ही आप डिफ़ॉल्ट शेल .rc / प्रोफ़ाइल हों, तब तक यह प्रभावी नहीं होगा जब तक कि प्रत्येक प्रक्रिया से बाहर नहीं निकलता और पुनः लोड नहीं होता है। इसकी स्टार्ट अप सेटिंग्स।

किसी विशेष शेल के लिए डिफ़ॉल्ट स्टार्ट अप चर को संशोधित करने के लिए / etc / में देखें। बस एहसास है कि उपयोगकर्ता (और अक्सर कर सकते हैं) उन्हें अपनी व्यक्तिगत सेटिंग्स में बदल सकते हैं।

यूनिक्स को सीमा के भीतर उपयोगकर्ता का पालन करने के लिए डिज़ाइन किया गया है।

एनबी : बैश आपके सिस्टम पर एकमात्र शेल नहीं है। ध्यान दें कि क्या / बिन / श प्रतीकात्मक लिंक वास्तव में इंगित करता है। कई प्रणालियों पर, यह वास्तव में पानी का छींटा हो सकता है (डिफ़ॉल्ट रूप से, कोई विशेष आह्वान के साथ) सही ढंग से सही नहीं है। इसलिए, आपको दोनों डिफॉल्ट्स को संशोधित करने के लिए ध्यान रखना चाहिए , या स्क्रिप्ट जो कि / bin / sh से शुरू होती हैं, आपके वैश्विक डिफॉल्ट को इनहेरिट नहीं करेंगी। इसी तरह, वाक्यविन्यास से बचने के लिए ध्यान रखें कि दोनों को एड करते समय केवल बैश समझ में आता है avoiding bashisms

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