[转帖]/etc/profile 和 /etc/profile.d/ 的区别
https://my.oschina.net/calmsnow/blog/2989570
/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 ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset 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.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 env
export JAVA_HOME=/opt/jdk1.8.0_192
export PATH=$JAVA_HOME/bin:$PATH
[转帖]/etc/profile 和 /etc/profile.d/ 的区别的更多相关文章
- linux下 /etc/profile、~/.bash_profile ~/.profile的执行过程
关于登录linux时,/etc/profile.~/.bash_profile等几个文件的执行过程. 在登录Linux时要执行文件的过程如下: 在刚登录Linux时,首先启动 /etc/profile ...
- profile和bashrc四种的区别
Linux下profile和bashrc四种的区别 12160阅读 0评论 /etc/profile./etc/bashrc.~/.bash_profile.~/.bashrc很容易混淆,他们之间有什 ...
- [转] linux下 /etc/profile、~/.bash_profile ~/.profile的执行过程
分类: linux 2015-03-13 16:24 1572人阅读 评论(0) 收藏 举报linuxprofile关于登录linux时,/etc/profile.~/.bash_profile等几个 ...
- Linux 环境下/etc/profile和/etc/profile.d 的区别
Linux 环境下/etc/profile和/etc/profile.d 的区别 区别: 1. 两个文件都是设置环境变量文件的,/etc/profile是永久性的环境变量,是全局变量,/etc/pro ...
- /etc/profile和~/.bash_profile等文件的区别和联系
对比说明:/etc/profile:为系统的每个用户设置环境信息和启动程序,当用户第一次登录时,该文件被执行,其配置对所有登录的用户都有效.当被修改时,必须重启才会生效.英文描述:”System wi ...
- Linux的环境变量配置在/etc/profile或/etc/profile.d/*.sh文件中的区别是什么?
@ 目录 login shell non-login shell 它们的区别 Linux的环境变量可在多个文件中配置,如/etc/profile,/etc/profile.d/*.sh,~/.bash ...
- ZHA profile与ZLL profile的一个例子
ZHA Coordinator 如何控制ZLL Light/Philips Hue Light 缩写: ZHA: ZigBee Home Automation profile ZLL: ZigBee ...
- linux中/etc/profile、/etc/profile.d/、/etc/bashrc、~/.bashrc、~/.bash_profile、~/.bash_logout的作用与区别
作用: /etc/profile:登录时用来设置环境变量,执行文件中的命令,对所有用户生效. /etc/profile.d/:登录时和执行bash命令打开子shell时执行目录下所有已.sh结尾的脚本 ...
- 【原创】android 7.0 通知报错 java.lang.SecurityException: You need MANAGE_USERS permission to: check if specified user a managed profile outside your profile group
项目中在后台发送通知,突然某一天测出在Android 7.0上通知发送失败,那么根据提示,我们尝试加了MANAGE_USERS权限,看起来是个系统级别权限,验证后果然无效.接着在搜索后都无果,似乎大家 ...
- [转帖] IIS经典模式和集成模式的区别
在 IIS 7.0 中,应用程序池有两种运行模式:集成模式和经典模式. https://blog.csdn.net/hongwei_23/article/details/44300923 这里面添加一 ...
随机推荐
- 带你用VUE实现上传图片效果
摘要:在逛b站时看到一个上传图片的效果,想着可以自己也做一个,因为原作者是用原生js写的,那我不如就用vue写好了,当然,是一个很小的东西,在HTML文件直接引用vue就好了,详细步骤如下~ 本文分享 ...
- 总结vue3 的一些知识点:MySQL 运算符
MySQL 运算符 本章节我们主要介绍 MySQL 的运算符及运算符的优先级. MySQL 主要有以下几种运算符: 算术运算符 比较运算符 逻辑运算符 位运算符 算术运算符 MySQL 支持的算术运算 ...
- 火山引擎 DataTester :让字节“跳动”起来的 A/B 实验平台
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流 火山引擎 DataTester 不仅对外提供服务,同时也是当前字节跳动内部所应用的 AB 实验平台. DataTes ...
- PMP 如何获取 PDU PMP 证书续证
PMP 如何获取 PDU. PMP 证书续证 需要准备一张带支付美元的信用卡 打开官网,登录: https://ccrs.pmi.org/ 内容随便填 ,可以到 https://pmichina ...
- 通过mongo-driver使用说明 GO 包管理机制
本篇记录通过GO语言操作mongodb,实现的流程包括: 初始化项目工程 容器方式安装mongo 调试运行和编译运行 go使用mongo的代码如下,go操作mongo的SDK是mongo-driver ...
- 别再问我 2050 可以干什么,Make a Movie in a Day!
2050 的每个年青人都是新物种.越是不可能见面的人见了面,就越会有奇迹发生,2050 努力让年青人见上另一位年青人,激发新的创造力.一起来 2050 看看? 2050 是什么? 2050 大会是由阿 ...
- GIL 锁或将在 CPython 中成为可选项
哈喽大家好,我是咸鱼 几天前有媒体报道称,经过多次辩论,Python 指导委员会打算批准通过 PEP 703 提案,让 GIL(全局解释器)锁在 CPython 中成为一个可选项 PEP 703 提案 ...
- 0x53 动态规划-区间DP
A: 石子合并 所求问题:1到n这些石子合并最少需要多少代价 由于石子合并的顺序可以任意,我们将石子分为两个部分 子问题:1到k这堆石子合并,k+1到n这堆石子合并,再把两堆石子合并,需要多少代价\( ...
- Sentinel 是如何做限流的
限流是保障服务高可用的方式之一,尤其是在微服务架构中,对接口或资源进行限流可以有效地保障服务的可用性和稳定性. 之前的项目中使用的限流措施主要是Guava的RateLimiter.RateLimite ...
- JAVA使用Session获取用户信息
JAVA使用Session获取用户信息 1. 在登录的Controller中将用户信息塞入Session //前端传入用户信息 @RequestMapping("/login") ...