लॉगिन और गैर-लॉगिन गोले क्या हैं?


78

ऐसा कहा जाता है कि .bashrcफाइल में जाने के लिए नॉन लॉगइन शेल के लिए सेटिंग्स और फाइल में जाने के लिए शेल सेटिंग्स को लॉगिन करना होगा .profile

लॉगिन और गैर-लॉगिन गोले का वास्तव में क्या मतलब है?

जहां तक ​​संभव हो तकनीकी शब्दजाल का उपयोग किए बिना समझाएं।

जवाबों:


83

सीधे शब्दों में कहें:

  • यदि आप एक शेल या टर्मिनल खोलते हैं (या एक पर स्विच करते हैं), और यह आपको लॉग इन करने के लिए कहता है (उपयोगकर्ता नाम? पासवर्ड?) इससे पहले कि यह आपको संकेत दे, यह एक लॉगिन शेल है।
  • यदि यह ( गनोम-टर्मिनल की तरह ) नहीं है, और आपको इसे सीधे उपयोग करने देता है, तो यह एक गैर-लॉगिन शेल है।

यदि आप उबंटू डेस्कटॉप के एक सामान्य उपयोगकर्ता हैं, तो एकमात्र लॉगिन शेल है ... आपका डेस्कटॉप (आप सही में, पाने के लिए पासवर्ड टाइप करते हैं?) ठीक है, तकनीकी रूप से यह एक लॉगिन शेल है जो एक जीयूआई शुरू करता है, लेकिन यह शब्दजाल में आ रहा है। और हाँ, यह सेटिंग्स को पढ़ेगा.profile

केवल समय आप (एक सामान्य उपयोगकर्ता) शायद एक लॉगिन खोल कि देखेंगे लग रहा है एक लॉगिन कवच की तरह आप अपने डेस्कटॉप के साथ कुछ समस्या हो रही है और आप के साथ एक आभासी टर्मिनल के लिए स्विच अगर है Ctrl+ Alt+ F1शॉर्टकट।


लॉगिन शेल होने के अन्य सामान्य मामलों में शामिल हैं:

  • अपने कंप्यूटर को दूरस्थ रूप से एक्सेस करना ssh(या स्थानीय रूप से कनेक्ट करना ssh localhost)
  • bash -l(या sh -l) के साथ एक प्रारंभिक लॉगिन शेल का अनुकरण करना
  • के rootसाथ एक प्रारंभिक लॉगिन शेल का अनुकरण करनाsudo -i
    • या किसी अन्य गैर उपयोगकर्ता के लिएsudo -u username -iroot
  • (और उनके पासवर्ड के साथ) एक और गैर rootउपयोगकर्ता के रूप में प्रमाणितsu - username
  • sudo loginउपयोगकर्ता को स्विच करने के लिए कमांड का उपयोग करना

यदि मैं टर्मिनल से अपना ग्रहण आईडीई शुरू करता हूं, तो यह अपेक्षा के अनुसार खुलता है, लेकिन अगर मैं इसे ग्रहण आइकन पर क्लिक करके खोलने की कोशिश करता हूं, तो यह जावा स्थान को पहचानने में असमर्थ है (जब तक कि जावा के लिए पाथ इन .profile फ़ाइल में सेट न हो)। इसका मतलब है कि ग्रहण आइकन पर क्लिक करने के लिए लॉगिन शेल की आवश्यकता है, क्यों?
DUKE

2
@DUKE, नहीं, इसका मतलब है कि जब आप डेस्कटॉप / GUI बनाम एक सच्चे कमांड-लाइन-ओनली कंसोल सिस्टम का उपयोग कर रहे हैं तो पर्यावरण चर को अलग तरह से सेट करने की आवश्यकता है। अपना पेटीएम, आदि ~/.pam_environment(केवल चर, वहां कोई बैश कमांड नहीं!) डालें , लॉगआउट करें, लॉगिन करें और सब कुछ जादुई रूप से डेस्कटॉप के साथ-साथ सूक्ति-टर्मिनल में भी देखें!
ish

1
Ssh के माध्यम से लॉगिन एक लॉगिन शेल का आह्वान नहीं करता है। यह लोड नहीं करता है /etc/profile, /etc/profile.dया ~/.profile
xuhdev


@ xuhdev ssh के माध्यम से लॉगिन लॉगिन खोल देता है और यह लोड / etc / प्रोफाइल, /etc/profile.d और ~ / .bash_profile करता है।
माइकलजेड

9

मुझे नहीं लगता कि "तकनीकी शब्दजाल" के बिना सही उत्तर दिया जा सकता है। चूँकि यह प्रश्न Google में पहले प्रश्न के लिए है कि "एक लॉगिन शेल क्या है" मैं नीचे अधिक सही उत्तर प्रदान कर रहा हूँ:

लॉगिन शेल केवल एक शेल है जिसे लॉगिन शेल कहा गया था। इसका मतलब यह नहीं है कि आप लॉगिन करने के बाद पॉप अप करते हैं, हालांकि आमतौर पर जो एप्लिकेशन आपको लॉग इन करता है, वह शेल को यह बताता है कि यह लॉगिन शेल है। शेल को यह बताने के लिए निम्न तरीके मौजूद हैं कि यह एक लॉगिन होना चाहिए:

  1. शेल खोलना -lया --loginतर्क के साथ यह मान लेना कि वह इसे जानता है (मैं किसी ऐसे शेल को नहीं जानता जो नहीं जानता -l, लेकिन --loginकेवल कुछ शेल द्वारा समर्थित है)।
  2. रनिंग शेल argv[0]टू सेट -{some_string}(यानी HYPHEN-MINUS के साथ सामान्य argv[0]या किसी अन्य स्ट्रिंग के लिए पूर्वनिर्मित )। यह ssh और su क्या है: su बस के -suरूप में निष्पादन योग्य है argv[0]( जैसा कि हर कोई सोच रहा argv[0]है कि वर्तमान में चल रहे नाम के साथ कुछ करने के लिए कुछ है) के साथ निष्पादन योग्य है, ssh -zshउपयोगकर्ता के /bin/zshअपने शेल के रूप में सेट होने पर zsh चलाता है ।

शेल की तार्किकता का किसी से कोई लेना-देना नहीं है, जो आपसे पासवर्ड पूछ रहा है या कुछ अन्य प्रक्रिया कर रहा है। कुछ प्रोग्राम जैसे ssh या login (या कुछ टर्मिनल एमुलेटर जैसे urxvt) argv[0]एक HYPHEN-MINUS के साथ शुरू होने वाले लॉगिन का उपयोग करके गोले चलाते हैं । सु या सुडो (या zsh: जैसे कि -प्रीकमैंड मॉडिफ़र इन सेक्शन में वर्णित प्रीकैंड मॉडिफ़ायर देखें man zshmisc) डिफ़ॉल्ट रूप से ऐसा नहीं करते हैं, लेकिन ऐसा कहा जा सकता है। शेल को अपने तर्क (अर्थात bash -l) का उपयोग करके लॉगिन बताने का एकमात्र विकल्प है : ssh एक कमांड तर्क के साथ (जो स्पष्ट रूप से ssh को बताता है कि रिमोट अंत पर क्या चलाना है)।

आम तौर पर यह पहली बार खोल आह्वान करने के लिए इस्तेमाल किया कार्यक्रम के प्रलेखन से परामर्श करने के (जोड़कर जैसे यह निर्धारित खोल लॉगिन एक हो जाएगा और दूसरा निर्धारित करने के लिए एप्लिकेशन एक लॉगिन खोल शुभारंभ करेंगे कि क्या कुछ परीक्षण करने के लिए बेहतर है echoकरने के लिए .profile)।


मुझे दूसरे विकल्प में दिलचस्पी है: मैं वास्तव में bash को लागू करने से पहले (या बाद में) argv [0] कैसे बदल सकता हूं? क्या इसे कमांड लाइन से किया जा सकता है?
वेदरहार्डकोड

@VeryHardCoder यह आपके द्वारा कमांड को चलाने के लिए उपयोग किए जाने वाले एप्लिकेशन पर निर्भर करता है। सी कोड में यह argv[0]किसी एक exec*कार्य, प्राकृतिक और अपरिहार्य को सीधे आपूर्ति करके किया जाता है : आप हमेशा दोनों को आपूर्ति करते हैंargv[0] और कमांड का पथ वास्तव में exec*फ़ंक्शन का उपयोग करते समय चलाते हैं , भले ही आप कभी भी argv[0]कमांड रन से अलग नहीं होना चाहते । अन्य भाषाएं अपने तरीके प्रदान करती हैं। विशेष रूप से बैश का उपयोग करने की अनुमति देता है exec -a new_argv0 bash, लेकिन यह, ज़ाहिर है, वर्तमान में चल रहे शेल को बदलेगा जो भी आप execएड करते हैं, इसलिए आपको (exec -a -zsh zsh)
सबहेल

ठीक मिल गया! वास्तव में, यह एक सरल तरीके से भी किया जा सकता है: (निष्पादन-एल बैश) ...
VeryHardCoder

1
दोनों के बीच कार्यात्मक अंतर क्या है? क्या यह बस एक बूलियन झंडा है?
एलेक्सी

@Alexey मुख्य कार्यात्मक अंतर स्टार्टअप पर उपयोग की जाने वाली कॉन्फ़िगरेशन फ़ाइलों का एक सेट है। $0, और, शायद कुछ और भी (चर, सेटिंग, आदि) सेट किया गया है ताकि कॉन्फ़िगरेशन फ़ाइल में शेल की तार्किकता का पता लगाया जा सके, लेकिन कौन वास्तव में इसका पता लगाता है, इसलिए इससे कोई फर्क पड़ेगा? मुझे बस इतना पता है।
20
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.