设置PATH使其适用于所有用户,包括root / sudo

如何为服务器上的所有用户设置PATH变量中的说明? 努力为所有“普通”用户设置PATH。 但是,如果我执行sudo -s然后使用printenv PATH ,则不会显示更新的路径。 我已经看了一下例如为Root设置TeX Live路径 ,但这对我来说似乎没有意义,也许是因为我来自Windows背景。 有没有办法设置真正的系统范围的路径,这样条目绝对是在系统上运行的每个进程inheritance的?

更新:

设置全局环境变量仍应在/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登录shell(例如,从控制台登录或通过ssh登录),以及桌面会话加载时DisplayManager,都会执行此文件。 这可能是在向资深UNIX系统管理员询问环境变量时会引用的文件。 但是,在Ubuntu中,此文件稍微调用/etc/bash.bashrc文件。

/etc/bash.bashrc – 这是〜/ .bashrc文件的系统范围版本。 默认情况下,Ubuntu配置为在用户进入shell或桌面环境时执行此文件。

sudo -i将模拟登录(以类似于sudo su -方式),从而为您提供这些环境变量。