जैसा कि आपने अपने प्रश्न में कहा है, मुख्य अंतर पर्यावरण का है।
sudo su - बनाम sudo -i
इसके मामले में sudo su -, एक लॉगिन शेल है, इसलिए /etc/profile, .profileऔर .bashrcनिष्पादित किया जाता है और आप रूट के वातावरण के साथ खुद को रूट के होम डायरेक्टरी में पाएंगे।
sudo -iलगभग वैसा ही है जैसा sudo su -कि -i(आरंभिक लॉगिन का अनुकरण) विकल्प लक्ष्य उपयोगकर्ता के पासवर्ड डेटाबेस प्रविष्टि द्वारा निर्दिष्ट शेल को एक लॉगिन शेल के रूप में चलाता है। इसका मतलब यह है कि लॉगिन-विशिष्ट संसाधन फ़ाइलें जैसे कि .profile, .bashrcया .loginशेल द्वारा पढ़ा और निष्पादित किया जाएगा।
sudo su बनाम sudo -s
sudo susudoकमांड के साथ कॉल करता है su। बैश को इंटरेक्टिव नॉन-लॉगइन शेल कहा जाता है। तो bashकेवल निष्पादित करता है .bashrc। आप देख सकते हैं कि रूट करने के बाद आप अभी भी उसी निर्देशिका में हैं:
user@host:~$ sudo su
root@host:/home/user#
sudo -s$SHELLचर को पढ़ता है और सामग्री को निष्पादित करता है। यदि $SHELLइसमें /bin/bashइनवोक होता है sudo /bin/bash, जिसका अर्थ है कि /bin/bashगैर-लॉगिन शेल के रूप में शुरू किया गया है, इसलिए सभी डॉट-फ़ाइलों को निष्पादित नहीं किया जाता है, लेकिन bashस्वयं पढ़ता है। bashrcकॉलिंग उपयोगकर्ता की। आपका वातावरण वैसा ही रहता है। तुम्हारा घर जड़ घर नहीं होगा। तो आप रूट हैं, लेकिन कॉलिंग उपयोगकर्ता के वातावरण में।
निष्कर्ष
-iध्वज को जोड़ा गया है sudoमें 2004 , के लिए एक समान कार्य प्रदान करने के लिए sudo su -है, तो sudo su -के लिए टेम्पलेट था sudo -iऔर यह की तरह काम करने के लिए होती। मुझे लगता है कि यह वास्तव में कोई फर्क नहीं पड़ता जो आप उपयोग करते हैं, जब तक कि पर्यावरण महत्वपूर्ण नहीं है।
इसके अलावा
यहाँ उल्लेख किया जाना चाहिए कि एक मूल बिंदु यह है कि उच्च विशेषाधिकार के साथ sudoकेवल एक ही आदेश को चलाने के लिए डिज़ाइन किया गया था और फिर उन विशेषाधिकारों को मूल लोगों को छोड़ दें। यह वास्तव में उपयोगकर्ता को स्विच करने और रूट शेल खोलने के लिए कभी नहीं था । समय के sudoसाथ, इस तरह के तंत्र के साथ विस्तार किया गया था, क्योंकि लोग इस बात से नाराज थे कि sudoहर आदेश के सामने क्यों उपयोग किया जाए।
अतः अर्थ का sudoदुरुपयोग किया गया। sudoउपयोगकर्ता को विशेषाधिकारों के उपयोग को कम करने के लिए प्रोत्साहित करने के लिए था।
अब हमारे पास जो है, sudoवह अधिक से अधिक लोकप्रिय हो गया है। यह लगभग हर प्रसिद्ध लिनक्स वितरण में एकीकृत है। किसी अन्य उपयोगकर्ता खाते पर स्विच करने का मूल उपकरण है su। एक पुराने स्कूल के लिए * निक्स वयोवृद्ध ऐसी चीज की sudoजरूरत नहीं लग सकती है। यह जटिलता को जोड़ता है और उन तंत्रों के बारे में अधिक संभावना रखता है जिन्हें हम माइक्रोसॉफ़्ट ओएस-परिवार से जानते हैं, और इस प्रकार * निक्स सिस्टम की सादगी के दर्शन के विपरीत है।
मैं वास्तव में एक अनुभवी नहीं हूं, लेकिन मेरी राय में भी sudoहमेशा मेरे पक्ष में एक कांटा था, जब से पेश किया गया था और मैंने हमेशा इसके उपयोग के चारों ओर काम किया sudo, अगर यह संभव था। मैं उपयोग करने के लिए सबसे अधिक अनिच्छुक हूं sudo। मेरे सभी सिस्टम पर, रूट खाता सक्षम है। लेकिन चीजें बदल जाती हैं, शायद समय आ जाएगा, जब suपदावनत किया जाएगा और पूरी तरह से sudoबदल suजाएगा।
इसलिए मुझे लगता है, यह सबसे अच्छा उपयोग करने के लिए किया जाएगा sudoके आंतरिक तंत्र ( -s, -iबजाय इस तरह के रूप में एक पुराने उपकरण पर भरोसा करने की) su।
ubuntuजो उपयोगकर्ताओं को मानक से रोकते हैंsu -। उन्होंने समस्या पैदा की और अब इसे सुलझाने के तरीके पर अंतहीन चर्चा हो रही है।