जैसा कि आपने अपने प्रश्न में कहा है, मुख्य अंतर पर्यावरण का है।
sudo su -
बनाम sudo -i
इसके मामले में sudo su -
, एक लॉगिन शेल है, इसलिए /etc/profile
, .profile
और .bashrc
निष्पादित किया जाता है और आप रूट के वातावरण के साथ खुद को रूट के होम डायरेक्टरी में पाएंगे।
sudo -i
लगभग वैसा ही है जैसा sudo su -
कि -i
(आरंभिक लॉगिन का अनुकरण) विकल्प लक्ष्य उपयोगकर्ता के पासवर्ड डेटाबेस प्रविष्टि द्वारा निर्दिष्ट शेल को एक लॉगिन शेल के रूप में चलाता है। इसका मतलब यह है कि लॉगिन-विशिष्ट संसाधन फ़ाइलें जैसे कि .profile
, .bashrc
या .login
शेल द्वारा पढ़ा और निष्पादित किया जाएगा।
sudo su
बनाम sudo -s
sudo su
sudo
कमांड के साथ कॉल करता है 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 -
। उन्होंने समस्या पैदा की और अब इसे सुलझाने के तरीके पर अंतहीन चर्चा हो रही है।