如何为服务器上的所有用户设置PATH变量中的说明?努力为所有“普通”用户设置PATH。但是,如果这样做sudo -s
,则printenv PATH
不会显示更新的路径。我看过例如为root设置TeX Live路径,但这对我来说似乎没有意义,也许是因为我来自Windows背景。是否有任何方法可以设置真正的系统范围的路径,以使条目绝对被系统上运行的每个进程继承?
如何为服务器上的所有用户设置PATH变量中的说明?努力为所有“普通”用户设置PATH。但是,如果这样做sudo -s
,则printenv PATH
不会显示更新的路径。我看过例如为root设置TeX Live路径,但这对我来说似乎没有意义,也许是因为我来自Windows背景。是否有任何方法可以设置真正的系统范围的路径,以使条目绝对被系统上运行的每个进程继承?
Answers:
更新:
设置全局环境变量仍应在中执行/etc/environment
,但是正如您所指出的那样,使用sudo -s
具有这些变量的作用“消失”了。
这样做的原因是sudo
有一个重置环境和设置安全路径的策略。默认情况下启用:
/etc/sudoers:
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
因此/etc/environment
,在路径中设置的任何内容都将被覆盖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.
作为一种解决方法,您可以使用sudo su
它将为shell提供root特权但包含正确的PATH。
原始答案
您应该将其设置为/etc/environment
。
尝试sudo YOUR_TEXT_EDITOR /etc/environment
(确保首先创建备份)。
有关更多信息:EnvironmentVariables
系统范围的环境变量
影响整个系统(而不是特定用户)的环境变量设置不应放在加载系统或桌面会话时执行的许多系统级脚本中的任何一个中,而应放在
/etc/environment
-该文件专门用于系统范围的环境变量设置。它不是脚本文件,而是由赋值表达式组成,每行一个。具体来说,此文件存储系统范围的语言环境和路径设置。不建议:
/etc/profile
-每当输入bash登录外壳程序(例如,从控制台或通过ssh登录)时,以及在桌面会话加载时,DisplayManager都会执行此文件。向老UNIX系统管理员询问环境变量时,可能会引用该文件。但是,在Ubuntu中,此文件只需要执行/etc/bash.bashrc文件即可。
/etc/bash.bashrc
-这是〜/ .bashrc文件的系统范围版本。默认情况下,Ubuntu配置为在用户进入外壳程序或桌面环境时执行此文件。
visudo
(需要root权限)来编辑安全路径设置。不建议这样做。它只是在这里进行教育。
sudo -i
将模拟登录(与相似sudo su -
),从而为您提供这些环境变量。