如何为 debian 所有用户的非登录 shell 添加系统 $PATH 路径

如何为 debian 所有用户的非登录 shell 添加系统 $PATH 路径

在安装了一些程序后/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/.profilereverse$HOME/profile不是由默认 shell 执行,而是由dash.其轻量级变体bash可减少启动过程中的负载。

答案3

我在 serverfault 上找到了最优秀的答案吉尔斯:

如何为 Debian 中的所有用户设置 PATH?

第一个设置 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 中

相关内容