标签:profile 文件 shell 读取 etc Shell Linux bash
Bash
对于程序员来说,bash都不陌生;官方定义的bash是Linux Shell的一种,作用于用户态,为其提供操作内核态指令的一些接口。
目的
写这篇文章的主要目的是:在Linux或者类Linux系统搭建环境的时候,需要配置环境变量,而环境变量主要是通过几个bash
or profile
文件配置的,在写这篇文章之前,我几乎是按照blog上的教程,里面写着使用哪个配置文件,我就选择哪个,但是这样带来的影响就是:维护十分困难,程序员也不知所以然,故:在这篇文章中进行一下总结。
几个常见的bash文件以及描述
这也是我们常用的几个shell文件
etc/profile
The systemwide initialization file, executed for login shells
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
问题一:profile和rc有什么区别
- 使用场景:
两者使用的场景不同,shell的运行涉及“交互”和“登陆”两种场景,从原理上讲,“交互式登陆shell”启动时会加载“profile”系列的startup文件,而“交互式非登陆shell”启动时会加载“rc”系列的startup文件。
- 文件内容
一般来说,profile类文件的内容用来定义环境变量、运行命令、或者脚本。
bashrc类文件用来定义本地变量、函数、命令别名。
问题二:几个文件的加载顺序
对于交互式登陆shell的场景,CentOS规定了StartUP文件的启动方式:
登陆过程:
-
读取并执行
/etc/profile
文件 -
读取并执行
~/.bash_profile
文件- 若文件不存在,则读取并执行
~/.bash_login
文件 - 若文件不存在,则读取并执行
~/.profile
文件
- 若文件不存在,则读取并执行
登出过程:
-
读取并执行
~/.bash_logout
文件 -
读取并执行
/etc/bash.bash_logout
文件
对于交互式非登陆的shell场景,CentOS规定了StartUP文件的启动方式:
-
读取并执行
/etc/profile
文件 -
读取并执行
~/.bash_profile
文件- 若文件不存在,则读取并执行
~/.bash_login
文件 - 若文件不存在,则读取并执行
~/.profile
文件
- 若文件不存在,则读取并执行
两者的区别在于:“交互式登陆”比“交互式非登陆”多了一个登出的过程。
问题三:.rc文件的作用
When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc.
—— 《The art of Unix programming 》Unix编程艺术
- rc文件应该是:run command的缩写,在shell启动的时候被加载执行,我理解应该是用户可以自定义的一些启动命令,然后放在这里面,Linux shell启动的时候会自动加载这些rc文件。
Show me the code.
etc/profile
:这是第一个系统自动必须加载的文件。
遍历/etc/profile.d这个目录下所有.sh文件,然后source一下,使其生效。
~/.bash_profile
:环境变量的设置是在这个文件夹下。
总结:知道startup文件何时被执行并不是关键,关键是要理解自己的情况应该去修改哪个startup文件。
-
bashrc类的文件不一定存在,这个应该是需要用户自行定义的。
-
如果想对bash的功能进行设置或者是定义一些别名,推荐修改~/.bashrc文件,这样无论你以何种方式打开shell,你的配置都会生效。而如果你要更改一些环境变量,推荐你修改/.bash_profile文件,因为考虑到shell的继承特性,这些更改确实只应该被执行一次(而不是多次)。针对所有用户进行全局设置,推荐你在/etc/profile.d目录下添加以.sh结尾的文件,而不是去修改全局startup文件。
标签:profile,文件,shell,读取,etc,Shell,Linux,bash 来源: https://blog.csdn.net/gky_1111/article/details/112733680
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。