AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 102932
Accepted
vonconrad
vonconrad
Asked: 2010-01-15 19:15:28 +0800 CST2010-01-15 19:15:28 +0800 CST 2010-01-15 19:15:28 +0800 CST

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

  • 772

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

我尝试了以下方法,它只将它添加到当前的 shell 会话中:

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

为所有用户永久添加此目录的正确方法是什么?我目前以.$PATHroot

centos shell root configuration path
  • 6 6 个回答
  • 282934 Views

6 个回答

  • Voted
  1. Best Answer
    Mike Conigliaro
    2011-08-23T08:29:57+08:002011-08-23T08:29:57+08:00

    编辑此类内容不是一个好主意/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
    

    重新登录并享受您的(安全)更新$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
    

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

    . /etc/profile
    

    这将更新$PATH变量。

    • 137
  2. vonconrad
    2010-01-15T20:10:32+08:002010-01-15T20:10:32+08:00

    在遵循 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 语句下面添加了。这解决了我的问题。

    • 12
  3. GiorgosK
    2016-11-01T00:53:33+08:002016-11-01T00:53:33+08:00

    抱歉误解了 以下问题

    修改 .bash_profile

    nano ~/.bash_profile
    

    然后在文件中的某处添加/修改您的路径,由以下分隔:

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

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

    source ~/.bash_profile
    

    或注销并再次登录

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

    echo $PATH
    
    • 6
  4. user54883
    2010-11-09T13:34:19+08:002010-11-09T13:34:19+08:00

    “在成功登录后,使用 /bin/login 通过读取 /etc/passwd 文件启动交互式登录 shell。此 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文件中。但是,如果您希望每个用户都看到您的盒子上安装了哪些特定于 root 的程序,我会/sbin放入/etc/.profile. 现在每个用户都可以使用 tab 补全来查找特定于 root 的程序并在必要时提升权限。

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

    • 4
  5. 2010-01-15T19:49:27+08:002010-01-15T19:49:27+08:00

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

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

    要为所有用户设置它(正如您提到的),请在 /etc/bashrc 中更改它(每个用户主目录中的默认 .bashrc 应该是该文件的来源,但您应该仔细检查)。

    • 1
  6. Philip Rego
    2020-06-06T10:25:49+08:002020-06-06T10:25:49+08:00

    为什么大家都忘记了/etc/environment。为所有用户设置环境变量就是这个文件的用途。只需在一行中添加环境变量的名称值对。不要使用变量。

    /etc/环境

    PATH=:/usr/lib/ruby-enterprise/bin:/usr/bin:/usr/local/bin:
    

    一旦您注销或重新启动,这将为所有用户添加目录/usr/lib/ruby-enterprise/bin /usr/bin和您的 PATH 变量。/usr/local/bin

    /usr/bin并且/usr/local/bin之前已经在我的路径上,但在我编辑此文件后由于某种原因被删除。所以添加这两个目录是安全的。

    • 0

相关问题

  • 用于监视文件更改的 Shell 命令

  • 如何在 Vista 中使用“连接到网络”对话框添加脚本

  • 在 .bashrc 中设置环境变量的最佳方法是什么?

  • SQL Server 文件本地或 NAS 或 SAN?

  • 我必须在我的服务器上配置什么来提高默认安全性?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve