中的说明如何为服务器上的所有用户设置 PATH 变量?为所有“普通”用户设置 PATH 是可行的。但是,如果我这样做sudo -s
,则printenv PATH
不会显示更新后的路径。例如,我查看了为根设置 TeX Live 路径,但这对我来说似乎没有意义,也许是因为我有 Windows 背景。有没有办法设置真正的系统范围的路径,以便系统上运行的每个进程都能继承这些条目?
答案1
更新:
设置全局环境变量仍应在 中执行/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
它将提供具有 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 或桌面环境时执行此文件。
答案2
sudo -i
将模拟登录(类似于sudo su -
),从而为您提供这些环境变量。
答案3
如果我们需要通过在文件中添加相同的条目来/usr/local/bin
添加,则使用 sed 命令如下root's PATH
/etc/sudoers
sudo sed -i '/^Defaults secure_path/ s/$/\:\/usr\/local\/\bin/' /etc/sudoers