Jos*_*ght 47 sudo environment-variables
如何为服务器上的所有用户设置 PATH 变量中的说明?努力为所有“普通”用户设置 PATH。但是,如果我这样做sudo -s
,则printenv PATH
不会显示更新的路径。我已经查看了例如Setting TeX Live path for root,但这对我来说似乎没有意义,也许因为我来自 Windows 背景。有没有办法设置真正的系统范围的路径,以便系统上运行的每个进程绝对继承条目?
lga*_*rzo 49
更新:
设置全局环境变量仍应在 中执行/etc/environment
,但正如您所指出的, usingsudo -s
会导致这些变量“消失”。
原因是sudo
有一个重置环境和设置安全路径的策略。它默认启用:
/etc/sudoers:
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Run Code Online (Sandbox Code Playgroud)
因此,在/etc/environment
for 路径中设置的任何内容都被 覆盖sudo
。
sudoers
状态手册页:
env_reset If set, sudo will reset the environment to only contain
the LOGNAME, MAIL, SHELL, USER, USERNAME and the SUDO_*
variables. 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 the secure_path option is set,
its value will be used for the PATH environment
variable. This flag is on by default.
Run Code Online (Sandbox Code Playgroud)
作为一种解决方法,您可以使用sudo su
它将提供具有 root 权限但包含正确 PATH 的 shell。
原答案
你应该把它设置在/etc/environment
.
尝试sudo YOUR_TEXT_EDITOR /etc/environment
(确保先创建备份)。
有关更多信息:环境变量
系统范围的环境变量
影响整个系统(而不是特定用户)的环境变量设置不应放在加载系统或桌面会话时执行的许多系统级脚本中的任何一个中,而应放在
/etc/environment
- 此文件专门用于系统范围的环境变量设置。它不是一个脚本文件,而是由赋值表达式组成,每行一个。具体来说,此文件存储系统范围的区域设置和路径设置。不建议:
/etc/profile
- 每当进入 bash 登录 shell 时(例如从控制台或通过 ssh 登录时),以及在桌面会话加载时由 DisplayManager 执行,都会执行此文件。当您向资深 UNIX 系统管理员询问有关环境变量的问题时,您可能会参考该文件。然而,在 Ubuntu 中,这个文件只调用 /etc/bash.bashrc 文件。
/etc/bash.bashrc
- 这是 ~/.bashrc 文件的系统范围版本。Ubuntu 默认配置为在用户进入 shell 或桌面环境时执行此文件。