博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
/etc/profile和/etc/profile.d/的区别
阅读量:6157 次
发布时间:2019-06-21

本文共 2210 字,大约阅读时间需要 7 分钟。

hot3.png

/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_191export 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 ]; then  for i in /etc/profile.d/*.sh; do    if [ -r $i ]; then      . $i    fi  done  unset ifi

从上面的代码不难理解,/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.d 目录,我使用我的Ubuntu 14.04.5系统,切换到 /etc/profile.d 目录,再使用 ls 命令列出目录下的所有脚本文件:

cd /etc/profile.d && ls

Ubuntu 14.04.5 在 /etc/profile.d 目录下默认带有这三个文件 appmenu-qt5.sh bash_completion.sh vte.sh

  • bash_completion.sh 是一个 bash-completion 软件包的脚本,这个脚本的作用是规定我们使用 Tab 键自动补全命令以什么样的参数去补全,有兴趣的可以自行深入了解;

还是以添加JDK的环境变量为例子,使用命令 sudo vim /etc/profile.d/java.sh 创建并编辑 java.sh 文件 (文件名可自行定义, .sh 类型即可),在文件中填如下面的内容:

# java envexport JAVA_HOME=/opt/jdk1.8.0_192export PATH=$JAVA_HOME/bin:$PATH

扩展文章:

转载于:https://my.oschina.net/calmsnow/blog/2989570

你可能感兴趣的文章
程序员怎么写出一份漂亮的简历
查看>>
理解Event的冒泡模型
查看>>
Xcode 自带单元测试
查看>>
iOS11 UITableViewCell滑动事件改动
查看>>
CSS3实现侧边栏快速定位的隐藏和消失
查看>>
iOS探索:Block解析浅谈
查看>>
C++ 运算符重载
查看>>
如何修改移动设备按钮默认样式
查看>>
使用VideoView做个实用的视频播放器
查看>>
JS----预编译及变量提升详解
查看>>
《Flask 入门教程》第 6 章:模板优化
查看>>
坐下,这些都是二叉树的基本操作!
查看>>
vue实例以及生命周期
查看>>
关于电脑(window)后门查看的一些总结
查看>>
RxDownload2 文件下载太慢分析
查看>>
转载:React Fiber架构(浅显易懂)
查看>>
小白都能玩的算法day2-数量级、输入和输出
查看>>
『中级篇』Docker Cloud自动构建 Docker image(55)
查看>>
Java多线程编程笔记4:Java内存模型
查看>>
《Linux》阿里云部署django全攻略
查看>>