PATH चर को / etc / वातावरण बनाम .profile में सेट करना


58

PATHएनवार सेट करने के लिए पसंदीदा जगह कहाँ है ?

~/.profileया /etc/environment?

जब PATHदोनों स्थानों पर सेट किया जाता है तो मामला क्या है ? क्या अंतिम परिणाम उन दो स्थानों में निर्धारित दोनों मानों का मिलन है?


पीएटीएच का अंतिम कार्य निश्चित रूप से प्रबल है। अधिकांश स्क्रिप्ट स्क्रिप्ट की शुरुआत में इसे स्पष्ट रूप से सेट करते हैं।
एलेक्स डेप

3
Help.ubuntu.com/community/… देखें ।
edwinksl

जवाबों:


70

सारांश:

  • यदि आप अपने वर्तमान उपयोगकर्ता के लिए /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 / पर्यावरण फ़ाइल के बीच अंतर


2
आजकल ~/.profileके अस्तित्व के लिए जाँच नहीं करता है ~/bin, लेकिन यह सिर्फ रेखा है:PATH="$HOME/bin:$HOME/.local/bin:$PATH"
गुन्नार हेजलारसन

1
@GunnarHjalmarsson "आजकल" को परिभाषित करें, कृपया? मैं 16.04 रन कर रहा हूं और यही वहां दिखता है।
बाइट कमांडर

2
/etc/skel/.profile16.04 में मेरे द्वारा उल्लिखित लाइन है। आपने पिछली रिलीज़ में अपने उपयोगकर्ता को स्पष्ट रूप से बनाया था।
गुन्नार हेजलमरसन

1
@GunnarHjalmarsson इस जानकारी के लिए धन्यवाद - लगभग पांच मिनट पहले तक , मुझे लगा कि डिफ़ॉल्ट ~/.profileअभी भी यही है, लेकिन आप सही हैं - /etc/skel/.profileयह मेरे अपग्रेड किए गए 16.04 सिस्टम पर नहीं है (और 16.04 स्थापित करते समय एक उपयोगकर्ता खाता बनाया गया है एक और मशीन उनके पास नहीं है .profile)।
एलियाह कगन

2
"... उनके आरंभ के दौरान सभी गोले द्वारा नियमित शेल स्क्रिप्ट के रूप में निष्पादित किया गया।" मुझे लगता है कि यह भ्रामक है। सुझाव दे सकते हैं (कुछ को) कि बस जीयूआई डेस्कटॉप से ​​एक गैर-लॉगिन टर्मिनल शेल खोलना / / प्रोफ़ाइल को निष्पादित करेगा, जो यह नहीं होगा। askubuntu.com/questions/155865/…
हॉकआई पार्कर

22

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

सेट करने के लिए पसंदीदा स्थान इस PATHबात पर निर्भर करता है कि आपको किन उपयोगकर्ताओं के लिए इसे सेट करने की आवश्यकता है और आप इसे कब और कैसे सेट करना चाहते हैं। आपके निर्णय का एक हिस्सा यह होगा कि क्या आप सभी उपयोगकर्ताओं के लिए या प्रति-उपयोगकर्ता के आधार पर एक पर्यावरण चर सेट करना चाहते हैं। यदि आप निश्चित नहीं हैं, तो मैं इसे सिर्फ़ एक उपयोगकर्ता (जैसे, आपका खाता) के लिए व्यवस्थित करने के बजाय इसे सेट करने की सलाह देता हूं।

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

इस प्रकार, व्यवहार में, जब PATHकई फाइलों से सेट किया जाता है, तो इसमें आमतौर पर सभी फाइलों में दी गई प्रविष्टियां होती हैं। लेकिन ऐसा केवल इसलिए होता है क्योंकि सभी फाइलें जो इसे सेट करती हैं, पहले वाले को छोड़कर, आमतौर पर PATHवेरिएबल को ही संदर्भित करती हैं, जिससे इसका पुराना मूल्य नए में शामिल हो जाता है।

इसलिए, आप प्रभाव में उस क्रम के लिए पूछ रहे हैं जिसमें PATHविभिन्न फाइलों में सेटिंग्स प्रभावी होती हैं।

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

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

1. सभी उपयोगकर्ताओं के लिए: /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, आप चाहते हैं कि जब उपयोगकर्ता लॉग इन करे, तब भी इसका प्रारंभिक मूल्य हो। उपयोगकर्ता इसे तब बदल सकता है जब वे चाहें। आमतौर पर उपयोगकर्ताओं के लिए ऐसा करने में सक्षम होना अच्छा है।

2. सभी उपयोगकर्ताओं के लिए: /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

यह मत करो!

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

3. एक उपयोगकर्ता के लिए: .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_environmentman pam_envman 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-accountsu

4. सभी उपयोगकर्ताओं के लिए: /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/इसके बजाय।

5. एक उपयोगकर्ता के लिए: .bash_profileउपयोगकर्ता के घर निर्देशिका में

एक उपयोगकर्ता है ~/.bash_profile, बैश यह बजाय का उपयोग करता है की ~/.profileया ~/.bash_login(नीचे देखें)। आप आमतौर पर .bash_profileअपने घर निर्देशिका में नहीं होना चाहिए ।

यदि आप करते हैं, तो यह आमतौर पर स्रोत ~/.profile(जैसे, . "$HOME/.profile") के लिए एक कमांड शामिल होना चाहिए । अन्यथा, प्रति-उपयोगकर्ता .profileफ़ाइल की सामग्री बिल्कुल नहीं चलती है।

6. एक उपयोगकर्ता के लिए: .bash_loginउपयोगकर्ता के घर निर्देशिका में

यदि किसी उपयोगकर्ता के पास ~/.bash_loginबैश है , तो इसके बजाय ~/.profile(नीचे देखें) का उपयोग करता है , जब तक कि ~/.bash_profileमौजूद नहीं है, तब तक किसी भी स्थिति में अन्य का उपयोग नहीं किया जाएगा जब तक कि `~ / .bash_login से प्राप्त नहीं किया जाता है।

के रूप में .bash_profile, आप आमतौर पर .bash_loginअपने घर निर्देशिका में एक फ़ाइल नहीं होना चाहिए ।

7. एक उपयोगकर्ता के लिए: .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


1
[टिप्पणी # 2 का 1] इस व्यापक विवरण के लिए धन्यवाद! (मैंने एक मामूली संपादन किया।) हालांकि, मुझे संदेह है कि अनुशंसित तरीके के बारे में संदेह है। कुछ साल पहले EnvironmentVariables उल्लेख /etc/environment/ ~/.pam_environmentके रूप में सिफारिश की फ़ाइलें। डेवलपर्स के साथ परामर्श करने के बाद मैंने इसे PAM और / के बीच तटस्थ रहने के लिए बदल दिया , और मैं अभी भी इसे इस तरह से देखना चाहता हूं। /etc/profile.d/*.sh~/.profile
गुन्नार हेजलमरसन

1
[टिप्पणी # २ का २] आपने PAM के पक्ष में कुछ दलीलों का उल्लेख किया। /etc/profile.d/*.sh/ के पक्ष में महत्वपूर्ण तर्क ~/.profileयह है कि सिंटैक्स सरल है और लाइटमैड / जीडीएम त्रुटियों के मामले में क्षमा कर रहे हैं (सिंटैक्स त्रुटियां आपको लॉग इन करने से नहीं रोकती हैं, लेकिन सिर्फ चेतावनी संदेशों में परिणाम करती हैं)।
गुन्नार हेजलमरसन

जब आप कहते हैं pam_env.so, क्या आपका मतलब था pam_env.conf?
जोहान बोउले

@ जोहानबौले हां, मेरा मतलब था pam_env.conf। धन्यवाद! मैंने इसे ठीक करने के लिए संपादन किया है।
एलियाह कगन

3

/ etc / पर्यावरण फ़ाइल एक स्क्रिप्ट फ़ाइल नहीं है जिसे आप वहां निर्यात नहीं कर सकते हैं और यह $ HOME के ​​चर विस्तार का समर्थन नहीं करता है, बस simplevariable = मूल्य जोड़े। तो उस फ़ाइल का उपयोग करने के लिए, आपको बस मौजूदा परिभाषा में अपना रास्ता जोड़ना होगा, विशेष रूप से सिस्टम-वाइड वातावरण चर सेटिंग्स के लिए है। प्रति पंक्ति एक। विशेष रूप से, यह फ़ाइल सिस्टम-वाइड लोकेल और पथ सेटिंग्स को संग्रहीत करती है।

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


1

पर्यावरण चर सेट करने के लिए पसंदीदा जगह कई चीजों पर निर्भर करती है:

  1. क्या आप केवल कंप्यूटर का उपयोग कर रहे हैं:
    • इस मामले में यह स्थापित करने के लिए सबसे अच्छी जगह होगी /etc/environmentक्योंकि वहाँ _unauthorized पहुँच का कोई खतरा नहीं है।
  2. यदि सिस्टम कई द्वारा उपयोग किया जाता है
    • यदि चर सभी द्वारा पहुँचा जाना चाहिए तो स्थान होगा /etc/environment, लेकिन
    • यदि व्यक्तिगत उपयोगकर्ताओं को उन तक पहुंच का चयन करना चाहिए , तो प्रत्येक को~/.profile सिस्टम के प्रत्येक उपयोगकर्ता से संबंधित होना चाहिए क्योंकि यह प्रत्येक कंप्यूटर होम डायरेक्टरी में स्थित है।

सिस्टम पढ़ने /etc/environmentसे पहले पढ़ेगा ~/.profile। कोई अतिक्रमण नहीं होता है और एलेक्स पी ने कहा कि पथ के लिए अंतिम असाइनमेंट प्रबल है।

कारक है कि कैसे निर्धारित पर अधिक विस्तृत देखने के लिए ~/.profileऔर /etc/environmentइस तरह के अन्य स्थानों के साथ बाहर खेलने जाने के लिए यहाँ और यहाँ , के रूप में इन कारकों आप इन स्थानों का उपयोग को प्रभावित करती है।

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