एक ** लॉगिन ** शेल पर एक ** गैर-लॉगिन ** शेल क्यों?


24

मुझे * nix सिस्टम में dotfiles की बुनियादी समझ है। लेकिन मैं अभी भी लॉगिन शेल और नॉन-लॉगिन शेल के बीच इस अंतर के बारे में काफी उलझन में हूँ ?

विभिन्न उत्तरों का एक गुच्छा (कई डुप्लिकेट सहित) पहले ही निम्नलिखित गोलियों को संबोधित कर चुके हैं:

  • कैसे करने के लिए आह्वान एक लॉगिन या गैर लॉगिन खोल
  • कैसे करने के लिए पता लगाने के एक लॉगिन या गैर लॉगिन खोल
  • लॉगिन या गैर-लॉगिन शेल द्वारा स्टार्टअप फ़ाइलों का क्या उपभोग किया जाएगा
  • man bashअधिक विवरण के लिए प्रलेखन (जैसे, ) के लिए संदर्भित

क्या जवाब नहीं बताया (और भी कुछ मैं अभी भी उलझन में हूँ) है:

  • क्या है उपयोग के मामले एक के लॉगिन या गैर लॉगिन खोल? (उदाहरण के लिए, मैं सिर्फ कॉन्फ़िगर किया गया zshrcके लिए zshऔर है कि ज्यादातर निजी देव की आवश्यकता के लिए काफी है, मुझे पता है कि यह क्या के रूप में सरल रूप में नहीं है vimrcकरने के लिए vim)

  • एक गैर-लॉगिन शेल पर लॉगिन का उपयोग करने का क्या कारण है (विभिन्न स्टार्टअप फ़ाइलों और जीवन चक्रों का उपभोग करने के अलावा)?

जवाबों:


15

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

आम तौर पर, लॉगिंग के बाद आपके द्वारा चलाया जाने वाला हर दूसरा शेल लॉगिन शेल का वंशज (एक बच्चे का बच्चा ...) होगा, और इसलिए लॉगिन शेल से कई सेटिंग्स (पर्यावरण चर umask, आदि) विरासत में मिलेंगे । और, तदनुसार, विचार है कि लॉगिन प्रारंभ फ़ाइलें (है .login, .profileआदि) सेटिंग्स कि दाय हैं स्थापित करना चाहिए, और .bashrc(या कोई अन्य आप का उपयोग जो कुछ भी) जो कि (नहीं हैं संभाल set, shopt, गैर निर्यात खोल चर , आदि।)

एक और धारणा यह है कि लॉगिन आरंभीकरण फ़ाइलें (और केवल वे) को "भारी उठाने", यानी संसाधन-गहन कार्यों को करना चाहिए। उदाहरण के लिए, आप चाहते हैं कि जब भी आप लॉग इन करें (लेकिन उनमें से केवल एक प्रति (उदाहरण)) हो, तो आप पृष्ठभूमि में चलने वाली कुछ प्रक्रियाएँ कर सकते हैं। जब आप लॉगिन करते हैं तो आप कुछ स्थिति की जानकारी (जैसे, dfया who) प्रदर्शित कर सकते हैं, लेकिन हर बार जब आप एक नया इंटरैक्टिव शेल शुरू करते हैं। खासकर यदि आपके पास एक इंटरैक्टिव हैकार्यक्रम / संवाद (यानी, जो आपसे इनपुट मांगता है) जिसे आप हर बार लॉगिन करते समय चलाना चाहते हैं, आप शायद यह नहीं चाहते कि हर बार जब आप एक नया शेल शुरू करें। एक चरम उदाहरण के रूप में, बीस साल पहले सोलारिस ने आपको एक एकल, गैर-ग्राफिकल, गैर-विंडो शेल में लॉग इन किया था। (मुझे विश्वास है कि यह तब से बदल गया है।) यह का काम था .loginया .profile(या जो भी) जैसी कमांड के साथ, विंडोइंग प्रणाली शुरू करने के लिए startx। (यह आंशिक रूप से उपयोगी था क्योंकि कई विंडोिंग सिस्टम उपलब्ध थे। अलग-अलग उपयोगकर्ताओं की अलग-अलग प्राथमिकताएँ थीं। कुछ उपयोगकर्ताओं ने विभिन्न परिस्थितियों में अलग-अलग प्रणालियों का उपयोग किया, और हमारे पास एक संवाद था .profileजिसमें पूछा गया था कि "आप किस विंडो सिस्टम का उपयोग करना चाहते हैं?" जाहिर है, आप नहीं चाहेंगे कि हर बार जब आप एक नई विंडो खोलें या टाइप करेंsh

यह उम्र हो गई है क्योंकि मैंने bash किनारे के मामलों को छोड़कर कुछ भी इस्तेमाल किया है । (उदाहरण के लिए, मैं स्क्रिप्ट्स के साथ लिखता हूं #!/bin/sh, इसलिए कुछ सिस्टम पर, मेरी स्क्रिप्ट्स चलती हैं dash, और दूसरों पर वे bashपॉसिक्स मोड में चलते हैं । साल में कई बार मैं दौड़ता हूं csh/ tcshकुछ मिनटों के लिए यह देखता हूं कि यह कैसे कुछ संभालता है, या। एक प्रश्न का उत्तर दें।) यदि आप दैनिक आधार पर कई गोले (जैसे, bashऔर zsh) का उपयोग करते हैं, तो आपके पैटर्न भिन्न हो सकते हैं। यदि आपका प्राथमिक शेल (जैसा कि परिभाषित किया गया है /etc/passwd) है bash, तो आप एक zshलॉगिन शेल इनवॉइस करना चाहते हैं , और उसके बाद संभवत: कुछ इंटरएक्टिव नॉन-लॉगिन zshशेल को इनवॉइस पर भेज सकते हैं। आपको संभवतः एक लॉगिन शेल होने से बचना चाहिए जो उसी प्रकार के अन्य लॉगिन शेल के अधीन है।

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

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