Почему один пример предпочтительнее другого в этом примере?
sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit
Пожалуйста, предоставьте ссылки на документацию по Ubuntu.
Команда sudo su
обозначает «переключить пользователя» и позволяет вам стать другим пользователем. Это позволяет разрешенному пользователю выполнять команду от имени суперпользователя или другого пользователя, как указано в файле sudoers.
Параметр ‑i (имитировать первоначальный вход в систему) запускает оболочку, указанную в записи базы данных паролей целевого пользователя, в качестве оболочки входа в систему. Это означает, что специфичные для входа файлы ресурсов, такие как .profile или .login, будут читаться оболочкой. Если указана команда, она передается в оболочку для выполнения через параметр оболочки ‑c. Если команда не указана, выполняется интерактивная оболочка.
Источник: Manpage SUP>
Основная проблема - одна из (не очень) нормальных настроек среды.
Используя sudo su
, новая оболочка получает свою среду от пользователя, который выдает команду - что может быть проблематично.
С помощью sudo -i
вы получаете чистую корневую оболочку.
См. Специальные примечания по sudo и оболочкам.
Остается заметить, что создание корневой оболочки вообще не требуется вообще.
sudo su
только изменяет текущего пользователя на root. Настройки среды (например, PATH) остаются прежними.
sudo -i
создает новую среду, как если бы root только что вошел в систему.
Разница более заметна, если вы используете других пользователей. После sudo su bob
вы будете бобом, но там же. После sudo -i -u bob
вы будете находиться в домашнем каталоге bob с бобом по умолчанию для bob и с запущенными bob .profile
и любыми другими сценариями входа в систему.
См. man sudo
для более подробной информации о том, что -i
делает. К сожалению, man su
не так много деталей.
Нашел версию man su
(из login-1: 4.1.4.2 + svn3283-3ubuntu5.1), в которой сказано следующее:
$ PATH сброшен в соответствии с параметры /etc/login.defs ENV_PATH или ENV_SUPATH (см. ниже);
$ IFS сбрасывается в «< пробел> < tab> < newline>», если он был установлен.
Обратите внимание, что поведение среды по умолчанию следующее:
Переменные среды $ HOME, $ SHELL, $ USER, $ LOGNAME, $ PATH и $ IFS сбрасываются.
Если --login не используется, среда копируется, за исключением переменных выше.
Если используется --login, переменные среды $ TERM, $ COLORTERM, $ DISPLAY и $ XAUTHORITY копируются, если они были установлены.
Другие среды могут быть установлены модулями PAM.
blockquote>То, как и в какой степени
sudo su
изменит среду, зависит от вашего дистрибутива и настройки. Таким образом,sudo -i
теоретически является более переносимым.