系统环境变量是一些保存变量的数据类型,如使用jdk运训Java程序时,需要知道jdk的路径,因此可以将jdk的路径保存到一个变量中,通过查询这个变量就可以获取jdk的路径.
Linux中环境变量主要用来定义系统运行环境的一些参数.
Linux中,环境变量名称一般是全大写,这是约定俗成的规范
1. Linux环境变量的分类
1. 按照生命周期
临时环境变量
临时定义的环境变量,当退出shell环境之后,环境变量就失效了.
永久环境变量
永久性的环境变量,不会因为用户退出shell环境就失效.
2. 按照作用域
系统环境变量
环境变量的作用域是整个系统,也就是无论Alice还是Bob登陆了系统,已经设置的系统环境变量的值不会因为用户的不同而产生差异.
系统环境变量
用户环境变量
是单个用户设置的环境变量,只有特定用户才能使用,如 Alice用户设置的环境变量,Bob登陆后就会发现他不能使用Alice定义的环境变量.
2.常见的环境变量
可以使用env命令查询系统的环境变量,常用的环境变量名称和意义如下表:
| 环境变量名称 | 作用 |
|---|---|
| HOME | 用户的主目录(也称家目录) |
| SHELL | 用户使用的 Shell 解释器名称 |
| PATH | 定义命令行解释器搜索用户执行命令的路径 |
| EDITOR | 用户默认的文本解释器 |
| RANDOM | 生成一个随机数字 |
| LANG | 系统语言、语系名称 |
| HISTSIZE | 输出的历史命令记录条数 |
| HISTFILESIZE | 保存的历史命令记录条数 |
| PS1 | Bash解释器的提示符 |
| 邮件保存路径 |
2. 设置环境变量
环境变量有关的文件介绍
| 文件 | 作用 |
|---|---|
| ~/.bash_history | 记录用户输入过的历史命令 |
| ~/.bash_logout | 注销shell时的执行的命令 |
| ~/.bash_profile | 为系统的每个用户设置环境信息,用户登陆时从/etc/profile.d目录中查找shell设置 |
| ~/.bashrc | 每次使用shell时执行 |
| /etc/profile | 系统环境变量,对所有用户生效 |
环境变量的设置方法
| 环境变量类型 | 设置方法 | 优点 | 缺点 |
|---|---|---|---|
| 系统环境变量 | 修改/etc下的profile文件 | ||
| [推荐] 在/etc/profile.d目录下通过添加sh脚本设置环境变量 | 容易维护,只需要在目录下增删改单个脚本就可以修改环境变量 | ||
| /etc/bashrc文件中设置环境变量 | |||
| 用户环境变量 | [推荐] 在~/.bash_profile文件中设置,如果没有此文件就新建一个 | ||
| 在~/.bashrc中设置 | 每次登陆或打开shell都要读取.bashrc文件,效率低 |
设置环境变量的基本语法
k=v形式定义
设置环境变量一般使用VARIABLE=value的格式进行创建.如设置Java中依赖的路径时CLASSPATH==/usr/local/jdk-11.0.11/jre/lib.
:分割多个路径
如果一个变量包括多个值,则使用:作分隔符,隔开几个值.如PATH环境变量中,PATH=/usr/local/jdk-11.0.11/bin:/bin:/ust/local/texlive/2022/bin/x86_64-linux:.
export进行变量传递
不用export设置的环境变量仅对当前shell起作用,不会传导到子进程。export设置的环境变量在子进程也有效。
.的作用
.代表当前目录,在PATH中设置环境变量时,一般需要加入.,不加入.则需要使用./或者绝对路径.其区别参考来源于REFERENCE-2的图:
使用$进行环境变量引用
$代表引用环境变量,其在环境变量设置中有以下用法:
查询特定环境变量的值
通过使用echo $VARIABLE命令可以查询某个环境变量的值,如echo $PATH命令会查询PATH环境变量的值.
引用环境变量
有时候可能要引用已经定义好的环境变量,此时只需要使用$符号进行引用就可以.如:
export JAVA_HOME=/usr/local/jdk-11.0.11
export PATH=$JAVA_HOME/bin:$PATH:.
在上述例子中,使用$JAVA_HOME引用已经定义好的JAVA_HOME环境变量,同时,使用$PATH引用之前已经定义好的环境变量进行扩充.不同环境变量执行顺序为:
flowchart LR
sysprofile([/etc/profile])-->sysprofile.d(/etc/profile.d)-->sysbahsrc(/etc/bashrc)-->userprofile(用户的.bash_profile)-->userbashrc([用户的.bashrc])
因此,后生效的环境变量可以通过$符号调用前面的环境变量.