这在很大程度上取决于您如何使用sudo
或调用程序su
。
例如,在此刻我所在的系统上:
.bashrc
COMMAND $HOME $USER Env. $PATH
1. sudo -i (root) root root [1]
2. sudo -s (USER) root USER /home/${USER}/bin:[1]
3. sudo /bin/bash (USER) root USER /home/${USER}/bin:[1]
4. sudo su (root) root USER [1]:/usr/games:/usr/local/games
5. sudo su - (root) root root [1]
其中[1] = / usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin
Env =将环境变量重置为1和5,取自$ USER in 2,3,4。
因此,一个脚本,或与不同的选项可以看到不同的启动了一项计划$PATH
,$HOME
其外壳可以读取不同.bashrc
,.profile
和环境变量。它读取与相关的文件$HOME
。每个用户可以以不同的方式(变量$PATH
,.bashrc,.profile,.bash_profile,别名...)修改其环境。特别是,用户可以在其目录中使用不同顺序的目录,$PATH
因此,脚本可以执行命令,例如,/home/$USER/bin
从根目录开始,然后从路径中选择一个命令。
您可以在sudo -i
以root身份登录的情况下在该程序下运行该程序su -
,但是如果使用sudo MyCommand
或来运行该程序,则可能会有不同的行为su -c MyCommand
。
来自man su
:
在描述部分:
当前环境传递给新的shell。对于普通用户,$ PATH的值将重置为/ bin:/ usr / bin,对于超级用户,$ PATH的值将重置为/ sbin:/ bin:/ usr / sbin:/ usr / bin
...
在选项部分:
-,- l ,--login
提供类似于用户直接登录该用户所期望的环境。
从人 sudo
-i,--login
运行目标用户的密码数据库条目指定的外壳程序作为登录外壳程序。这意味着Shell将读取特定于登录的资源文件,例如.profile或.login。如果指定了命令,则通过外壳的-c选项将其传递到外壳以执行。如果未指定命令,则执行交互式外壳程序。 sudo
尝试在运行外壳程序之前更改为该用户的主目录。 该命令在与用户登录时会收到的环境类似的环境下运行。sudoers(5)手册中的“命令环境”部分记录了使用sudoers策略时-i选项如何影响运行命令的环境。