题 在CentOS中添加目录到$ PATH?


我们刚刚启动了我们的新服务器,我们正在运行CentOS。在成功安装Ruby Enterprise Edition之后,我现在想添加REE / bin(位于 /usr/lib/ruby-enterprise/bin)目录使其成为服务器上的默认Ruby解释器。

我尝试了以下内容,只将其添加到当前的shell会话中:

export PATH=/usr/lib/ruby-enterprise/bin:$PATH

什么是正确的方法 永久性 将此目录添加到$ PATH for 所有用户。我目前以root身份登录。

提前致谢!


68
2018-01-15 03:15






答案:


编辑并不是一个好主意 /etc/profile 对于这样的事情,因为当CentOS发布此文件的更新时,您将丢失所有更改。这正是如此 /etc/profile.d 适用于:

# echo 'pathmunge /usr/lib/ruby-enterprise/bin' > /etc/profile.d/ree.sh
# chmod +x /etc/profile.d/ree.sh

重新登录并享受您(安全)更新的路径:

# echo $PATH
/usr/lib/ruby-enterprise/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# which ruby
/usr/lib/ruby-enterprise/bin/ruby

您可以重新加载配置文件,而不是重新登录:

# . /etc/profile

这将更新 $PATH 变量。


101
2017-08-22 16:29



~/.profile 是另一个有效的选择 - Zypher
是的,对于单个用户。但问题是关于改变PATH 所有 用户。 - Mike
@Mike这个pathmunge命令是什么? - Nickolai Leschov
@NickolaiLeschov我很确定它只是追加$ PATH的路径。 - Mike
@NickolaiLeschov它是/ etc / profile中定义的函数 - CrazyPheel


按照fmonk的建议,我检查了一下 /etc/bashrc,我注意到它说“环境内容进入/ etc / profile”。我继续往前看 /etc/profile, 我看到了这个:

pathmunge () {
    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
       if [ "$2" = "after" ] ; then
          PATH=$PATH:$1
       else
          PATH=$1:$PATH
       fi
    fi
}

[...]

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /sbin
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
fi

为了解决我的问题,我简单地说 pathmunge /usr/lib/ruby-enterprise/bin 在if语句下面。这解决了我的问题。


9
2018-01-15 04:10



有人可以解释一下 "$EUID" = "0" 意味着在这种情况下? - Eli
EUID 0表示用户是root用户。 - bbaja42
你应该使用/etc/profile.d。请参阅下面的答案。 - Mike
请考虑接受@MikeConigliaro答案为正确。他的方式是正确的。它的开发就是这样工作的。看看里面的文件 /etc/profile.d/ 文件夹,你会发现它。此外,正如他所说,系统更新可以撤消您的解决方案。 - Caio Cunha


“启动交互式登录shell   成功登录后,使用   / bin / login,通过读取/ etc / passwd   文件。这个shell调用正常   读/ etc / profile及其私有   相当于〜/ .bash_profile   启动。

交互式非登录shell是   通常从命令行开始   使用shell程序(例如,   [prompt] $ / bin / bash)或者/ bin / su   命令。交互式非登录   shell也是以终端开始的   程序,如xterm或konsole来自   在图形环境中。这个   shell调用的类型通常   复制父环境然后   读取用户的〜/ .bashrc文件   额外的启动配置   说明“。    http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile.html

因此我不会将环境变量放在bashrc中,因为它不仅违反了常规约定,而且在从图形桌面环境调用终端时也会错过bashrc变量。

在Redhat中 /etc/profile 我发现了这个评论:

“系统范围的别名和函数应该放在/ etc / bashrc中。个人   环境变量和启动程序应该进入   〜/ .bash_profile中。个人别名和功能应该进入   在〜/ .bashrc“。

因此,如果要基于用户设置环境变量,请在用户的.bash_profile文件中进行设置。

走向了 .bash_profile 我读:

“个人环境变量和启动程序。

个人别名和函数应该放在〜/ .bashrc中。系统范围   环境变量和启动程序位于/ etc / profile中。   系统范围的别名和函数位于/ etc / bashrc中。“

结论 
如果您只想让root用户查看驻留的程序,例如/sbin我会添加到root的路径 .bash_profile 文件。但是,如果您希望每个用户都能看到您的盒子上安装了哪些根特定程序,我会说 /sbin 成 /etc/.profile。现在,每个用户都可以使用制表符完成来查找根特定的程序,并在必要时提升权限。

特例:SSH
使用命令行启动ssh时,将启动交互式登录shell。但在这种情况下 /etc/profile 不读。当我在中定义环境变量时 .bash_profile 使用ssh的每个用户的文件。


3
2017-11-08 21:34





SORRY误解了这个问题 以下asnwer是用户的个人资料 离开它,以防它帮助某人

修改.bash_profile

nano ~/.bash_profile

然后在文件的某个地方添加/修改你的路径分隔:

 PATH=$PATH:$HOME/bin:/your/path
 export PATH

然后重新加载您的个人资料

source ~/.bash_profile

或者注销并再次登录

如果你检查PATH它应该包括你新添加的路径

echo $PATH

1
2017-10-31 08:53





您可以在.rc文件中设置环境变量;对于bash shell(我相信最常见的,在CentOS中是默认的),每个用户在其主目录中都有一个名为.bashrc的文件。

将命令PATH = / usr / lib / ruby​​-enterprise / bin:$ PATH添加到此文件,以便为任何一个特定用户设置它。

要为所有用户设置它(如你所述),在/ etc / bashrc中更改它(每个用户的主目录中的默认.bashrc应该提供此文件,但你应该仔细检查它)。


0
2018-01-15 03:49