Как вы указали в своем вопросе, главное отличие заключается в окружающей среде.
sudo su -
против sudo -i
В случае, если sudo su -
это оболочка входа в систему, значит /etc/profile
, .profile
и .bashrc
выполняются, и вы окажетесь в домашнем каталоге пользователя root со средой root.
sudo -i
почти такие же , как и (имитировать начальный логин) опция запускает оболочку , указанную в записи базы данных пароля целевого пользователя в качестве оболочки. Это означает , что Логин конкретных ресурсов , таких как файлы , или будет читать и выполнена оболочкой.sudo su -
-i
.profile
.bashrc
.login
sudo su
против 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
он запускается как не входящая в систему оболочка, поэтому все точечные файлы не выполняются, а bash
считываются сами. bashrc
вызывающего пользователя. Ваше окружение остается прежним. Ваш дом не будет домом root. Таким образом, вы являетесь пользователем root, но в среде вызывающего пользователя.
Заключение
-i
Флаг был добавлен sudo
в 2004 году , чтобы обеспечить аналогичные функции sudo su -
, поэтому sudo su -
был шаблон для sudo -i
и предназначен для работы , как это. Я думаю, что на самом деле не имеет значения, какой вы используете, если только среда не важна.
прибавление
Основной момент, который должен быть упомянут здесь, заключается в том, что sudo
он предназначен для запуска только одной команды с более высокими привилегиями, а затем отбрасывает эти привилегии до исходных. Он никогда не предназначался для того, чтобы действительно переключать пользователя и оставлять открытой корневую оболочку. Со временем sudo
был расширен с такими механизмами, потому что люди были раздражены о том, почему использовать sudo
перед каждой командой.
Таким образом, значение sudo
было злоупотреблено. sudo
должен был побудить пользователя минимизировать использование привилегий root.
То, что мы имеем сейчас, sudo
становится все более популярным. Он интегрирован почти во все известные дистрибутивы Linux. Оригинальный инструмент для переключения на другую учетную запись пользователя su
. Для ветеранов старой школы * nix такая вещь sudo
может показаться ненужной. Это добавляет сложности и ведет себя скорее к механизмам, которые мы знаем из семейства ОС Microsoft, и, таким образом, противоречит философии простоты * nix систем.
Я на самом деле не ветеран, но, на мой взгляд, sudo
всегда был занозой в моей стороне, с того времени, как это было введено, и я всегда работал над использованием sudo
, если это было возможно. Я очень неохотно пользуюсь sudo
. На всех моих системах учетная запись root включена. Но все изменится, возможно, придет время, когда su
будет устареть и полностью sudo
заменить su
.
Поэтому я думаю, что будет лучше использовать sudo
внутренние механизмы ( -s
, -i
), а не полагаться на старый инструмент, такой как su
.
ubuntu
которые мешают пользователям стандартsu -
. Они создали проблему, и сейчас идут бесконечные дискуссии о том, как ее решить.