Linux系统环境变量
- 1. 环境变量
- 1.1 定义环境变量
- 1.2 使用环境变量
- 2. 环境变量作用
- 2.1 PATH
- 3. 设置环境变量
- 3.1 设置系统级环境变量
- 3.2 设置用户级环境变量
- 3.3 设置临时环境变量
1. 环境变量
在Linux系统中,常用的关键信息以键值对(Key=Value)的形式(例如:name=“buddha”)存储在环境变量配置文件中,随着系统启动及用户登录加载到进程中,该进程及子进程都可以使用该全局变量,这称为环境变量。可以用env或printenv命令查看环境变量。
用户 | 环境变量配置文件 | 配置文件加载顺序 |
---|---|---|
root、普通用户 | /etc/environment | 1 |
/etc/profile | 2 | |
/etc/profile.d/*.sh | 3 | |
/etc/bashrc | 4 | |
root | ~/.bash_profile | 5 |
~/.bashrc | 6 | |
普通用户 | ~/.bash_profile | 5 |
~/.bashrc | 6 |
**注意:**配置文件中存在同名环境变量,后面的变量会覆盖前面的变量。
1.1 定义环境变量
环境变量就是在全局变量的基础上用export命令导出。通常环境变量应该大写。
语法:
export 变量名=变量值
示例:
export MYNAME="buddha"
1.2 使用环境变量
语法:
$变量名
${变量名}
示例:
echo $MYNAME
echo ${MYNAME}helloworld
2. 环境变量作用
以PATH环境变量为例
2.1 PATH
记录了系统执行任何命令的搜索路径
[root@hecs-141089 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
路径之间以:
隔开,path变量里记录了以下搜索路径:
- /usr/local/sbin
- /usr/local/bin
- /usr/sbin
- /usr/bin
- /root/bin
命令本质上是一个有可执行权限(x)的普通文件
[root@hecs-141089 ~]# which pwd
/usr/bin/pwd
[root@hecs-141089 ~]# ll /usr/bin | grep pwd
-rwxr-xr-x 1 root root 38280 Jul 14 2021 pwd
-rwxr-xr-x 1 root root 12992 Feb 2 2021 pwdx
普通文件的执行,需要定位到该文件才能够执行
[root@hecs-141089 ~]# /usr/bin/pwd
/root
但是为什么pwd命令没有用相对路径或绝对路径定位pwd就可以在任意目录去执行呢?
[root@hecs-141089 ~]# pwd
/root
[root@hecs-141089 home]# pwd
/home
[root@hecs-141089 profile.d]# /usr/bin/pwd
/etc/profile.d
那是因为执行任何命令的时候,都会从path环境变量所记录的搜索路径中按顺序查找有可执行权限的pwd文件,找到了就拼上路径执行该文件。
/usr/local/sbin
/usr/local/bin
/usr/sbin
# /user/bin + /pwd
/usr/bin/pwd
/root/bin
所以安装的程序可执行普通文件(命令),需要在PATH环境变量里。或者修改PATH环境里搜索路径。
**备注:**命令本质是一个有可执行权限的普通文件,把命令文件全路径补齐,一样哪里都可以执行。例如:/usr/bin/pwd
3. 设置环境变量
3.1 设置系统级环境变量
系统级环境变量,作用域是整个系统
# /etc/profile.d/{文件名.sh} 新建并打开配置文件
vim /etc/profile.d/python.sh
# 文件末尾加变量定义
export MYNAME="buddha"
# 重载配置文件
source /etc/profile.d/python.sh
# 终端使用变量
echo $MYNAME
3.2 设置用户级环境变量
用户级环境变量,作用域是当前用户
# 打开配置文件
vim ~/.bash_profile
# 文件末尾加变量定义
export MYNAME="buddha"
# 重载配置文件
source ~/.bash_profile
# 终端使用变量
echo $MYNAME
3.3 设置临时环境变量
临时环境变量,作用域只在当前shell会话窗口
# 定义变量
export MYNAME="buddha"
# 使用变量
echo $MYNAME