Як ви сказали у своєму запитанні, головна відмінність - навколишнє середовище.
sudo su - vs. sudo -i
У випадку, якщо sudo su -це оболонка входу, значить /etc/profile, .profileі .bashrcвони виконуються, і ви опинитеся в домашньому каталозі root із середовищем root.
sudo -iмайже такі ж , як і (імітувати початковий логін) опція запускає оболонку , зазначену в запису бази даних пароля цільового користувача в якості оболонки. Це означає , що Логін конкретних ресурсів , таких як файли , або буде читати і виконана оболонкою.sudo su --i.profile.bashrc.login
sudo su vs. sudo -s
sudo suдзвінки sudoза допомогою команди su. Bash називається інтерактивною оболонкою без входу. Так bashвиконуються тільки .bashrc. Ви можете бачити, що після переходу на root ви все ще знаходитесь в одному каталозі:
user@host:~$ sudo su
root@host:/home/user#
sudo -sчитає $SHELLзмінну і виконує вміст. Якщо він $SHELLмістить, /bin/bashвін викликає sudo /bin/bash, а це означає, що /bin/bashвін запускається як не-вхідна оболонка, тому всі dot-файли не виконуються, а bashсам зчитується. bashrcвиклику користувача. Ваше оточення залишається таким же. Ваш дім не буде домом кореня. Отже, ви root, але в оточенні виклику користувача.
Висновок
-iПрапор був доданий sudoв 2004 році , щоб забезпечити аналогічні функції sudo su -, тому sudo su -був шаблон для sudo -iі призначений для роботи , як це. Я думаю, що насправді не має значення, яким ви користуєтесь, якщо тільки навколишнє середовище не важливе.
Доповнення
Основним моментом, який тут слід зазначити, є те, що він sudoбув розроблений для запуску лише однієї команди з більш високими привілеями, а потім передачі цих привілеїв до оригінальних. Це ніколи не мало на меті по-справжньому переключити користувача та залишити відкриту кореневу оболонку. З часом sudoрозширювалися подібні механізми, тому що люди дратувались, чому використовувати sudoперед кожною командою.
Тож значення sudoзловживали. sudoмав на меті заохотити користувача мінімізувати використання привілеїв root.
Те, що ми маємо зараз, sudoстає все більш популярним. Він інтегрований у майже кожен добре відомий дистрибутив Linux. Оригінальним інструментом для переходу на інший обліковий запис користувача є su. Для старої школи * nix ветеран така штука sudoможе здатися непотрібною. Це додає складності та поводиться швидше до механізмів, відомих нам із сімейства Microsofts os, і, таким чином, суперечить філософії простоти * nix систем.
Я насправді не ветеран, але, на мою думку, sudoзавжди був шипом у моєму боці, з тих пір, коли було запроваджено, і я завжди працював навколо використання sudo, якщо це було можливо. Я найбільше неохоче користуюся sudo. У всіх моїх системах увімкнено кореневий рахунок. Але все зміниться, можливо, настане час, коли suбуде застаріле і sudoзамінено suповністю.
Тому я думаю, що найкраще буде використовувати sudoвнутрішні механізми ( -s, -i) замість того, щоб покладатися на старий інструмент, такий як su.
ubuntuце заважає користувачам бути стандартнимиsu -. Вони створили проблему, і тепер ведуться нескінченні дискусії щодо того, як її вирішити.