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


14

मुझे पता है कि इंटरैक्टिव / गैर-संवादात्मक और लॉगिन / गैर-लॉगिन गोले के बीच अंतर क्या है, लेकिन ऐसा लगता है कि व्यवहार में कभी भी एक गैर-संवादात्मक लॉगिन शेल होने वाला नहीं है जब तक कि आपके पास /bin/bash --login some-script.shस्क्रिप्ट में कुछ भी नहीं है (और यहां तक ​​कि लगता है थोड़ा अजीब)। क्या यह सही है या वे अधिक सामान्य हैं?


7
telnet towel.blinkenlights.nlगैर-संवादात्मक लॉगिन लॉग के लिए ;-)
मार्टिन टूरनोइज

1
इस प्रश्न का संक्षिप्त उत्तर इस लंबे उत्तर के भीतर दिया गया है
वाइल्डकार्ड

@ कैपटमैन: उत्तरों को देखते हुए, हमारे पास दो हैं जो "इंटरेक्टिव" के काफी भिन्न अर्थों पर केंद्रित हैं। इसके प्रकाश में आप अपने उत्तर को थोड़ा विस्तार से बता सकते हैं कि प्रश्न पूछने के दौरान आप किस अर्थ का उपयोग कर रहे थे?
cjs

जवाबों:


10

मुझे लगता है कि आप बश की अवधारणा के बारे में बात कर रहे हैं, गैर-लॉगिन और इंटरएक्टिव बनाम गैर-संवादात्मक बैश गोले के रूप में मैनपेज के इन्वोकेशन सेक्शन में वर्णित है । (यह फ़ाइल में "शेल" (या उपयोगकर्ता कमांड दुभाषिया) के रूप में उपयोग किए जाने वाले किसी भी मनमाना आदेश के जेम्स यंगमैन के जवाब में व्याख्या से अलग है passwd(5)और क्या यह कार्यक्रम उपयोगकर्ता इनपुट को स्वीकार करता है या नहीं; कुछ, जैसे /usr/sbin/nologin, स्पष्ट रूप से नहीं। )

आप सही हैं जो /bin/bash --login some-script.shएक गैर-संवादात्मक लॉगिन बैश इनवोकेशन का उत्पादन करेंगे, और यह शायद एक पैथोलॉजिकल उदाहरण है। एक मामला है, शायद असामान्य नहीं है लेकिन वास्तव में अजीब नहीं है, जो एक गैर-संवादात्मक लॉगिन शेल का उत्पादन करता है ssh somehost < some-file:। यहां sshdबैश की शुरुआत argv[0]सेट से होगी -bashक्योंकि इसे चलाने की आज्ञा नहीं दी गई है, जिससे बैश खुद को एक लॉगिन शेल मान सकता है, लेकिन, क्योंकि स्टड टर्मिनल से जुड़ा नहीं है, बैश खुद को इंटरएक्टिव मोड में सेट $-नहीं करेगा ( इसमें शामिल नहीं होगा i) ।

(व्यक्तिगत रूप से, यह मामला उस रूपांतरण की तुलना में कहीं अधिक उचित है ssh somehost somecommand, जिसे "लॉगिन शेल" नहीं माना जाता है, भले ही यह somehostउपरोक्त के समान ही एक नया लॉगिन हो ।)

मैंने हाल ही में वही किया है जो मुझे बहुत पहले करना चाहिए था और बैश के तौर-तरीकों की एक तालिका के साथ रखा गया था और इनआईट फाइलें चलाई गई थीं । यदि आप इसे भ्रामक समझ रहे हैं, तो कम से कम मैं भी यही करूंगा। यह मुझे पता चलता है कि .bashrcनिष्पादित होने के बारे में नियमों के साथ उनका मूल उद्देश्य क्या था ।


1

एक नए स्थापित सिस्टम पर गिनती के अधिकांश लॉगिन गोले वास्तव में गैर-संवादात्मक हैं:

$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c
  5 /bin/bash
 23 /bin/false
  1 /bin/sh
  1 /bin/sync
 17 /usr/sbin/nologin

स्पष्ट रूप से /bin/bashऔर /bin/shपारंपरिक गोले हैं और वे इंटरैक्टिव हैं। लेकिन उस सूची के अन्य सभी आइटम गैर-संवादात्मक हैं। आप सूची पढ़ रहे हैं और नहीं जानते कि उनमें से एक है, तो आप बस अपने मैनुअल पृष्ठ (उदाहरण के लिए के साथ देख सकते हैं man nologinया man sync)।

कमांड वास्तव में क्या करती है

कैप्टन मैन के पोस्टिंग इतिहास को देखकर मुझे लगता है कि वे यूनिक्स के साथ काफी अनुभवहीन हैं। तो शायद जवाब में शीर्ष पर कमांड लाइन से संबंधित नहीं होने के बारे में टिप्पणी में सवाल है, न केवल आउटपुट। इसलिए मैं कमांड-लाइन को भी समझाऊंगा, भले ही यह इस प्रश्न के लिए वास्तव में ऑफ-टॉपिक हो।

कमांड एक यूनिक्स पाइपलाइन है । एक पाइपलाइन आदेशों की एक श्रृंखला है - आप इसे बाएं से दाएं पढ़ते हैं - जिसमें पहली कमांड का आउटपुट दूसरे का इनपुट बन जाता है, दूसरे का आउटपुट तीसरे का इनपुट बन जाता है, और इसी तरह, जब तक कि पाइपलाइन का अंत। अंतिम प्रक्रिया का आउटपुट टर्मिनल पर दिखाया गया है (जब तक कि इसे पुनर्निर्देशित नहीं किया गया है)। देखें खोल पाइपलाइनों पर विकिपीडिया प्रविष्टि अधिक जानकारी के लिए।

यदि आपको समझ में नहीं आता है कि पाइपलाइन क्या कर रही है, तो आप इसे सेगमेंट में चला सकते हैं यह देखने के लिए कि क्या हो रहा है। आप उन कमांड के लिए मैनुअल पेज भी पढ़ सकते हैं जिनका उपयोग किया जा रहा है (यहां awk, sortऔर uniq)। वास्तव में, आपको अब ऐसा करना चाहिए। मैं इंतजार करूँगा।

आइए पाइपलाइन के चरणों को क्रमिक रूप से चलाएं (आप इसे सुरक्षित रूप से अपने यूनिक्स सिस्टम पर कर सकते हैं):

~$ awk -F:  '{print $7}' <  /etc/passwd | sed -e 's/^/    /'
/bin/bash
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/sync
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/usr/sbin/nologin
[ ... and so on, I've left the rest out ... ]

उपरोक्त आउटपुट /etc/passwdफ़ाइल से केवल सातवें क्षेत्र की सामग्री है । यह एक फ्लैट-टेक्स्ट-फ़ाइल) डेटाबेस है जो सिस्टम को बताता है कि हर किसी का लॉगिन शेल क्या है। यदि आप इसके बारे में और जानना चाहते /etc/passwdहैं तो इसे पढ़ें (यह विश्व-पठनीय है) और इसके लिए मैनुअल पेज देखें (man 5 passwd)

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

~$ awk -F:  '{print $7}' <  /etc/passwd | sort
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
[ ... and so on, I've left the rest out ... ]

हम कार्यक्रम uniqका उपयोग हमें केवल अद्वितीय आइटम दिखाने के लिए कर सकते हैं :

~ $ awk -F: '{प्रिंट $ 7}' </ etc / passwd | सॉर्ट | यूनीक | sede -e / s / ^ / '/ bin / bash / bin / false / bin / sh / bin / sync / usr / sbin / nologin

लेकिन रुको, यह कोई फायदा नहीं है, प्रत्येक में से कितने थे? आइए पूछते हैं uniq(मैन पेज पढ़ें!):

~$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c
      5 /bin/bash
     23 /bin/false
      1 /bin/sh
      1 /bin/sync
     17 /usr/sbin/nologin

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

~$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c | sort
     17 /usr/sbin/nologin
      1 /bin/sh
      1 /bin/sync
     23 /bin/false
      5 /bin/bash

रुको, यह सही नहीं हो सकता, 17 23 के बाद 1 और 5 से पहले आता है। समस्या यह है कि वस्तुओं को लेक्सोग्राफिक रूप से क्रमबद्ध किया जा रहा है । चलो sortउन्हें संख्यात्मक रूप से सॉर्ट करने के लिए कहें , और रिवर्स ऑर्डर में:

~$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c | sort -n -r
     23 /bin/false
     17 /usr/sbin/nologin
      5 /bin/bash
      1 /bin/sync
      1 /bin/sh

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


क्या आप कृपया थोड़ा और समझा सकते हैं? मुझे यकीन नहीं है कि मैं जो पढ़ रहा हूं उसका पालन करता हूं।
कप्तान मैन

है /bin/syncएक खोल? तो किसी भी उपयोगिता एक खोल है?
इलोन

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

2
आप एक अलग प्रश्न का उत्तर दे रहे हैं। आप केवल उपलब्ध गोले सूचीबद्ध कर रहे हैं और इंगित कर रहे हैं कि कुछ कभी भी इंटरैक्टिव नहीं होंगे। मेरा मानना ​​है कि ओपी पूछ रहा है कि क्या एक गैर-संवादात्मक लॉगिन शेल कभी जंगली में सामना किया गया है। तो क्या जो गोले इंटरैक्टिव हो सकते हैं, उदाहरण के लिए बैश, कभी गैर-इंटरैक्टिव लॉगिन गोले लॉन्च करें । दूसरे शब्दों में, यहां एक "लॉगिन शेल" का मतलब "उपयोगकर्ता का डिफ़ॉल्ट लॉगिन शेल" नहीं है, इसका मतलब है कि एक शेल जिसे लॉगिन शेल के रूप में लॉन्च किया गया है । देखें unix.stackexchange.com/a/46856/22222
terdon

1
या शायद, यह देखते हुए कि पोस्टर स्पष्ट रूप bash --loginसे प्रश्न में लिखता है, वह विशेष रूप से उन bashप्रक्रियाओं के बारे में पूछ रहा है जिनके पास iविकल्प निर्धारित नहीं है । (ये ssh somehost < script.shइस तरह के आदेशों से उत्पन्न होते हैं ; यह बैश मैनपेज के इनवोकेशन अनुभाग में निर्दिष्ट इंद्रियों में एक "लॉगिन, गैर-संवादात्मक" खोल होगा ।)
cjs
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.