/Etc/profile.d में स्क्रिप्ट क्या करते हैं?


85

मैं लिनक्स कमांड लाइन और शेल स्क्रिप्टिंग बाइबल से मूल शेल स्क्रिप्टिंग के बारे में पढ़ रहा हूं ।

यह कहता है कि /etc/profileफ़ाइल बैश शेल के स्टार्टअप पर पर्यावरण चर को सेट करती है। /etc/profile.dनिर्देशिका अन्य लिपियों कि आवेदन विशेष स्टार्टअप फ़ाइलों, जो भी खोल से स्टार्टअप समय में क्रियान्वित कर रहे हैं शामिल हैं।

  • /etc/profileअगर वे बैश स्टार्टअप के लिए भी महत्वपूर्ण हैं तो ये फाइलें क्यों नहीं हैं?

  • यदि ये फाइलें एप्लिकेशन-विशिष्ट स्टार्टअप फाइलें हैं जो बैश स्टार्टअप के लिए महत्वपूर्ण नहीं हैं, तो वे स्टार्टअप प्रक्रिया का हिस्सा क्यों हैं? वे केवल तभी क्यों नहीं चलाए जाते हैं जब विशिष्ट अनुप्रयोग, जिसके लिए वे सेटिंग्स हैं, निष्पादित होते हैं?

जवाबों:


71

अगर ये बैश स्टार्टअप के लिए भी महत्वपूर्ण हैं तो ये फाइलें / etc / प्रोफाइल का हिस्सा क्यों नहीं हैं?

यदि आप का अर्थ है, "वे सिर्फ एक विशाल लिपि में क्यों नहीं संयुक्त हैं?", उत्तर है:

  1. क्योंकि यह लिपियों के लिए ज़िम्मेदार लोगों के लिए एक बुरा सपना होगा।
  2. क्योंकि लिपियों को स्वतंत्र मॉड्यूल के रूप में लोड करने से पूरी प्रणाली अधिक गतिशील रूप से समायोज्य हो जाती है - दूसरों को प्रभावित किए बिना व्यक्तिगत स्क्रिप्ट को जोड़ा और हटाया जा सकता है। आदि।
  3. क्योंकि वे / etc / प्रोफाइल के माध्यम से लोड किए जाते हैं जो उन्हें वैसे भी bash "प्रोफाइल" का हिस्सा बनाता है।

यदि ये फाइलें एप्लिकेशन-विशिष्ट स्टार्टअप फाइलें हैं जो बैश स्टार्टअप के लिए महत्वपूर्ण नहीं हैं, तो वे स्टार्टअप प्रक्रिया का हिस्सा क्यों हैं? वे केवल तब ही क्यों नहीं चलाए जाते हैं जब विशिष्ट अनुप्रयोग, जिसके लिए वे सेटिंग्स होते हैं, निष्पादित होते हैं?

यह मुझे एक व्यापक डिजाइन दर्शन प्रश्न की तरह लगता है जिसे मैं दो भागों में विभाजित करूँगा। पहला सवाल शेल पर्यावरण का उपयोग करने के मूल्य और उपयुक्तता के बारे में है। क्या इसका सकारात्मक मूल्य है? हाँ, यह उपयोगी है। क्या यह सभी विन्यास मुद्दों का सबसे अच्छा समाधान है? नहीं, लेकिन यह सरल मापदंडों के प्रबंधन के लिए बहुत कुशल है, और व्यापक रूप से पहचाना और समझा भी जाता है। इसके विपरीत, ऐसी चीजों को पूरी तरह से कॉन्फ़िगर करने का निर्णय लेते हुए, शायद $ PATH को एक अलग स्वतंत्र टूल द्वारा प्रबंधित किया जा सकता है, पसंदीदा उपकरण जैसे $ EDITOR कहीं साइक्लाइट फाइल में हो सकता है, $ LC लैंग सामान एक टेक्स्ट फाइल के साथ हो सकता है। कस्टम प्रारूप कहीं और, आदि - बस env चर का उपयोग नहीं करता है और/etc/profile.dअचानक सरल लगता है? आप शायद पहले से ही जानते हैं कि एक एनवी चर क्या है, वे कैसे काम करते हैं और उनका उपयोग कैसे किया जाता है, बनाम 5 जो कि पर्यावरण को " उचित " कहा जाता है, के 5 अलग-अलग सर्वव्यापी पहलुओं के लिए 5 पूरी तरह से अलग तंत्र सीखना ।

दूसरा सवाल है, "क्या स्टार्टअप इसके लिए उपयुक्त समय है?", जो इस आपत्ति को बताता है कि यह बहुत कुशल नहीं है (यह सब डेटा जो उपयोग किया जा सकता है या नहीं हो सकता है, आदि)। परंतु:

  • वास्तविक रूप से, यह सब इतना अधिक डेटा नहीं है, आंशिक रूप से क्योंकि उनके दाहिने दिमाग में कोई भी इसे कुछ सरल मापदंडों से अधिक के लिए उपयोग नहीं करेगा (क्योंकि एप्लिकेशन को कॉन्फ़िगर करने के अन्य साधन हैं)।
  • यदि यह बुद्धिमानी से उपयोग किया जाता है, तो आमतौर पर आह्वान करने वाली चीजों के संबंध में, तो सेटिंग, उदाहरण के लिए, डिफ़ॉल्ट रूप से $ CFLAGS एक फ़ाइल से हर बार कहीं भी आप gccकम कुशल होंगे। ध्यान रखें कि इसमें शामिल मेमोरी की मात्रा फिर से, अनंत है।
  • इसमें प्रणालीगत चीजें शामिल हो सकती हैं जो एक से अधिक एप्लिकेशन के साथ शामिल हो सकती हैं, और शेल एक सामान्य जमीन है

उस सूची में और अधिक जोड़ा जा सकता है, लेकिन उम्मीद है कि यह आपको इस मुद्दे के पेशेवरों और विपक्षों के बारे में कुछ विचार देता है - प्रमुख 'समर्थक' और प्रमुख 'कोन' यह एक वैश्विक नामस्थान है।


Does it have positive ... and understood.आप यहाँ क्या कहना चाह रहे हैं? मुझे उस पैराग्राफ के अलावा सब कुछ समझ में आया।
एशेश्र

3
शेल पर्यावरण का उपयोग आमतौर पर शेल स्वयं और अन्य सर्वव्यापी उपकरण को कॉन्फ़िगर करने के लिए किया जाता है। यह एकमात्र तरीका नहीं है कि कॉन्फ़िगरेशन किया जा सकता है, इसलिए यह विचार करने योग्य है कि क्या पर्यावरण अन्य विकल्पों की तुलना में बेहतर या बदतर है। "सकारात्मक मूल्य" होने से, मेरा मतलब था कि पर्यावरण का उपयोग करने से कम से कम WRT "सरल मापदंडों का प्रबंधन" करने के अन्य विकल्पों पर कुछ फायदे प्रतीत होते हैं - अर्थात् यह बहुत ही कुशल और "व्यापक रूप से मान्यता प्राप्त और समझ में आया" ... और मैं 'उस वाक्यांश को आगे समझाने के लिए थोड़ा जोड़ना होगा।
गोल्डीलॉक्स

Profile.local को जोड़ने वाली लाइनों के बारे में क्या? क्या यह स्वीकार्य है।
अवींद्र गोलचरण

@AvindraGoolcharan विभिन्न डिस्ट्रोस इस तरह की चीजों के लिए विभिन्न योजनाओं का उपयोग कर सकते हैं। profile.dनिर्देशिका ही काम करता है, क्योंकि इसकी सामग्री sourced रहे हैं द्वारा /etc/profileइस तरह के एक स्टार्टअप फ़ाइल (में मंगलाचरण के रूप बैश के रूप में है, जो गोले द्वारा निर्दिष्ट किया जाता man bash); यदि आप संपादित करते हैं /etc/profile, तो आप अक्षम कर सकते हैं /etc/profile.d/etc/profile.localलगता है एक SUSE आविष्कार है, संभवतः कहीं से खट्टा हो /etc/profileताकि आप अपना सामान वहां रख सकें। हालाँकि, यदि आप इसे एक गैर SUSE प्रणाली में ले जाते हैं और कोई अन्य समायोजन नहीं करते हैं, तो इसका उपयोग किसी भी चीज़ से नहीं किया जाएगा।
गोल्डिलॉक्स

गोत्चा, यह क्रिस्टल स्पष्ट है। हाँ, हम अपने काम में SUSE का उपयोग करते हैं। / etc / प्रोफ़ाइल। एक बेहतर शर्त की तरह लगता है।
अवींद्र गोलचरण

13

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

इसके अलावा एक साइड नोट, /etc/profileसभी गोले द्वारा खट्टा है, न कि केवल बैश। बैश विशिष्ट कॉन्फ़िगरेशन फ़ाइल bashrc है और केवल इंटरैक्टिव गोले के लिए sourced है।


3
दूसरा पैराग्राफ दिलचस्प है। चूंकि अलग-अलग गोले अलग-अलग सिंटैक्स का समर्थन करते हैं, इसलिए यह आवश्यक होगा कि एक महत्वपूर्ण आम सिंटैक्स हो। बैश और श के लिए सही है, लेकिन मैं दूसरों के लिए ऐसा नहीं सोचता, जैसे कि csh या tsh, जिनकी अपनी वैश्विक लॉगिन स्टार्टअप स्क्रिप्ट है। कई प्रणालियों पर, बिन / श / बस / बिन / बैश के लिए एक कड़ी है। लेकिन bash अपने व्यवहार को शॉक के रूप में प्रस्तुत करने के लिए सकारात्मक-अनुरूप बनाता है। तो किसी को लगता है कि /etc/profile.d में स्क्रिप्ट के लेखकों को पॉज़िट सबसेट के बाहर बैश एक्सटेंशन का उपयोग करने से बचने के लिए सावधानी बरतने की आवश्यकता होगी।
सूतक

लिनक्स के तहत दो प्रमुख शेल प्रकारों के लिए अलग .csh और .sh फाइलें हैं।
निरा

0

जोर्डनम का उत्तर गलत है। /etc/profileसभी गोले द्वारा खट्टा नहीं है। जैसा कि आप इंगित करते हैं, यह द्वारा sourced नहीं है csh, tcsh- मुझे यकीन नहीं है zsh। यह बॉर्न शेल ( sh) व्युत्पन्न, जैसे कोर्न शेल ( ksh) और बीएएसएच ( bash) द्वारा खट्टा है । cshका उपयोग करता है /etc/login। जो लोग विशेष रूप से बॉर्न शेल डेरिवेटिव का उपयोग करते हैं वे अन्य शेल को भूल जाते हैं। वे /etc/profile"सभी उपयोगकर्ताओं" पर लागू होने की अपेक्षा में कुछ जोड़ते हैं और तब आश्चर्य होता है जब विषम सी शेल उपयोगकर्ता (और हम एक अजीब बहुत हैं) में उनके द्वारा कॉन्फ़िगर किए गए सामान नहीं हैं /etc/profile

फिर भी, लोग अन्य बोर्न शेल व्युत्पन्न गोले के बारे में भूल जाते हैं। यदि वे उपयोग करते हैं bashया ksh, वे सिंटैक्स जोड़ने के लिए स्वतंत्र महसूस करते हैं, तो /etc/profileबॉर्न शेल में मान्य नहीं है, जैसे कि एक चर को परिभाषित करना और उसी लाइन पर निर्यात करना। फिर आपको कुछ स्क्रिप्ट मिलती है #!/bin/shजो सिंटैक्स पर चोक करती है। /etc/profileबॉर्न शेल संगत सिंटैक्स से चिपके रहना चाहिए।

इसी तरह, आपको इसे अपने आप में रखना चाहिए .profile( .bash_profileयदि आप कुछ बैश सिंटैक्स चाहते हैं) का उपयोग करें - यह थोड़ा अतिरिक्त टाइपिंग हो सकता है, लेकिन यह अतिरिक्त टाइपिंग है जो आप एक बार करते हैं। संदर्भ ${HOME}और नहीं ~, आदि। यूनिक्स के कुछ जायके, क्रोन जॉब्स के तहत चलते हैं sh, आपकी प्रत्येक पंक्ति Makefileद्वारा संसाधित की जाती है sh, इसलिए यदि आप यूनिक्स के कई स्वादों में काम कर रहे हैं, तो यह वास्तव में आपके .profileबॉर्न शेल को संगत रखने के लिए भुगतान करता है । SysAdmin के रूप में, मैं आपको यह नहीं बता सकता कि मैंने .profileबॉर्न शेल संगत होने के लिए कितनी बार किसी को ठीक करने में मदद की है ।

लिनक्स पर, /bin/shएक लिंक है /bin/bashऔर जब आप इसे चलाते हैं, तो यह एक रास्ता दिखता है जिसे इसे चलाने के लिए इस्तेमाल किया गया था, और (सिद्धांत रूप में) केवल उन चीजों तक ही सीमित है जो बॉर्न शेल का समर्थन करता है। इसी तरह, viलिनक्स पर वास्तव में vim, फिर से खुद को सीमित कर रहा है। कभी-कभी आपको "ब्लीड" के माध्यम से सुविधाएँ दिखाई देती हैं। कभी-कभी vimहोने का दिखावा viकुछ ऐसा करेगा जो vimसमर्थन viकरता है क्योंकि ऐसा नहीं है क्योंकि लेखक vim"vi पीछे संगतता" मोड में इसे अक्षम करना भूल गए हैं। मैं आश्चर्यचकित नहीं होता अगर bashनाटक करने के लिए shकुछ समान "ब्लीड" फीचर्स के साथ हो। आश्चर्य नहीं होगा यदि कुछ फ़ीचर "लिनक्स पर बोर्न शेल पर काम करता है", लेकिन सिस्टम वी या बीएसडी आधारित यूनिक्स (एआईएक्स, ओपनबीएसडी, आदि) पर नहीं।


क्या आप सुनिश्चित हैं कि "लिनक्स /bin/shपर एक लिंक है /bin/bash"? यह एक ध्वनि कथन है।
41754
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.