PATH
एनवार सेट करने के लिए पसंदीदा जगह कहाँ है ?
~/.profile
या /etc/environment
?
जब PATH
दोनों स्थानों पर सेट किया जाता है तो मामला क्या है ? क्या अंतिम परिणाम उन दो स्थानों में निर्धारित दोनों मानों का मिलन है?
PATH
एनवार सेट करने के लिए पसंदीदा जगह कहाँ है ?
~/.profile
या /etc/environment
?
जब PATH
दोनों स्थानों पर सेट किया जाता है तो मामला क्या है ? क्या अंतिम परिणाम उन दो स्थानों में निर्धारित दोनों मानों का मिलन है?
जवाबों:
सारांश:
यदि आप अपने वर्तमान उपयोगकर्ता के लिए /your/additional/path
अपने PATH
वैरिएबल के लिए केवल एक पथ (जैसे ) जोड़ना चाहते हैं और आपके कंप्यूटर के सभी उपयोगकर्ताओं के लिए नहीं है, तो आप सामान्य रूप ~/.profile
से उन दो उदाहरणों में से एक में जैसे अंत में डालते हैं:
PATH="/your/additional/path:$PATH"
PATH="$PATH:/your/additional/path"
ध्यान दें कि पथ प्राथमिकताएं बाएं से दाएं की ओर उतर रही हैं, इसलिए पहले पथ की सर्वोच्च प्राथमिकता है। यदि आप बाईं ओर अपना रास्ता जोड़ते हैं $PATH
, तो इसमें सर्वोच्च प्राथमिकता होगी और उस स्थान पर निष्पादन योग्य अन्य सभी को ओवरराइड करेगा। यदि आप दाईं ओर अपना रास्ता जोड़ते हैं, तो इसकी प्राथमिकता सबसे कम होगी और अन्य स्थानों से निष्पादन योग्य को प्राथमिकता दी जाएगी।
हालांकि, अगर आप सभी उपयोगकर्ताओं के लिए है कि वातावरण चर निर्धारित करने की आवश्यकता है, तो, मैं अभी भी दिल को छू लेने की सिफारिश नहीं होगा /etc/environment
लेकिन फ़ाइल नाम में समाप्त होने के साथ एक फ़ाइल बनाने .sh
में /etc/profile.d/
। /etc/profile
स्क्रिप्ट और सभी स्क्रिप्ट /etc/profile.d
प्रत्येक उपयोगकर्ता का व्यक्तिगत के वैश्विक बराबर हैं ~/.profile
और उनके आरंभीकरण के दौरान सभी के गोले द्वारा नियमित रूप से शेल स्क्रिप्ट के रूप में मार डाला।
ज्यादा जानकारी:
/etc/environment
एक सिस्टम-वाइड कॉन्फ़िगरेशन फ़ाइल है, जिसका अर्थ है कि यह सभी उपयोगकर्ताओं द्वारा उपयोग किया जाता है। root
हालांकि यह स्वामित्व में है , इसलिए आपको एक व्यवस्थापक उपयोगकर्ता होने और sudo
इसे संशोधित करने के लिए उपयोग करने की आवश्यकता है।
~/.profile
आपके अपने उपयोगकर्ता के व्यक्तिगत शेल आरंभीकरण स्क्रिप्ट में से एक है। प्रत्येक उपयोगकर्ता के पास एक है और दूसरों को प्रभावित किए बिना उनकी फ़ाइल को संपादित कर सकता है।
/etc/profile
और /etc/profile.d/*.sh
वैश्विक आरंभिक स्क्रिप्ट हैं जो ~/.profile
प्रत्येक उपयोगकर्ता के लिए समान हैं । वैश्विक स्क्रिप्ट को उपयोगकर्ता-विशिष्ट स्क्रिप्ट से पहले निष्पादित किया जाता है; और मुख्य /etc/profile
सभी *.sh
स्क्रिप्ट्स को /etc/profile.d/
बाहर निकलने से पहले निष्पादित करता है।
/etc/environment
फ़ाइल सामान्य रूप से केवल इस लाइन में शामिल हैं:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
यह PATH
सिस्टम के सभी उपयोगकर्ताओं के लिए इस डिफ़ॉल्ट मान के लिए चर सेट करता है , जिसे एक प्रमुख तरीके से नहीं बदला जाना चाहिए। कम से कम आप जैसे महत्वपूर्ण रास्तों को भी निकाल नहीं करना चाहिए /bin
, /sbin
, /usr/bin
और /usr/sbin
इसे से।
इस फ़ाइल को प्रत्येक उपयोगकर्ता के प्रत्येक शेल द्वारा पहले कॉन्फ़िगरेशन फ़ाइलों में से एक के रूप में पढ़ा जाता है। ध्यान दें कि यह एक शेल स्क्रिप्ट नहीं है । यह सिर्फ एक कॉन्फ़िगरेशन फ़ाइल है जो किसी भी तरह से पार्स हो जाती है और इसमें केवल पर्यावरण चर असाइनमेंट हो सकते हैं!
~/.profile
फ़ाइल बहुत सी बातें शामिल कर सकते हैं, डिफ़ॉल्ट रूप से यह अन्य सामग्री के बीच एक जांच में शामिल एक है कि क्या ~/bin
निर्देशिका मौजूद है और उपयोगकर्ता के मौजूदा करने के लिए है कि कहते हैं PATH
चर (पर पुराने उबंटू 16.04 से पहले रिलीज - नए रिलीजों बिना शर्त इसे जोड़) इस तरह,:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
आप देखते हैं कि यहां पुराने मूल्य का PATH
पुन: उपयोग किया जाता है और नया मार्ग केवल सब कुछ अधिलेखित करने के बजाय शुरुआत में जोड़ा जाता है। जब आप मैन्युअल रूप से नए पथ जोड़ना चाहते हैं, तो आपको हमेशा पुराने $PATH
मान को नए स्ट्रिंग में भी रखना चाहिए ।
यह इनिशियलाइज़ेशन स्क्रिप्ट केवल उस उपयोगकर्ता के गोले द्वारा पढ़ी जाती है जिसके पास यह है, लेकिन एक और शर्त है:
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
इसलिए यदि आप डिफ़ॉल्ट बैश शेल का उपयोग करते हैं, तो आपको यह सुनिश्चित करना चाहिए कि आपके पास ऐसा नहीं है ~/.bash_profile
या ~/.bash_login
यदि आप चाहते हैं कि परिवर्तन ~/.profile
आपके उपयोगकर्ता पर प्रभाव डालें।
पर्यावरण चर पर पूरी समझ के लिए देखें: https://help.ubuntu.com/community/EnvironmentVariables
संबंधित प्रश्न: bash.bashrc और / etc / पर्यावरण फ़ाइल के बीच अंतर
~/.profile
के अस्तित्व के लिए जाँच नहीं करता है ~/bin
, लेकिन यह सिर्फ रेखा है:PATH="$HOME/bin:$HOME/.local/bin:$PATH"
/etc/skel/.profile
16.04 में मेरे द्वारा उल्लिखित लाइन है। आपने पिछली रिलीज़ में अपने उपयोगकर्ता को स्पष्ट रूप से बनाया था।
~/.profile
अभी भी यही है, लेकिन आप सही हैं - /etc/skel/.profile
यह मेरे अपग्रेड किए गए 16.04 सिस्टम पर नहीं है (और 16.04 स्थापित करते समय एक उपयोगकर्ता खाता बनाया गया है एक और मशीन उनके पास नहीं है .profile
)।
यह उत्तर मुख्य रूप से उस क्रम के
PATH
बारे में है जिसमें विभिन्न कॉन्फ़िगरेशन फ़ाइलों में निर्दिष्ट किए जाने पर पर्यावरण चर जैसे असाइन किए जाते हैं । मैं यह भी कवर करता हूं कि आपको आमतौर पर उन्हें कहां सेट करना चाहिए, लेकिन नीचे दी गई सूची उस क्रम में फाइलों को सूचीबद्ध नहीं करती है जिन्हें आपको उनका उपयोग करने पर विचार करना चाहिए।PATH
उबंटू में सेटिंग और अन्य पर्यावरण चर पर सामान्य जानकारी के लिए , मैं भी पर्यावरणविदों और इस प्रश्न के अन्य उत्तरों को पढ़ने की सलाह देता हूं ।
सेट करने के लिए पसंदीदा स्थान इस PATH
बात पर निर्भर करता है कि आपको किन उपयोगकर्ताओं के लिए इसे सेट करने की आवश्यकता है और आप इसे कब और कैसे सेट करना चाहते हैं। आपके निर्णय का एक हिस्सा यह होगा कि क्या आप सभी उपयोगकर्ताओं के लिए या प्रति-उपयोगकर्ता के आधार पर एक पर्यावरण चर सेट करना चाहते हैं। यदि आप निश्चित नहीं हैं, तो मैं इसे सिर्फ़ एक उपयोगकर्ता (जैसे, आपका खाता) के लिए व्यवस्थित करने के बजाय इसे सेट करने की सलाह देता हूं।
जैसा कि एलेक्सपी कहता है , PATH
पर्यावरण चर का वह मूल्य होगा जो उसे हाल ही में सौंपा गया था । व्यवहार में, आपके द्वारा निर्धारित अधिकांश समय PATH
, आप नए मूल्य में पुराने मूल्य को शामिल करते हैं PATH
, ताकि पिछली प्रविष्टियां बरकरार रहें।
इस प्रकार, व्यवहार में, जब PATH
कई फाइलों से सेट किया जाता है, तो इसमें आमतौर पर सभी फाइलों में दी गई प्रविष्टियां होती हैं। लेकिन ऐसा केवल इसलिए होता है क्योंकि सभी फाइलें जो इसे सेट करती हैं, पहले वाले को छोड़कर, आमतौर पर PATH
वेरिएबल को ही संदर्भित करती हैं, जिससे इसका पुराना मूल्य नए में शामिल हो जाता है।
इसलिए, आप प्रभाव में उस क्रम के लिए पूछ रहे हैं जिसमें PATH
विभिन्न फाइलों में सेटिंग्स प्रभावी होती हैं।
सेट करने के लिए सामान्य, सामान्य प्रयोजन वाले स्थानों को PATH
उस क्रम में नीचे सूचीबद्ध किया जाता है जिसमें वे उस समय प्रभावी होते हैं जब कोई उपयोगकर्ता लॉग इन करता है, न कि उस क्रम में जिसे आप आमतौर पर उनका उपयोग करने पर विचार करते हैं । नीचे दिए गए स्थानों में से प्रत्येक कुछ स्थितियों PATH
में स्थापित करने के लिए एक उचित विकल्प है , लेकिन अधिकांश समय में कुछ ही अच्छे विकल्प हैं।
नीचे दी गई सूची में, आपको कुछ निर्देशिका नाम जैसे दिखाई देंगे ~/.profile
। यदि आप टिल्ड विस्तार से अपरिचित हैं , ~/
तो वर्तमान उपयोगकर्ता की होम डायरेक्टरी को संदर्भित करता है। मैं मुख्य रूप से कॉम्पैक्टनेस के लिए इस सिंटैक्स का उपयोग करता हूं। यह शेल स्क्रिप्ट में समर्थित है, लेकिन PAM कॉन्फ़िगरेशन फ़ाइलों में नहीं ।
/etc/environment
Ubuntu पर PAM को /etc/environment
सेट करने के लिए सूचीबद्ध परिवेश चर का कारण बनता है , यदि वह फ़ाइल मौजूद है, जो डिफ़ॉल्ट रूप से ऐसा करता है। इस तरह से सभी उपयोगकर्ताओं के लिए पर्यावरण चर सबसे अधिक निर्धारित हैं।
$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
यदि आपको केवल अपने उपयोगकर्ता खाते के बजाय सभी उपयोगकर्ता खातों के लिए पर्यावरण चर सेट करना होगा , तो उस फ़ाइल को संशोधित करना संभवत: आपकी सबसे अच्छी पसंद है। मैं इसे पहले वापस करने की सलाह देता हूं। इस फ़ाइल का बैकअप लेने का एक तरीका है:
sudo cp /etc/environment /etc/environment.orig
.orig
विस्तार विशेष रूप से की आवश्यकता नहीं है - आप बैकअप फ़ाइल कुछ भी है कि भ्रामक या पहले से ही इस्तेमाल किया जा रहा नहीं है नामकरण बारे में अच्छा महसूस कर सकते हैं। (इसके अलावा .orig
, .old
, .backup
और .bak
आम बात है।)
आप (यदि आपके पास रूट उपयोगकर्ता के रूप में किसी अन्य फ़ाइल को संपादित कर सकते हैं तरीकों में से किसी में इस फ़ाइल को संपादित कर सकते हैं sudoedit /etc/enviromnment
, sudo nano -w /etc/environment
, gksudo gedit /etc/environment
आदि)
/etc/environment
स्वचालित रूप से एक चर के पुराने मूल्य सहित समर्थन नहीं करता है। लेकिन यह आम तौर पर अनावश्यक होता है, चूंकि अधिकांश समय आप संपादन करके सभी उपयोगकर्ताओं के लिए एक पर्यावरण चर निर्धारित करेंगे /etc/environment
, आप चाहते हैं कि जब उपयोगकर्ता लॉग इन करे, तब भी इसका प्रारंभिक मूल्य हो। उपयोगकर्ता इसे तब बदल सकता है जब वे चाहें। आमतौर पर उपयोगकर्ताओं के लिए ऐसा करने में सक्षम होना अच्छा है।
/etc/security/pam_env.conf
पीएएम सभी उपयोगकर्ताओं के लिए पर्यावरण चर /etc/security/pam_env.conf
को उसी सिंटैक्स के साथ पढ़ता है जो प्रति-उपयोगकर्ता ~/.pam_environment
फ़ाइलों में उपयोग किया जाता है (नीचे देखें)।
जब समान पर्यावरण चर दोनों में सेट किया जाता है /etc/environment
और /etc/security/pam_env.conf
, मान pam_env.conf
का उपयोग किया जाता है - भले ही उस मूल्य को DEFAULT
इसके बजाय निर्दिष्ट किया गया हो OVERRIDE
।
हालाँकि, जब आप किसी एक के environment
साथ एक लाइन को सुपरसाइड करते हैं, तो आप सुपरकोड pam_env.conf
की गई सामग्री को शामिल कर सकते हैं। .pam_environment
विवरण के लिए नीचे दिए गए अनुभाग को देखें (क्योंकि यह एक ही वाक्यविन्यास का उपयोग करता है)।
यह आमतौर पर संपादित करने के लिए आवश्यक नहीं है pam_env.conf
और यदि आप करते हैं तो आपको बहुत सावधान रहना चाहिए , क्योंकि एक विकृत लाइन आमतौर पर सभी सामान्य उपयोगकर्ता खातों को लॉग इन करने से रोक देगी! उदाहरण के लिए, डिफ़ॉल्ट pam_env.conf
में लाइनें शामिल हैं:
#PATH DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11
यह कई उदाहरणों में से एक के रूप में प्रस्तुत किया गया है। चीजों में से एक यह दिखाता है कि एक असाइनमेंट को कई लाइनों के साथ कैसे विभाजित किया जाए \
। माना कि आप सिर्फ पहली पंक्ति को अनकंफर्टेबल करना चाहते थे, लेकिन दूसरी लाइन को अनफॉलो करना भूल गए:
PATH DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11
यह मत करो!
मैंने अभी-अभी परीक्षण किया कि दुर्घटना से, और इसने किसी भी उपयोगकर्ता को सफलतापूर्वक लॉग इन करने से रोका। इसे ठीक करने के लिए, मुझे पुनर्प्राप्ति मोड में बूट करना पड़ा और इसे वापस बदलना पड़ा। (सौभाग्य से मैंने यह एक आभासी मशीन पर किया था जिसका उपयोग मैं केवल चीजों के परीक्षण के लिए करता हूं, इसलिए इससे मुझे कोई परेशानी नहीं हुई।)
.pam_environment
उपयोगकर्ता के घर निर्देशिका मेंएक उपयोगकर्ता के लिए एक पर्यावरण चर सेट करने के तरीकों में से एक उस उपयोगकर्ता को .pam_environment
अपनी होम डायरेक्टरी में संपादित (या बनाने) के लिए है। इस फ़ाइल में दिए गए मान वैश्विक /etc/environment
फ़ाइल में सेट किए गए को सुपरसेड करते हैं।
.pam_environment
उन फ़ाइलों के कंकाल का हिस्सा नहीं है जो उपयोगकर्ता के होम फ़ोल्डर में कॉपी किए जाते हैं जब उपयोगकर्ता खाता शुरू में बनाया जाता है। हालाँकि, यदि आप अपने घर निर्देशिका में उस फ़ाइल को बनाते हैं, तो आप इसका उपयोग पर्यावरण चर जैसे सेट करने के लिए कर सकते हैं PATH
। विपरीत /etc/environment
(लेकिन पसंद /etc/security/pam_env.conf
), प्रति-उपयोगकर्ता .pam_environment
फ़ाइलें एक नए में पर्यावरण चर के पुराने मूल्य का विस्तार करने का समर्थन करती हैं। हालाँकि, वे शेल स्क्रिप्ट नहीं हैं, और आपको इसे प्राप्त करने के लिए एक विशेष सिंटैक्स का उपयोग करना होगा, जो आपके द्वारा किसी फ़ाइल में उपयोग किए गए सिंटैक्स से कुछ भिन्न होगा .profile
।
उदाहरण के लिए, यदि bin2
आपके घर निर्देशिका में एक निर्देशिका थी जिसे आप अंत में जोड़ना चाहते थे PATH
, तो आप यह कर सकते हैं .pam_environment
:
PATH DEFAULT=${PATH}:/home/@{PAM_USER}/bin2
देखें उपधारा के EnvironmentVariables , (जिसमें से ऊपर के उदाहरण बारीकी से अनुकूलित है) , और अधिक जानकारी के लिए।~/.pam_environment
man pam_env
man pam_env.conf
हालाँकि यह एक बार उबंटू उपयोगकर्ताओं के लिए पर्यावरण के चर को बदलने या जोड़ने के लिए पसंदीदा तरीका था, लेकिन इसे अभी भी एक उचित और स्वीकार्य विकल्प माना जाता है, आपको संपादन करते समय सावधान रहना चाहिए.pam_environment
। सिस्टमवाइड /etc/security/pam_env.conf
(ऊपर देखें) में संपादन की तरह , उपयोगकर्ता की .pam_environment
फ़ाइल में एक विकृत लाइन लॉगिन को सफल होने से रोकेगी। (मैं इस परीक्षण किया है -। इस समय उद्देश्य पर) के तरीके के बारे में जानकारी के लिए सिफारिशें की है विकसित , देख गुन्नार Hjalmarsson की टिप्पणी नीचे और इस ubuntu-devel
चर्चा ।
ऐसी गलती बहुत कम गंभीर है, सामान्य तौर पर , एक विकृत लाइन की तुलना में pam_env.conf
, क्योंकि यह केवल एक उपयोगकर्ता को प्रभावित करता है। हालाँकि, केवल एक उपयोगकर्ता खाते के साथ एक डेस्कटॉप उबंटू प्रणाली के मामले में, जो लॉगिन की अनुमति देता है, संपादन करते समय ऐसी गलती, संपादन के दौरान .pam_environment
बस उतना ही बुरा होगा pam_env.conf
- यदि आप पहले से लॉग इन नहीं हैं, तो आप सक्षम नहीं होंगे। पुनर्प्राप्ति मोड (या एक लाइव यूएसबी, आदि) से बूट किए बिना इसे ठीक करने के लिए।
(यदि आपके पास अन्य उपयोगकर्ता खाते हैं, तो आप किसी अन्य उपयोगकर्ता के रूप में लॉग इन कर सकते हैं और समस्या को ठीक कर सकते हैं। भले ही वे व्यवस्थापक न हों और sudo
रूट नहीं कर सकते हैं, फिर भी वे चला सकते हैं और आपके (उनके नहीं) पासवर्ड दर्ज करने के लिए कहा जा सकता है। ( अतिथि खाता, हालांकि, ऐसा नहीं कर सकता है, क्योंकि यह किसी अन्य उपयोगकर्ता की पहचान पर उपयोग करने से प्रतिबंधित है ।)su your-account
su
/etc/profile
और अंदर फ़ाइलें/etc/profile.d/
बॉर्न-संगत शेल ( bash
उबंटू में डिफ़ॉल्ट उपयोगकर्ता शेल सहित ) /etc/profile
लॉगिन शेल के रूप में आह्वान किए जाने पर कमांड चलाते हैं ।
Ubuntu के /etc/profile.d
साथ समाप्त होता है:
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
यह /etc/profile.d/
निर्देशिका में किसी भी फाइल में कमांड का नाम देता है जिसका नाम समाप्त .sh
होने के साथ ही चलाया जाता है।
अधिकांश प्रदर्शन प्रबंधक ग्राफ़िकल लॉगिन के लिए भी /etc/profile
(और इस प्रकार फ़ाइलें /etc/profile.d
) कमांड का कारण बनते हैं। हालांकि, सभी ऐसा नहीं करते हैं, और यह PAM द्वारा दी गई सुविधाओं के उपयोग के पक्ष में एक महत्वपूर्ण तर्क है (ऊपर देखें) - जब तक कि इस प्रणाली में कोई ग्राफ़िकल लॉगिन नहीं होगा, जो कि मामला हो सकता है, उदाहरण के लिए, यदि यह कोई GUI के साथ एक सर्वर स्थापित।
यह पारंपरिक रूप से पर्यावरण चर सेट करने के लिए पारंपरिक है /etc/profile
, लेकिन यह अब सबसे अच्छा विकल्प नहीं है। यदि आप एक पर्यावरण चर सेट नहीं कर सकते हैं /etc/environment
, और आपको इसे सभी उपयोगकर्ताओं के लिए सेट करना होगा, तो संभवतः एक नई फ़ाइल बनाने से बेहतर है कि इसे स्वयं /etc/profile.d/
संपादित करें /etc/profile
। इसका एक कारण यह है कि, जब Ubuntu अपग्रेड किया जाता है, तो एक नई डिफ़ॉल्ट /etc/profile
फ़ाइल हो सकती है । आप नवीनीकरण कैसे करते हैं, इसके आधार पर, या तो पुरानी फ़ाइल (आपके परिवर्तनों के साथ) रखी जाएगी, उस विशेष अपडेट की गई कॉन्फ़िगरेशन फ़ाइल को पूर्वगामी, या आपको स्थिति को संभालने के लिए संकेत दिया जाएगा।
जब एक ही पर्यावरण चर दोनों /etc/profile
और एक या एक से अधिक फ़ाइलों में सेट किया जाता है /etc/profile.d
, जो अंतिम प्रदर्शन किया जाता है? यह इस बात पर निर्भर करता है कि /etc/profile
उस सेट में जो कमांड हैं, वे फाइल के पहले या बाद में दिखाई देते हैं profile.d
(कोड द्वारा मैंने ऊपर उद्धृत किया है)। आदेश में /etc/profile
दिखाई देने वाले आदेशों को निष्पादित किया जाता है।
/etc/profile
एक शेल स्क्रिप्ट है, और इसका सिंटैक्स वही नहीं है जो ऊपर चर्चा की गई PAM कॉन्फ़िगरेशन फ़ाइलों के रूप में है । इसका सिंटैक्स प्रति-उपयोगकर्ता ~/.profile
फ़ाइल के लिए सिंटैक्स के समान है (नीचे देखें)।
यदि आपको ऐसा कोड लिखना है जो यह तय करता है कि किसी विशेष निर्देशिका को जोड़ना है या नहीं PATH
(और सभी उपयोगकर्ताओं के लिए ऐसा करने के लिए), तो आप इसका उपयोग नहीं कर पाएंगे /etc/environment
या /etc/security/pam_env.conf
ऐसा नहीं कर पाएंगे । यह शायद मुख्य स्थिति है जहां इसका उपयोग करना बेहतर है /etc/profile
या /etc/profile.d/
इसके बजाय।
.bash_profile
उपयोगकर्ता के घर निर्देशिका मेंएक उपयोगकर्ता है ~/.bash_profile
, बैश यह बजाय का उपयोग करता है की ~/.profile
या ~/.bash_login
(नीचे देखें)। आप आमतौर पर .bash_profile
अपने घर निर्देशिका में नहीं होना चाहिए ।
यदि आप करते हैं, तो यह आमतौर पर स्रोत ~/.profile
(जैसे, . "$HOME/.profile"
) के लिए एक कमांड शामिल होना चाहिए । अन्यथा, प्रति-उपयोगकर्ता .profile
फ़ाइल की सामग्री बिल्कुल नहीं चलती है।
.bash_login
उपयोगकर्ता के घर निर्देशिका मेंयदि किसी उपयोगकर्ता के पास ~/.bash_login
बैश है , तो इसके बजाय ~/.profile
(नीचे देखें) का उपयोग करता है , जब तक कि ~/.bash_profile
मौजूद नहीं है, तब तक किसी भी स्थिति में अन्य का उपयोग नहीं किया जाएगा जब तक कि `~ / .bash_login से प्राप्त नहीं किया जाता है।
के रूप में .bash_profile
, आप आमतौर पर .bash_login
अपने घर निर्देशिका में एक फ़ाइल नहीं होना चाहिए ।
.profile
उपयोगकर्ता के घर निर्देशिका में।जब बॉर्न-शैली का शेल लॉगिन शेल के रूप में चलाया जाता है, तो यह कमांड को चलाता है /etc/profile
(जिसमें आम तौर पर कमांड शामिल होते हैं जो फ़ाइलों /etc/profile.d/
को चलाने के लिए कमांड का कारण बनते हैं - ऊपर देखें)। उसके बाद, यह .profile
उपयोगकर्ता के होम डायरेक्टरी में कमांड चलाता है । यह फाइल हर उपयोगकर्ता के लिए अलग है। (बैश वास्तव में चलता है .bash_profile
या .bash_login
इसके बजाय अगर वे मौजूद हैं - लेकिन, उबंटू प्रणाली पर उपयोगकर्ताओं के लिए, वे फाइलें शायद ही कभी मौजूद होनी चाहिए या नहीं। विवरण के लिए, ऊपर देखें और बैश मैनुअल में 6.2 बैश स्टार्टअप फाइलें देखें ।)
~/.profile
इस प्रकार उपयोगकर्ता के लिए मुख्य जगह है कि वे जब लॉग ऑन करते हैं तो कमांड डालते हैं। यह आपके लिए अपना स्थान निर्धारित करने का पारंपरिक स्थान है PATH
, लेकिन चूंकि उबंटू में pam_env मॉड्यूल और समर्थन है ~/.pam_environment
, इसलिए आपको इसका उपयोग करने पर विचार करना चाहिए।
जैसा कि /etc/profile
, सभी प्रदर्शन प्रबंधक इस फ़ाइल को ग्राफ़िकल लॉगिन के लिए नहीं चलाते हैं, हालाँकि अधिकांश करते हैं। यह ~/.pam_environment
वातावरण चर सेट करने के लिए पसंद करने का एक कारण है (जितना कोई पसंद /etc/environment
कर सकता है /etc/profile
)।
PATH
जब आप सेट PATH
करते हैं .pam_environment
(ऊपर देखें) , तो आप स्वयं सहित पर्यावरण चर का विस्तार कर सकते हैं। हालांकि, यदि आपको PATH
अधिक परिष्कृत तरीके से सेट करने की आवश्यकता है, तो आपको .profile
इसके बजाय अपने उपयोग करना पड़ सकता है । विशेष रूप से, यदि आप यह जाँचना चाहते हैं कि क्या कोई निर्देशिका हर बार उपयोगकर्ता के लॉग इन होने के बाद मौजूद होती है और केवल PATH
यदि वह ऐसा करता है, तो आप .pam_environment
उस निर्देशिका को अपनी निर्देशिका में जोड़ने के लिए अपनी फ़ाइल का उपयोग नहीं कर पाएंगे PATH
।
उदाहरण के लिए, .profile
उबंटू पर डिफ़ॉल्ट प्रति-उपयोगकर्ता फ़ाइल को समाप्त करने के लिए उपयोग किया जाता है :
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
देखें गुन्नार Hjalmarsson की टिप्पणी पर बाइट कमांडर के जवाब जानकारी के लिए।
यह जाँचता है कि क्या आपके पास bin
अपने घर निर्देशिका का उपनिर्देशिका है। यदि ऐसा है, तो यह आपकी शुरुआत के लिए उस उपनिर्देशिका को जोड़ता है PATH
।
जब उपयोगकर्ता लॉग इन करते हैं तो लॉग के प्रकार पर अधिक निर्भर होने पर अन्य तरीके के वातावरण चर निर्धारित किए जाते हैं। उदाहरण के लिए, आपके पास कभी-कभार पर्यावरण चर हो सकते हैं जो केवल ग्राफ़िकल लॉगिन के लिए या केवल एसएसएच-आधारित दूरस्थ लॉगिन के लिए सेट होते हैं। ऊपर दी गई सूची में ऐसे मामलों को शामिल नहीं किया गया है।
मैंने कुछ फाइलें छोड़ दी हैं, जहां लोग कभी-कभी पर्यावरण चर, जैसे ~/.bashrc
और /etc/bash.bashrc
, को परिभाषित करते हैं, क्योंकि वे आम तौर पर सेट करने के लिए अनुशंसित स्थान नहीं होते हैं PATH
और यह दुर्लभ है कि आपको वास्तव में इस उद्देश्य के लिए उनका उपयोग करना चाहिए। यदि आप निर्देशिकाओं को जोड़ने के लिए इन फ़ाइलों का उपयोग करते हैं PATH
, तो उन्हें कभी-कभी कई बार जोड़ा जाएगा और जब आप जांच करते हैं तो बहुत भ्रमित होते हैं $PATH
। (चरम मामलों में यह चीजों को धीमा कर सकता है, लेकिन आमतौर पर यह सब कुछ साफ और समझ में रखने की बात है।)
चूंकि bash
उपयोगकर्ताओं के लिए उबंटू का डिफ़ॉल्ट लॉगिन शेल है, और अधिकांश उपयोगकर्ता इसका उपयोग करते हैं या कुछ अन्य POSIX- संगत शेल, मैंने इस बारे में जानकारी छोड़ दी है कि अन्य, गैर-बॉर्न-शैली के शेल जैसे पर्यावरण चर कैसे सेट किए जाते हैं tcsh
।
/etc/environment
/ ~/.pam_environment
के रूप में सिफारिश की फ़ाइलें। डेवलपर्स के साथ परामर्श करने के बाद मैंने इसे PAM और / के बीच तटस्थ रहने के लिए बदल दिया , और मैं अभी भी इसे इस तरह से देखना चाहता हूं। /etc/profile.d/*.sh
~/.profile
/etc/profile.d/*.sh
/ के पक्ष में महत्वपूर्ण तर्क ~/.profile
यह है कि सिंटैक्स सरल है और लाइटमैड / जीडीएम त्रुटियों के मामले में क्षमा कर रहे हैं (सिंटैक्स त्रुटियां आपको लॉग इन करने से नहीं रोकती हैं, लेकिन सिर्फ चेतावनी संदेशों में परिणाम करती हैं)।
pam_env.so
, क्या आपका मतलब था pam_env.conf
?
pam_env.conf
। धन्यवाद! मैंने इसे ठीक करने के लिए संपादन किया है।
/ etc / पर्यावरण फ़ाइल एक स्क्रिप्ट फ़ाइल नहीं है जिसे आप वहां निर्यात नहीं कर सकते हैं और यह $ HOME के चर विस्तार का समर्थन नहीं करता है, बस simplevariable = मूल्य जोड़े। तो उस फ़ाइल का उपयोग करने के लिए, आपको बस मौजूदा परिभाषा में अपना रास्ता जोड़ना होगा, विशेष रूप से सिस्टम-वाइड वातावरण चर सेटिंग्स के लिए है। प्रति पंक्ति एक। विशेष रूप से, यह फ़ाइल सिस्टम-वाइड लोकेल और पथ सेटिंग्स को संग्रहीत करती है।
~ / .profile - यह फ़ाइल तब भी निष्पादित की जाती है जब भी किसी bash शेल को निष्पादित किया जाता है, आमतौर पर पर्यावरण चर के लिए एक की सिफारिश की जाती है, हालांकि इसमें केवल लॉगिन शेल द्वारा आमंत्रित किए जाने का नुकसान है, इसलिए इसे प्रभावी होने के लिए आपको आवश्यकता होगी लॉग-इन करने और वापस लौटने के लिए - या कम से कम, एक नया लॉगिन शेल शुरू करें।
पर्यावरण चर सेट करने के लिए पसंदीदा जगह कई चीजों पर निर्भर करती है:
/etc/environment
क्योंकि वहाँ _unauthorized पहुँच का कोई खतरा नहीं है।/etc/environment
, लेकिन~/.profile
सिस्टम के प्रत्येक उपयोगकर्ता से संबंधित होना चाहिए क्योंकि यह प्रत्येक कंप्यूटर होम डायरेक्टरी में स्थित है।सिस्टम पढ़ने /etc/environment
से पहले पढ़ेगा ~/.profile
। कोई अतिक्रमण नहीं होता है और एलेक्स पी ने कहा कि पथ के लिए अंतिम असाइनमेंट प्रबल है।
कारक है कि कैसे निर्धारित पर अधिक विस्तृत देखने के लिए ~/.profile
और /etc/environment
इस तरह के अन्य स्थानों के साथ बाहर खेलने जाने के लिए यहाँ और यहाँ , के रूप में इन कारकों आप इन स्थानों का उपयोग को प्रभावित करती है।