bash.bashrc और / etc / पर्यावरण फ़ाइल के बीच अंतर


42

अब तक मैं bash.bashrcफ़ाइल में अपने पर्यावरण चर सेट करता था। हाल ही में मुझे /etc/environmentफ़ाइल का उपयोग करने के लिए कहा गया था । खैर, दोनों ठीक काम करते हैं।

तो, उनके बीच क्या अंतर है?

मैंने इसे भोगा और मैंने पाया "बैश आर्क का उपयोग विशेष रूप से उपयोगकर्ता और पर्यावरण, सिस्टम वाइड के लिए किया जाता है"। यहाँ सिस्टम वाइड से क्या तात्पर्य है? /etc/bash.bashrcमैं भी व्यापक परिवर्तन प्रणाली लागू कर रहा हूँ मुझे लगता है। अगर मैं ग़लत हूं तो मेरी गलती सुझाएं। किसी भी तरह की मदद की सराहना की जाएगी ।।

जवाबों:


35

एक अंतर यह है कि /etc/environmentइसमें केवल परिवर्तनशील परिभाषाएँ होती हैं और यह किसी भी प्रकार के चर विस्तार / प्रक्षेप के माध्यम से नहीं जाती है। इस प्रकार, आप परिभाषाओं में चर का संदर्भ नहीं दे सकते। उदाहरण के लिए यह काम नहीं करेगा:

A="else"
B="something $A"

B का शाब्दिक अर्थ होगा something $A, अपेक्षित नहीं something else

इस प्रश्न को देखें ।

वैसे, आपको Google के माध्यम से जो उत्तर मिला है ~/.bashrc, वह सिस्टम-वाइड के बजाय एक उपयोगकर्ता का संदर्भ देता है /etc/bash.bashrc। जो आपके भ्रम का कारण हो सकता है।


~ / .bashrc का उद्देश्य क्या है जब दो फाइलें होती हैं जो एक ही काम करती हैं / etc / environment और /etc/bash.bashrc?
ट्रेपंक

6
/Etc/bash.bashrc को किसी भी उपयोगकर्ता द्वारा बैश खोलने पर निष्पादित किया जाता है। ~ / .Bashrc को केवल तभी निष्पादित किया जाता है यदि होम डायरेक्टरी का मालिक जहां इसे सहेजा जाता है, वह एक बैश खोलता है।
एंड्रे स्टैनक

18

/etc/environmentफ़ाइल बूट पर प्रत्येक उपयोगकर्ता के लिए चर प्रणाली विस्तृत सेट। /etc/bash.bashrcयदि bashउपयोगकर्ता किसी भी उपयोगकर्ता द्वारा खोल दिया जाता है , तो कमांड को निष्पादित किया जाता है। जब तक कि bashशेल को कम से कम एक बार नहीं खोला जाता है, तब तक चर सेट नहीं किए जाएंगे ।


क्षमा करें, मैं linux के लिए नौसिखिया हूँ। whe बाश खोल खोला जाएगा? और एक और चीज जब बैश शेल खोली जाती है, तो क्या यह / etc / enviornment में वेरिएबल सेट को ओवरराइड करेगा या नहीं?
ट्रेपंक

मुझे यकीन नहीं है कि जब / etc / पर्यावरण को बिल्कुल निष्पादित किया जाता है लेकिन /etc/bash.bashrc को उबंटू द्वारा निष्पादित किया जाता है जब आप अपने डेस्कटॉप वातावरण में प्रवेश करते हैं। इसलिए यह काम करता है अगर आप वहाँ चर सेट करते हैं। मेरा अनुमान है कि आपके डेस्कटॉप में प्रवेश करने से पहले बूट करते समय / etc / पर्यावरण को निष्पादित किया जाता है और यह कि /etc/bash.bashrc का निष्पादन चर को अधिलेखित कर देता है। लेकिन एक बार फिर: मुझे इस पर यकीन नहीं है।
एंड्रे स्टैनक

4
यह लॉगिन पर है, बूट नहीं!
SLM

6

और जैसा कि आप " सिस्टम वाइड " के बारे में पूछ रहे हैं :

/etcनिर्देशिका में स्थित कॉन्फ़िगरेशन फ़ाइलें सिस्टम पर सभी उपयोगकर्ताओं पर लागू होती हैं। इसके लिए /etc/bash.bashrcउस मशीन पर "बॉर्न अगेन शॉल" उर्फ ​​बैश का उपयोग करने वाले सभी और सभी के लिए इसका मतलब होगा। यहां तक ​​कि अगर आप इसका उपयोग करने वाले एकमात्र मानव हैं, तो भी "तकनीकी उपयोगकर्ता" प्रभावित हो सकते हैं (बस एक नज़र डालें /etc/passwdऔर जांचें कि "/ बिन / बैश" शब्द को कितनी बार कहा गया है - या उपयोग करें grep bash /etc/passwd | wc -l, जो आपको देना चाहिए उस नंबर को सीधे (अर्थ: "स्ट्रिंग को पकड़ें, जिसमें" "फाइल से स्ट्रिंग" बैश "वाली सभी लाइनें" / etc / passwd "), और पंक्तियों को गिनने के लिए परिणाम (" | ") को कमांड" wc "(शब्द गणना) में भेजें। ( "एल")।

तो आपके उपयोगकर्ता के लिए, इसके ~/.bashrcबजाय संशोधित करना अधिक सुरक्षित है (मतलब फ़ाइल ".bashrc" - एक अग्रणी बिंदु के साथ, हाँ - आपके घर-निर्देशिका में, उदा /home/ankur/.bashrc), जो तब आपके उपयोगकर्ता को प्रभावित करता है और अकेले सब कुछ छोड़ देता है । /etcयदि सिस्टम-वाइड परिवर्तन वास्तव में करना चाहते हैं, तो फ़ाइलों को केवल तभी बदला जाना चाहिए।

इसके अलावा: यदि वे मौजूद हैं तो दोनों कॉन्फ़िगरेशन का उपयोग किया जाएगा। सबसे पहले, सिस्टम-वाइड फाइल (यहां /etc/bash.bashrc:) पढ़ा जाता है और "sourced" (यह वर्तमान सत्र के लिए लागू सेटिंग्स है), और फिर उपयोगकर्ताओं /home/username/.bashrcको एक ही तरह से संभाला जाता है, और इस प्रकार वैश्विक से सेटिंग्स को बदल या बदल सकते हैं /etc/bash.bashrcफ़ाइल।


3

प्रणाली चौड़ा और उपयोगकर्ता व्यापक गुंजाइश चर्चा, एक सबसे महत्वपूर्ण अंतर है परे /etc/environmentहै नहीं एक स्क्रिप्ट के अलावा अन्य ~/.bashrc

आप परिवर्तनशील चर को अंदर नहीं कर सकते /etc/environment, इसका चर असाइनमेंट जो लाइन वैल्यू को शाब्दिक रूप में लेता है (जैसा कि पहले ही रोडमैर द्वारा उल्लेख किया गया है)।

यदि आप नए रास्ते को जोड़ने की कोशिश करके अपने $PATHअंदर /etc/environmentको बाहर निकालते हैं तो आपका उबंटू आपको लॉक कर देगा

PATH=$PATH:/new_path

अगर आपका Ubuntu Gnome या Unity login पेज गलत पासवर्ड की शिकायत किए बिना आपको देने में विफल रहा। और आपने हाल ही में संशोधित किया है /etc/environment, यह सबसे अधिक संभावना है।

एक फिक्स वर्चुअल कंसोल CTRL+ ALT+ F1लॉगिन कंसोल को लॉगिन करना है, मैन्युअल रूप से जांचना $PATH, और /etc/environmentफ़ाइल को ठीक करना है।

के अनुसार इस , /etc/environmentपीएएम ढेर है, जो लाइन द्वारा वातावरण चर लाइन भरता द्वारा भरी हुई है।


-1

दोनों के बीच अंतर यह है कि /etc/enivironmentफ़ाइल सभी उपयोगकर्ताओं के लिए काम करेगी जबकि bash.bashrc फ़ाइल विशेष रूप से केवल उस उपयोगकर्ता के लिए काम करेगी। और यदि आप /etc/environmentफ़ाइल में कुछ भी गलत करते हैं तो परिणाम गंभीर हो सकते हैं जबकि आप / etc / एन्वायरमेंट फ़ाइल की सामग्री को कॉपी करके bash.bashrc फ़ाइल में परिवर्तनों को आसानी से पूर्ववत कर सकते हैं। लेकिन पहली वरीयता bash.bashrcफ़ाइल और फिर / etc / पर्यावरण फ़ाइल को दी जाती है। ऐसा नहीं है कि यदि आप bash.bashrcफ़ाइल में परिवर्तन करते हैं तो टर्मिनल स्थानीय उपयोगकर्ता फ़ाइल (यानी, bash.bashrc) और फिर मुख्य फ़ाइल (यानी, /etc/environment) को पहली वरीयता देगा ।


मुझे लगता है कि आप भ्रमित कर रहे हैं ~ / .bashrc और /etc/bash.bashrc फाइलें। पहला शेल खोलने वाले उपयोगकर्ता के लिए स्थानीय है, दूसरा शेल खोल रहे सभी उपयोगकर्ताओं के लिए वैश्विक है।
डेनिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.