Яка різниця між "sudo -i" та "sudo bash -l"


13

Існує нещодавнє запитання щодо декількох системних адміністраторів, що працюють як root, і на sudo bash -lнього посилалося.

Я шукав це в Google і SE, але не розумію різниці між sudo bash -lі sudo -i.

Зі man-сторінок для bash та sudo видно, що різниця може полягати в тому, що він sudo bash -lпрацює ~ / .bash_profile, ~ / .bash_login та ~ / .profile, та ~ / .bash_logout кореневого користувача, але з тестування себе це виглядає як він запускає звичайний користувач .bashrc, а не кореневий. Можливо, я неправильно зрозумів, на якого користувача вираз ~ посилається на ман-сторінках. Пояснення різниць та сценаріїв використання було б вдячним.

Відповіді:


10

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


Привіт @ johnshen64, чи зможете ви уточнити різні сценарії використання?
Rqomey

2
людям подобається оболонка, яку вони використовують, тож якщо ви хочете обов’язково використовувати bash, тоді слід використовувати другу форму. друга форма також імітує фактичний логін (тобто, що означає -l). Звичайно, ви також можете просто ввести bash, коли виявите, що у користувача (за замовчуванням для root) немає bash як інтерактивної оболонки при використанні sudo -i. інакше різниця дуже незначна. як показує інша відповідь, також існують деякі незначні відмінності в навколишньому середовищі. в більшості випадків різниця не має значення, а перший - коротший, оскільки в більшості поширених дистрибутивів використовується bash. я рідко використовую 2-ю форму.
johnshen64

4

Крім того, щоб додати до @ 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роздумки, тому YMMV)


Спасибо @Tom H: echo $USERNAMEобидва рази повертає корінь для мене (на моєму робочому столі ubuntu та centos 5.2). Тим не менш, PWD є вашим повідомленням.
Rqomey
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.