对于以“sudo -i”启动的 shell,会读取哪些 shell 配置文件?

对于以“sudo -i”启动的 shell,会读取哪些 shell 配置文件?

根据man sudo sudo -i启动登录 shell,在我的理解中应该是 read/source ~/.profile,即/root/profileor[non-root user home/.profile/etc/profile。添加别名(例如,alias ll='ls -la'向两个文件添加别名)不会使别名在 . 启动的 shell 中可用sudo -i。如果我bash在 shell 中运行,则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。在这里我只想知道为什么预期的行为没有发生。

我将此报告为launchpad.net 上的 sudo 错误,但现在我不确定这是否是预期行为的一个棘手方面。无论如何man sudo描述的方式-i都太琐碎了。

答案1

读取的文件取决于目标用户的 shell。因此,例如,如果您sudo -u user1 -i和 user1 使用,csh那么它将读取~user1/.login。对于 ksh 用户来说,它是~user1/.profile.

对于bash用户(例如root),读取的文件~/.bash_profile是否存在,并回退到~/.profile

例如

% 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登录 shell 的正常行为,无论是通过 ssh 登录还是通过sudo -i.

相关内容