0.问题描述
Linux 的环境变量可在多个文件中配置,如 /etc/profile,/etc/profile.d/*.sh,~/.bashrc, ~/.bash_profile 等,那么配置在不同的位置,都有哪些区别呢?我之前也没有太在意过这个问题,一般我喜欢配置在/etc/profile下面,也没有出过什么问题。最近在看一些文章的时候,发现大家配置环境的位置各式各样,搜集了一些相关信息,总结一下区别。
1.交互式shell和非交互式shell
首先我们要弄明白两个概念,bash的运行模式可以分为交互式模式-login shell 和 非交互式模式-non-login shell。
- 交互式模式,就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
- 非交互式模式,shell也可以运行在另外一种模式-非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
例如,我们通过终端,输入用户名、密码,登录系统之后,得到就是一个 login shell。 而当我们执行以下命令 ssh hadoop103 command,在 hadoop103 执行 command 的就是一个 non-login shell。
二者区别
这两种 shell 的主要区别在于,它们启动时会加载不同的配置文件,login shell 启动时会加载/etc/profile,~/.bash_profile,~/.bashrc。non-login shell 启动时会加载~/.bashrc。而在加载~/.bashrc(实际是~/.bashrc 中加载的/etc/bashrc)或/etc/profile 时,都会执行如下代码片段,
因此不管是 login shell 还是 non-login shell,启动时都会加载/etc/profile.d/*.sh 中的环境变量,所以呢,如果有非常基础的环境变量可以直接配置在/etc/profile.d/*.sh 中。
2.linux环境变量配置方法总结
配置方法 | 说明 | 生效时间 | 生效期限 | 生效范围 | 备注 |
---|---|---|---|---|---|
| 使用export 命令直接修改PATH 的值 | 立即生效 | 当前终端有效,窗口关闭后无效 | 仅对当前用户有效 | 配置的环境变量中不要忘了加上原来的配置,即 |
| 通过修改用户目录下的~/.bashrc 文件进行配置 | 使用相同的用户打开新的终端时生效,或者手动source ~/.bashrc 生效 | 永久有效 | 仅对当前用户有效 | 如果有后续的环境变量加载文件覆盖了 |
| 在文件最后加上新的路径即可 | 使用相同的用户打开新的终端时生效,或者手动source ~/.bash_profile 生效 | 永久有效 | 仅对当前用户有效 | 如果没有 |
| 修改系统配置,需要管理员权限(如root)或者对该文件的写入权限 | 新开终端生效,或者手动source /etc/bashrc 生效 | 永久有效 | 对所有用户有效 | |
| 需要管理员权限或者对该文件的写入权限 | 新开终端生效,或者手动source /etc/profile 生效 | 永久有效 | 对所有用户有效 | |
| 修改系统环境配置文件,需要管理员权限或者对该文件的写入权限 | 新开终端生效,或者手动source /etc/environment 生效 | 永久有效 | 对所有用户有效 |
参考文章:
该文章后面重点讲解了linux环境变量加载原理,对环境变量做了分类,并且测试了各个环境变量加载的顺序