为什么 root 和普通用户的 $PATH 值不同?

为什么 root 和普通用户的 $PATH 值不同?

对于普通用户我得到:

在 /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/monty/google_appengine

这实际上是/etc/environment

对于 root 我得到:

在 /usr/local/sbin 中:在 /usr/local/bin 中:在 /usr/sbin 中:在 /usr/bin 中:在 /sbin 中:在 /bin 中

这背后的原因是什么以及哪个文件包含此行?

答案1

PATH 是一个环境变量,因此当您更改环境时,它会“默认”或“重置”。请参阅以下 man sudoers说明:

 env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, SHELL, USER, USERNAME and the SUDO_* vari-
                   ables.  Any variables in the caller's environment that
                   match the env_keep and env_check lists are then added.
                   The default contents of the env_keep and env_check
                   lists are displayed when sudo is run by root with the
                   -V option.  If sudo was compiled with the SECURE_PATH
                   option, its value will be used for the PATH environment
                   variable.  This flag is on by default.

在 /usr/local/sbin 中:在 /usr/local/bin 中:在 /usr/sbin 中:在 /usr/bin 中:在 /sbin 中:在 /bin 中

是未经修改的基本路径。出于多种原因,不同的用户会添加不同的目录。

理由应该是:root 的 PATH 中永远不应该有比需要更多的目录。或者反过来:如果 root 需要一个文件,它应该在 中/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin。您不会以 root 身份玩游戏。您不会以 root 身份使用桌面管理器。root 是用于管理任务的。

wiki 上有更多信息(其中包括哪些文件可用于添加到 PATH):https://help.ubuntu.com/community/EnvironmentVariables

答案2

对于普通用户来说,诸如~/.profile、、~/.bash_profile之类的文件~/.bashrc可能会被添加到你的默认路径(该路径应该与你为 root 列出的路径相同)。

您可以检查其中任何一个文件(这些是我所知道的常见文件),查找如下行:

export PATH=$PATH:/usr/games:/usr/local/games:/home/monty/google_appengine
或者
export PATH=/usr/lib/lightdm/lightdm:$PATH

编辑

.bashrc并且.profile似乎有默认版本(/etc/profile//etc/bash.basrhc),/etc/您可以检查它们以获取Root的路径。

此外,/root/相当于。我希望该目录也包含文件、,这也有助于控制 的 $PATH 。/home/<username>root~/.profile~/.bash_profile~/.bashrcroot

相关内容