सवाल 'सुडो सु -' बनाम 'सूडो-आई' बनाम 'सूडो / बिन / बैश' - जब इसका कोई फर्क पड़ता है, या क्या इससे कोई फर्क पड़ता है?


जब मैं ऐसा कुछ कर रहा हूं जिसके लिए पंक्ति में कई बार रूट की आवश्यकता होती है, तो मैं अपने सत्र को रूट सत्र में बदलना पसंद करता हूं। इंटरनेट पर उपयोग किए जाने वाले विभिन्न ट्यूटोरियल और निर्देशों में, मैं देखता हूं sudo su, sudo su -, sudo -i तथा sudo /bin/bash रूट सत्र खोलने के लिए इस्तेमाल किया जा रहा है, लेकिन मैं इन और जब या अंतर के मामले में अंतर के बारे में स्पष्ट नहीं हूं।

क्या कोई इसे मेरे लिए साफ़ कर सकता है?


196
2017-11-12 23:30


मूल


आप के बारे में पूछना भूल गए sudo -s तथा sudo su। - Radu Rădeanu
सम्बंधित: "सु", "सुडो-एस", "सुडो-आई" के बीच का अंतर - Radu Rădeanu
सम्बंधित: 'सुडो कमांड' और 'सुडो श कमांड' के बीच क्या अंतर है? - Radu Rădeanu
सम्बंधित: सुडो सु और सुडो-आई के बीच कार्यात्मक अंतर क्या है? - Radu Rădeanu
@ RaduRădeanu जब मैंने प्रश्न टाइप किया तो मैंने सुझाए गए प्रश्नों की समीक्षा की और उनमें से कोई भी वास्तव में मेरे पूरे प्रश्न को संबोधित नहीं किया। आपके द्वारा लिंक किए गए प्रश्नों के लिए भी यही सच है। यद्यपि उनमें मेरे लिए बहुत सारी नई जानकारी है, और उनसे जोड़ने के लिए धन्यवाद, मैंने उन्हें नीचे दिए गए उत्तर उपयोगकर्ता अराजकता के रूप में पूर्ण नहीं पाया, जो कि मैं जो खोज रहा था उसके अनुरूप है। - Paul


जवाब:


इसे समझाने के लिए आपको यह जानने की जरूरत है कि कार्यक्रम क्या करते हैं:

su - आदेश su किसी अन्य उपयोगकर्ता पर स्विच करने के लिए प्रयोग किया जाता है (रों डायन यू सेर), लेकिन आप पैरामीटर के साथ कमांड का आह्वान करके रूट उपयोगकर्ता पर भी स्विच कर सकते हैं। su उपयोगकर्ता के पर्यावरण पर स्विच किए गए पासवर्ड टाइप करने के बाद, उपयोगकर्ता को स्विच करने के लिए पासवर्ड के लिए पूछता है।

sudo - sudo मूल विशेषाधिकारों के साथ एक एकल आदेश चलाने के लिए है। लेकिन इसके विपरीत su यह आपको वर्तमान उपयोगकर्ता के पासवर्ड के लिए संकेत देता है। यह उपयोगकर्ता sudoers फ़ाइल (या एक समूह जो सूडो फाइल में है) में होना चाहिए। डिफ़ॉल्ट रूप से, उबंटू 15 मिनट के लिए आपका पासवर्ड याद करता है, ताकि आपको हर बार अपना पासवर्ड टाइप न करना पड़े।

bash - कंप्यूटर के साथ बातचीत करने के लिए एक पाठ इंटरफ़ेस। लॉगिन, गैर-लॉगिन, इंटरैक्टिव और गैर-इंटरैक्टिव शैल के बीच अंतर को समझना महत्वपूर्ण है:

  • लॉगिन खोल: एक लॉगिन खोल आपको निर्दिष्ट उपयोगकर्ता के रूप में सिस्टम में लॉग करता है, इसके लिए आवश्यक उपयोगकर्ता नाम और पासवर्ड है। जब आप हिट करते हैं ctrl+alt+एफ 1 एक लॉगिन वर्च खोलने के बाद आपको एक वर्चुअल टर्मिनल में लॉगिन करने के लिए मिलता है।
  • गैर-लॉगिन खोल: लॉग इन किए बिना निष्पादित एक खोल, इसके लिए आवश्यक वर्तमान में लॉग-इन उपयोगकर्ता है। जब आप gnome में ग्राफ़िक टर्मिनल खोलते हैं तो यह एक गैर-लॉगिन खोल है।
  • इंटरैक्टिव खोल: एक खोल (लॉगिन या गैर-लॉगिन) जहां आप अंतःक्रियात्मक रूप से आदेश टाइप या बाधित कर सकते हैं। उदाहरण के लिए एक gnome टर्मिनल।
  • गैर-इंटरैक्टिव खोल: ए (उप) खोल जो शायद स्वचालित प्रक्रिया से चलती है। आप न तो इनपुट और न ही आउटपुट देखेंगे।

sudo su कॉल sudo आदेश के साथ su। बैश को इंटरैक्टिव गैर-लॉगिन खोल के रूप में जाना जाता है। तो बस केवल निष्पादित करता है .bashrc। आप देख सकते हैं कि रूट पर स्विच करने के बाद भी आप एक ही निर्देशिका में हैं:

user@host:~$ sudo su
root@host:/home/user#

sudo su - इस बार यह एक लॉगिन खोल है, तो /etc/profile, .profile तथा .bashrc निष्पादित किया जाता है और आप रूट के पर्यावरण के साथ रूट की होम निर्देशिका में खुद को पा सकते हैं।

sudo -i यह लगभग समान है sudo su - -I (प्रारंभिक लॉगिन अनुकरण) विकल्प लक्ष्य उपयोगकर्ता के पासवर्ड डेटाबेस प्रविष्टि द्वारा लॉगिन खोल के रूप में निर्दिष्ट खोल चलाता है। इसका मतलब है कि लॉगिन-विशिष्ट संसाधन फ़ाइलें जैसे कि .profile, .bashrc या .login खोल द्वारा पढ़ा और निष्पादित किया जाएगा।

sudo /bin/bash इसका मतलब है कि आप कॉल करते हैं sudo आदेश के साथ /bin/bash/bin/bash गैर-लॉगिन खोल के रूप में शुरू किया गया है, इसलिए सभी डॉट-फाइल निष्पादित नहीं की जाती हैं, लेकिन बैश स्वयं पढ़ता है .bashrc कॉलिंग उपयोगकर्ता का। आपका पर्यावरण वही रहता है। आपका घर रूट का घर नहीं होगा। तो आप रूट हैं, लेकिन कॉलिंग उपयोगकर्ता के पर्यावरण में।

sudo -sपढ़ता है $SHELL परिवर्तनीय और सामग्री निष्पादित करता है। अगर $SHELL शामिल /bin/bash यह invokes sudo /bin/bash (ऊपर देखो)।

चेक: यह जांचने के लिए कि क्या आप लॉगिन शेल में हैं या नहीं (केवल इसलिए बाश में काम करता है shopt एक अंतर्निहित कमांड है):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'

258
2017-11-13 09:43



बस एक स्पष्टीकरण: sudo एक अनुमत उपयोगकर्ता को सुपरसियर के रूप में कमांड निष्पादित करने की अनुमति देता है या कोई अन्य उपयोगकर्ता। वैसे भी, आपके प्रयास के लिए +1। - Radu Rădeanu
@chaos इस उत्कृष्ट उत्तर के लिए धन्यवाद! यह ज्यादातर मेरे प्रश्नों का उत्तर देता है, इसलिए मैं आगे बढ़ गया और सवाल का जवाब दिया, लेकिन मुझे समझ में नहीं आता कि जब यह एक विशेष खोल चलाने के लिए वांछनीय है। मैं वास्तव में केवल कमांड लाइन के माध्यम से उबंटू का उपयोग करता हूं और मुझे खोलने के लिए मेरा सबसे आम उपयोग मिलता है root उपयोगकर्ता सत्र (बनाम बनाम sudo) वह है जब मैं ऐसा कुछ कर रहा हूं जिसके लिए भारी उपयोग की आवश्यकता है root विशेषाधिकार, जैसे कि कुछ नया स्थापित करना या एक प्रमुख पुनर्गठन करना। मैं उपयोग कर रहा हूँ sudo /bin/bash, लेकिन स्पष्ट रूप से उस विधि को किसी कारण से खराब रैप है जिसे मैं समझ नहीं पा रहा हूं। - Paul
इसके अलावा, यह कहने के लिए और अधिक "सही" है कि सुपर उपयोगकर्ता के बजाय स्विच उपयोगकर्ता के लिए खड़ा है। अर्थात। एक php स्क्रिप्ट चलाएं: su www-data /usr/share/script.php या इंटरैक्टिव शैल के लिए बस www-data। लेकिन किसी उपयोगकर्ता नाम के बिना su रूट (सुपर उपयोगकर्ता) खाता मानेंगे। - oblivian
कैओस - "shopt -q login_shell && echo 'लॉगिन खोल' || echo 'कोई लॉगिन खोल' 'इस तरह के सुझाव अक्सर मैं देखता हूं, लेकिन इसे इतना लंबा क्यों बनाते हैं? & & ऑपरेटर का अर्थ है कि अगर बाहर निकलें कोड 0 "अगला आदेश करें" और डबल पाइप (||) का अर्थ है (यदि नहीं 0) तो यह आदेश करें। तो मूल रूप से यह कह रहा है कि अगर बाहर निकलें कोड 0 तो "लॉग इन शैल" गूंजें, अगर बाहर निकलें कोड 1 (असफल) तो "कोई लॉगिन नहीं" गूंजें। क्यों न सिर्फ "shopt -q login_shell; echo $?" $? का मतलब है कि पिछले कमांड का परिणाम / निकास कोड। सबसे अधिक यदि सभी प्रोग्राम 0 का अर्थ सफलता का नहीं है, तो 1 या अधिक साधन विफल हो जाते हैं। तो अगर गूंज 0 = सफलता है ... - oblivian
@Paul: sudo -i सुझाव दिया जाता है। यहां पढ़ें: ubuntuforums.org/showthread.php?t=1817402 और यहाँ: unix.stackexchange.com/questions/98531/... - Marco Sulla