В чем разница между sudo -s
и sudo -i
и почему они дают мне разные оболочки? Похоже, что он -s
держит меня внутри bash
и -i
дает мне sh
.
В MacOSX High Sierra 10.13, если я ввожу sudo -s
в терминал и пароль, я получаю root в качестве имени пользователя, но со знаком доллара в приглашении:
user1@mymachine:~$ sudo -s
**root@mymachine:~$**
Но если я введу sudo -i
, то получу:
user1@mymachine:~$ sudo -i
Password:<br/>
**mymachine:~ root#**
Почему мне не отображается знак решетки #, если я root в примере выше с sudo -s
? Я не настоящий root?
Различаются ли переменные окружения между ними?
решение1
Первое, что вам нужно понять, это то, что sudo -s
эквивалентно sudo -s root
и sudo -i
эквивалентно sudo -i root
. Всякий раз, когда вы исключаете пользователя из sudo, предполагается, что вы указываете на пользователя root.
sudo -s
запускает оболочку от имени целевого пользователя и sudo -i
входит в систему как целевой пользователь.
При каждом запуске sudo -s
вы фактически меняете свою оболочку на оболочку пользователя root, при этом при каждом запуске sudo -i
вы фактически выходите из текущего пользователя и входите как root. Это важно знать, поскольку при каждом изменении оболочки на оболочку пользователя root вы все равно сохраняете экспортную информацию пользователя. При запуске sudo -i
вы выходите из пользователя и входите как root. Это означает, что вы принимаете конфигурацию оболочки пользователя root.
Это не имеет отношения к делу, но вам следует избегать изменения пользователя на root, потому что вы можете случайно что-то сломать, вам следует просто sudo для каждой команды, которая требует эскалации, даже если это раздражает. Если вы действительно хотите изменить на оболочку root, вам следует запустить, su
что позволит вам войти в систему как root.