Як ви сказали у своєму запитанні, головна відмінність - навколишнє середовище.
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 -
. Вони створили проблему, і тепер ведуться нескінченні дискусії щодо того, як її вирішити.