![如何为 debian 所有用户的非登录 shell 添加系统 $PATH 路径](https://linux22.com/image/25234/%E5%A6%82%E4%BD%95%E4%B8%BA%20debian%20%E6%89%80%E6%9C%89%E7%94%A8%E6%88%B7%E7%9A%84%E9%9D%9E%E7%99%BB%E5%BD%95%20shell%20%E6%B7%BB%E5%8A%A0%E7%B3%BB%E7%BB%9F%20%24PATH%20%E8%B7%AF%E5%BE%84.png)
在安装了一些程序后/opt/xxx/bin
,我想为所有用户的非登录外壳添加/opt/xxx/bin
到系统中。$PATH
我应该怎么办?
答案1
在 Debian 和其他使用 PAM 的系统(现在是大多数)上,您可以PATH
在/etc/environment
.这适用于任何使用pam_env
模块(在auth
部分或部分中session
);在 Debian 上,这应该是所有这些(至少是那些提供登录和运行命令的方法的)。
答案2
/etc/profile
默认路径可以像 Joe 所说的那样设置,但也可以在$HOME/.profile
.我还有很多我自己编译的软件包(使用通用程序./configure --prefix=/opt/<name>
)安装在/opt
.为了执行二进制文件/opt/<name>/bin
而不需要任何额外的努力,我添加了
OPTDIR=/opt
for i in $OPTDIR/* ; do
BINDIR=$i/bin
if [ -d $BINDIR ] ; then
if [ -z $PATH ] ; then
PATH=$BINDIR
else
PATH=$BINDIR:$PATH
fi
fi
done
export PATH
对我来说$HOME/.profile
,在你的情况下是/etc/profile
。现在,即使我/opt
将来在下面安装软件包,我也不必担心访问相关的二进制文件,/opt/.*/bin
因为路径会自动添加到$PATH
.
因为附加软件不需要稳定,所以我$HOME/.profile
更喜欢/etc/profile
.
一个小注释:/etc/.profile
reverse$HOME/profile
不是由默认 shell 执行,而是由dash
.其轻量级变体bash
可减少启动过程中的负载。
答案3
我在 serverfault 上找到了最优秀的答案吉尔斯:
第一个设置 PATH 的地方是
/etc/login.defs
.有一个针对 root 的设置和一个针对其他所有人的设置。另一个可以定义环境变量的地方是
/etc/environment
.这些设置将适用于所有人(您不能在那里编写任意 shell 代码)。您可以定义环境变量的第三个地方是
/etc/profile
.在那里你可以编写任意的 shell 代码。如果您想要特定于用户的设置,可以使用相应的每用户文件~www-data/.profile
。但这仅适用于控制台交互式登录;特别是它不适用于 cron 作业,除非它们明确地来源/etc/profile
.如果您只需要
PATH
在用户 crontab 中进行该设置,则可以将其写入 crontab 的开头。请注意,您需要完整列表 (PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/zend/bin
),不能使用变量替换(PATH=$PATH:/usr/local/zend/bin
在那里不起作用)。
答案4
默认路径可以在/etc/profile中设置
但我只是在我的 Ubuntu 系统上查看,它设置在 /etc/environment 中