在CentOS中添加一个目录到$ PATH?

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

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

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

永久将这个目录添加到$ PATH为所有用户的正确方法是什么? 我目前以root身份login。

提前致谢!

编辑/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 

重新login并享受(安全)更新的PATH:

 # 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 

而不是重新login,您可以重新加载configuration文件:

 # . /etc/profile 

这将更新$PATHvariables。

在遵循fmonk的build议之后,我检查了/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 

为了解决我的问题,我只是在if语句下面添加了pathmunge /usr/lib/ruby-enterprise/bin 。 这解决了我的问题。

“通过读取/ etc / passwd文件,使用/ bin / login成功login后,会启动一个交互式loginshell。这个shell调用通常在启动时读取/ etc / profile及其相应的〜/ .bash_profile。

交互式非loginshell通常在命令行上使用shell程序(例如[prompt] $ / bin / bash)或通过/ bin / su命令启动。 交互式非loginshell也在graphics环境中以terminal程序(如xterm或konsole)启动。 这种types的shell调用通常会复制父环境,然后读取用户的〜/ .bashrc文件以获取其他启动configuration指令。“ http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile.html

因此,我不会把环境variables放在bashrc中,因为它不仅违背了常规惯例,而且在从graphics桌面环境调用terminal时也会错过bashrcvariables。

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

“系统范围的别名和函数应该放在/ etc / bashrc中,个人环境variables和启动程序应该放到〜/ .bash_profile中,个人别名和函数应该放到〜/ .bashrc中。

所以如果你想在用户的基础上设置环境variables,在用户的.bash_profile文件中执行。

转到.bash_profile我读:

“个人环境variables和启动程序。

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

结论
如果你只想让root用户看到驻留在程序中的程序,比如在/ sbin我会把这个path添加到root的.bash_profile文件中。 但是如果你想让每个用户都能看到你的机器上安装了什么根特定的程序,我会把/sbin放到/etc/.profile 。 现在,每个用户都可以使用Tab完成来查找特定于根的程序,并在必要时提升权限。

特例:SSH
当使用命令行启动ssh时,会启动一个交互式loginshell。 但在这种情况下, /etc/profile不会被读取。 当我在每个用户的.bash_profile文件中定义环境variables的时候,它使用ssh。

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

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

要为所有用户(如你所提到的)设置它,在/ etc / bashrc(在每个用户的主目录中默认的.bashrc应该来源于这个文件,但你应该重新检查)。

SORRY错误地解释了下面这个问题,以至于用户的个人资料离开它,以防止他人帮忙

修改.bash_profile

 nano ~/.bash_profile 

然后在文件的某个地方添加/修改您的path分隔:

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

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

 source ~/.bash_profile 

或者注销并重新login

如果你检查PATH,它应该包括你新添加的path

 echo $PATH