Согласно man sudo
sudo -i
запускает оболочку входа в систему и должен в моем понимании читать/создавать ~/.profile
, т.е. /root/profile
или [не корневой пользователь home/.profile
и /etc/profile
. Добавление псевдонимов, например, alias ll='ls -la'
к обоим файлам не делает псевдоним доступным в оболочке, запускаемой sudo -i
. Если я запускаю bash
в оболочке, запущенной sudo -i
, псевдонимы доступны.
Я уже разобрался, что нужно поместить алиасы в /etc/profile.d/00-aliases.sh
в https://askubuntu.com/questions/810730/how-to-share-bash-aliases-between-non-root-user-bash-and-shell-opened-by-sudo. Здесь я просто хочу знать, почему ожидаемое поведение не происходит.
Я сообщил об этом как об ошибке sudo на launchpad.net, но теперь я не уверен, может ли это быть хитрым аспектом ожидаемого поведения. То, как man sudo
описывает -i
, в любом случае слишком тривиально.
Считываемые файлы зависят от оболочки целевого пользователя. Так, например, если вы sudo -u user1 -i
и user1 использует csh
, тогда он будет читать ~ user1 / .login
. Для пользователей ksh это будет ~ user1 / .profile
.
Для пользователей bash
(например, root
) файл читается как ~ / .bash_profile
, если он существует, с откатом на ~ /.profile
eg
% sudo head -1 /root/.bash_profile /root/.profile
==> /root/.bash_profile <==
echo RUNNING BASH_PROFILE
==> /root/.profile <==
echo RUNNING PROFILE
% sudo -i
RUNNING BASH_PROFILE
root@server:~# rm /root/.bash_profile
root@server:~# exit
logout
% sudo -i
RUNNING PROFILE
root@server:~#
Итак, мы видим, что наличие .bash_profile
препятствует запуску .profile
. Это нормальное поведение для оболочек входа в bash
, независимо от того, осуществляется ли доступ через ssh или через sudo -i
.