美文网首页
linux环境变量

linux环境变量

作者: oceanfly | 来源:发表于2022-07-28 09:09 被阅读0次

    可以配置环境变量的位置

    在centos7中有如下几个位置可以配置环境变量:

    • /etc/profile
    • /etc/bashrc
    • ~/.bash_profile
    • ~/.bashrc
    • /etc/profile.d/*.sh

    那么各个配置文件的作用和区别在哪里呢

    /etc/profile

    查看文件注释:

    System wide environment and startup programs, for login setup

    也就是说 系统级别的环境变量可以放在这里,但是不建议放在这里:

    It's NOT a good idea to change this file unless you know what you
    are doing. It's much better to create a custom.sh shell script in
    /etc/profile.d/ to make custom changes to your environment

    建议的做法是 在/etc/profile.d/中新建 custom.sh并在里面配置系统级别的environment and startup programs

    /etc/bashrc

    查看文件注释:

    System wide functions and aliases

    也就是说 系统级别的别名可以放在这里,但是不建议放在这里:

    It's NOT a good idea to change this file unless you know what you
    are doing. It's much better to create a custom.sh shell script in
    /etc/profile.d/ to make custom changes to your environment

    建议的做法是 在/etc/profile.d/中新建 custom.sh并在里面配置系统级别的functions and aliases

    ~/.bash_profile

    User specific environment and startup programs

    用户级别的环境变量放在这里

    ~/.bashrc

    查看文件注释:

    User specific aliases and functions

    用户级别的别名 放在这里

    总结

    到这里可以做个小总结

    • 系统级别的 无论是environment and startup programs 还是functions and aliases,推荐的做法都是在 /etc/profile.d/中新建 custom.sh 并在其中配置
    • 用户级别的environment and startup programs 放在 ~/.bash_profile
    • 用户级别的aliases and functions 放在 ~/.bashrc

    原理

    如果只想知道怎么用 看上面的总结部分就可以了
    下面聊聊这些文件起作用的细节加深理解
    这些文件起作用的时机分两种情况 login shell 和 no login shell

    login shell

    所谓的 login shell 就是linux启动后通过终端需要输入用户名密码之后才能进入shell的情况
    此时的执行步骤是:

    1. 系统加载并执行/etc/profile
    2. /etc/profile 会加载 /etc/profile.d/中的sh文件并执行
    3. 系统加载并执行~/.bash_profile
    4. ~/.bash_profile中会加载并执行 ~/.bashrc
    5. ~/.bashrc会加载并执行/etc/bashrc(思考:这里/etc/bashrc 的执行顺序为什么这么设计?)
      通过以上几个步骤 系统级别和用户级别的环境变量就加载完成了

    no login shell

    当登录后进入到bash中以后 再通过bash命令打开一个子bash 此时的子bash就是一个 no login shell
    此时的执行步骤是:

    1. 系统加载并执行 ~/.bashrc
    2. ~/.bashrc会加载并执行/etc/bashrc
    3. /etc/bashrc 在 no login shell 的情况下会加载 /etc/profile.d/中的sh文件并执行
      这里子bash会继承父bash中的环境变量 但不会继承别名
      所以打开子bash时需要重新加载~/.bashrc 和 /etc/bashrc
      /etc/profile.d/中也可能定义了别名 所以也重新加载一遍(回答上面的思考)

    重复一下结论

    想在所有用户下生效的环境变量 就在 /etc/profile.d/ 中自定义
    只在当前用户下生效的环境变量 就在 .bash_profile 中定义

    相关文章

      网友评论

          本文标题:linux环境变量

          本文链接:https://www.haomeiwen.com/subject/plgtwrtx.html