Назад | Перейти на главную страницу

В чем разница между «sudo -i» и «sudo bash -l»

Eсть недавний вопрос относительно нескольких системных администраторов, работающих как root, и sudo bash -l был упомянут.

Я искал это в Google и SE, но не понимаю разницы между sudo bash -l и sudo -i.

Из страниц руководства для bash и sudo кажется, что разница может заключаться в том, что sudo bash -l запускает ~ / .bash_profile, ~ / .bash_login, и ~ / .profile, и ~ / .bash_logout пользователя root, но, судя по собственному тестированию, похоже, что он запускает .bashrc обычного пользователя, а не root. Возможно, я неправильно понял, на кого из пользователей ссылается выражение ~ на страницах руководства. Приветствуется разъяснение различий и сценариев использования.

Они отличаются тем, что если оболочка входа пользователя root, указанная в / etc / passwd, не является bash, то вторая команда предоставит вам оболочку bash как root, а первая команда будет использовать любую интерактивную оболочку, которая есть у пользователя root.

Также, чтобы добавить к ответу @ johnshen64, я заметил, что sudo -i вызов обновляет $USERNAME переменная env для root и cd ~ пользователю домой вот так;

$ sudo -i
[root@workstation001 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 ~]# echo $USERNAME
root
[root@workstation001 userXXX]# echo $PWD
/root

Однако для sudo bash -l $USERNAME не трогается, и рабочий каталог не изменяется. (хотя это не согласуется с другими пользователями, см. комментарии ...)

$ sudo bash -l
[root@workstation001 userXXX]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 userXXX]# echo $USERNAME
userXXX
[root@workstation001 userXXX]# echo $PWD
/home/userXXX

Предположительно, вы не получаете точно такой же набор ~/.bashrc, или не в том же порядке и т. д.

(моя коробка могла быть немного испорчена моим .bashrc возни, так ЫММВ)