Я видел много комментариев здесь в Ask Ubuntu относительно предпочтения в использовании sudo -s
, а не sudo su
.
Для меня эти две команды делают то же самое. Но почему sudo -s
должен быть лучше?
Я думаю, что sudo -s не «лучше», это просто другое.
sudo -s
хранит ваш каталог $ HOME, поэтому, когда вы запускаете программы, они будут использовать ваши (и не root) конфигурационные файлы и т. д. Недостаток: они также могут изменить право собственности на ваши файлы в каталоге $ HOME, типичным примером является файл .Xauthority, но я никогда не испытывал проблемы с этим.
Программыsudo su или sudo -i
будут использовать домашний каталог root и его файлы конфигурации. Это может быть более интуитивно понятным, но это также означает, что он не будет использовать какую-либо конфигурацию, которую вы могли бы установить для себя (псевдонимы, история bash, ...).
Поскольку sudo -s не изменяет ваши переменные среды, особенно $HOME, который останется HOME=/home/USER. Если вы используете sudo su, это изменится на HOME=/root, что может иметь отрицательные побочные эффекты, когда запущенные программы пытаются получить доступ к домашнему каталогу вашего пользователя.
Так что в основном это похоже на sudo vs gksudo, когда запуск графических программ.
Помимо уже упомянутых различий с переменными среды, я нахожу sudo su глупым и расточительным, потому что вы просите sudo запустить su как root и попросить его запустить оболочку как root. Зачем спрашивать программу, чтобы программа предложила вам корневую оболочку, когда вы можете просто предоставить первой программе эту оболочку? Это имеет значение в каком-либо практическом смысле? Нет, я просто педантичен.
Я бы не согласился с другими ответами при рассмотрении случаев, когда вы хотите войти в систему как пользователь, у которого нет оболочки. Это очень распространенный случай с пользователями, назначенными службам.
Использование «sudo su» запустит оболочку, указанную пользователем. Однако в случае пользователя, назначенного серверному процессу, оболочка: / usr / bin / false, и ведение журнала не выполняется. Вместо этого вы должны ввести:
sudo -sHu <server-user>
, который будет записывать вас в систему и cd на свой домашний путь, даже если у пользователя нет оболочки, назначенной