/etc/profile 是文件, /etc/profile.d/ 是目录,用在设置环境变量方面,/etc/profile 文件和 /etc/profile.d/ 目录实现效果是一样的,可根据自己对环境变量配置的需求场景,选择一种最好的方式来配置环境变量,一般应用场景下,全局变量配置于 /etc/profile.d 目录下是最佳的实践方式,/etc/profile.d/ 比 /etc/profile 好维护。

/etc/profile 文件

当一个用户登录 Linux 系统或使用 su 命令切换到另一个用户时,设置用户环境第一个读取的文件就是 /etc/profile ,此文件为系统全局变量配置文件,且仅仅在第一次登录系统时才会全局运行 /etc/profile 。

注意上面描述的几个关键:

  • 设置用户环境第一个读取的脚本文件 可以推理出在它之后读取的文件设置环境变量将会会覆盖 /etc/profile 文件中配置的环境变量;
  • 仅仅在第一次登录系统时才会全局运行 /etc/profile 可以解释一个场景:我们在使用 Ubuntu 等桌面 Linux 系统时,用快捷键 ctrl+alt+t 打开的 shell 终端里,修改环境变量后使用 source /etc/profile 这个命令执行生效,新的环境变量只能在当前的终端里面有效,打开新的 shell 终端时,刚才有效的环境变量在新的终端是不生效的;所以全局生效 /etc/profile 环境变量的正确方式是注销重登录或者直接重启系统

以添加 JDK 的环境变量为例子,vim /etc/profile 打开文件, 在文件最后添加:

export JAVA_HOME=/opt/jdk1.8.0_191
export PATH=$JAVA_HOME/bin:$PATH

/etc/profile.d/ 目录

在 /etc/profile.d 目录中存放的是一些应用程序所需的启动脚本,比如 vim 等命令的一些附加设置,在 /etc/profile.d 目录下添加相关的环境变量设置的 .sh 脚本文件,这些脚本文件的环境变量能够被生效,是因为在 /etc/profile 被读取的时候,会使用一个 for 循环语句来调用 /etc/profile.d 下的脚本,这些脚本文件所设置的环境变量就和 /etc/profile 启动时一起被设置起来了,cat /etc/profile 可以看到有一段加载 /etc/profile.d 目录下所有 .sh 脚本文件的代码:

if [ -d /etc/profile.d ]; thenfor i in /etc/profile.d/*.sh; doif [ -r $i ]; then. $ifidoneunset i
fi

从上面的代码不难理解,/etc/profile.d/ 目录下设置环境变量和 /etc/profile 效果是一样的,都是全局环境变量,一旦生效后也都是永久环境变量; /etc/profile.d/ 比 /etc/profile 好维护,不想要的环境变量从 /etc/profile.d/ 目录中移除即可,创建好的环境变量拷贝文件就轻松的移植到其他的计算机,不用每次去改动 /etc/profile 文件。

根据上面描述可以推理出:

  • /etc/profile.d 目录下的环境变量是 /etc/profile 启动时一起被读取,那么想要在当前 shell 终端临时生效可以使用 source /etc/profile,要全局生效则需要注销重登录或者直接重启系统,和 /etc/profile 原理一样;
  • /etc/profile.d 目录下的环境变量和 /etc/profile 的环境变量优先级,根据环境变量在 /etc/profile 的 for 循环语句调用 /etc/profile.d 的前面还是后面,在前则被 /etc/profile.d 目录下的环境变量覆盖,在后则被 /etc/profile 的环境变量覆盖

/etc/profile 和 /etc/profile.d/ 的区别相关推荐

  1. Centos 配置JDK,添加环境变量/etc/profile和/etc/profile.d

    一. etc下是profile文件还是profile.d文件夹 我使用的是阿里云的轻量应用服务器,所以 etc 下为 profile.d文件夹,并不是 profile文件 profile.d文件夹 e ...

  2. Springboot使用Maven Profile和Spring Profile进行多环境配置

    Springboot使用Maven Profile和Spring Profile进行多环境配置 目的 在实际的项目上,一般会分三种环境dev.test.prod来方便我们的开发和部署,要求我们在开发的 ...

  3. linux下 /etc/profile、~/.bash_profile ~/.profile的执行过程

    关于登录linux时,/etc/profile.~/.bash_profile等几个文件的执行过程. 在登录Linux时要执行文件的过程如下: 在刚登录Linux时,首先启动 /etc/profile ...

  4. Maven profile整合Spring profile

    在Maven和Spring中,都有profile这个概念.profile是用于区分各种环境的,例如开发环境.测试环境.正式环境等.Maven的profile用于在打包时根据指定环境替换不同环境的配置文 ...

  5. Linux下profile和bashrc四种的区别

    /etc/profile./etc/bashrc.~/.bash_profile.~/.bashrc很容易混淆,他们之间有什么区别?它们的作用到底是什么? /etc/profile: 用来设置系统环境 ...

  6. Linux 环境下/etc/profile和/etc/profile.d 的区别和用法!

    区别: 1. 两个文件都是设置环境变量文件的,/etc/profile是永久性的环境变量,是全局变量,/etc/profile.d/设置所有用户生效 2. /etc/profile.d/比/etc/p ...

  7. ~/.profile和/etc/profile的区别

    登入系统读取步骤: 当登入系统时候获得一个shell进程时,其读取环境设定档有三步 : 1.首先读入的是全局环境变量设定档/etc/profile,然后根据其内容读取额外的设定的文档,如 /etc/p ...

  8. oracle io profile,ORACLE 中 PROFILE的管理

    PROFILE的管理(资源文件) 当需要设置资源限制时,必须设置数据库系统启动参数RESOURCE_LIMIT,此参数默认值为FALSE 可以使用如下命令来启动当前资源限制: alter system ...

  9. 国外学校css profile,CSS Print Profile

    摘要: This specification defines a subset of Cascading Style Sheets Level 2, revision 1 and CSS3 Modul ...

最新文章

  1. RISC-V生态未来的三种可能~
  2. 黄聪:C#用正则表达式获得指定开始和结束字符串中间的一段文本
  3. 创建透明窗口及其应用--屏幕画笔
  4. 计算机在管理会计中的应用毕业论文,计算机在管理会计中的应用写毕业论文用的,帮帮找..._中级会计职称_帮考网...
  5. Android Intent And Intent Filter
  6. 怎么装python编译器_python编译器安装
  7. 基于阿里云服务器使用宝塔面板搭建 Typecho 博客
  8. excel如何把多张表合并成一个表_从产品经理到总监,就差一张高价值Excel表
  9. Android中关于Adapter的使用(下)BaseAdapter
  10. 第三十七课.宽度学习
  11. html转化pdf文字无法显示,HTML 转 PDF 排雷 之 wkhtmltopdf 转换得到的PDF没有内容
  12. 真相了!关于“写书”这件事
  13. SONiC(3):手动运行docker ptf
  14. 模式匹配与正则表达式(一)
  15. 气象数据分析之EMD方法介绍及python的实现
  16. 怎样用JS实现关闭当前窗口
  17. Bootstrap智能消息提示框
  18. 已知有十六支男子足球队参加2008北京奥运会。写一个程序,把这16支球队随机分为4个组。
  19. 【干货】我的机器学习入门路线图
  20. 计算机安装xp蓝屏怎么办,当我在笔记本电脑上安装XP时,出现蓝屏. 我该怎么解决?...

热门文章

  1. Git私服客户端免密码登录
  2. 通讯协议和通讯方式概述
  3. vss2005 配置详解
  4. 实战案例讲解:用户画像如何应用?
  5. 修改历史git提交用户名和邮箱错误,解决没有小绿点
  6. CPU指令的流水线执行
  7. Wi-Fi Display协议介绍
  8. 帮助贴吧一个小老弟做题:
  9. win7 引导 ubuntu
  10. 如何查看NVIDIA显卡显存使用率