Linux - 环境变量
在 Linux 系统中,环境变量是用来设置记录系统运行时使用的一些配置的变量。
一、分类
大体分为以下两种:
- 系统环境变量:系统级别的环境变量,在所有用户的环境中都有效。
- 通常全部大写,如
PATH
,HOME
等。
- 通常全部大写,如
- 局部环境变量:只对当前 shell 有效的环境变量,不会传递给子 shell 或子进程。
二、用途
- 搜索可执行文件路径,如
PATH
变量。 - 储存系统配置的默认值
- 储存特定程序的配置
- 存储时区、语言、用户名等信息
- 配置 shell 的外观和行为,如
PS1
变量设置命令提示符。
三、处理环境变量
Linux 不会为系统维持或存储全局环境变量
每个进程都有自己的环境变量,不同进程的环境变量不同,具体存储在
/proc/<pid>/environ
这> 一虚拟文件中。 (pid
为进程 ID)每个 shell 也是一个进程,它也有自己的环境变量
每个进程都有一个启动它的父进程,子进程启动时,会从父进程继承环境变量。
3.1 不同 shell 的环境变量和启动脚本
对于不同的 shell,系统会加载不同的环境变量配置文件,导致环境不同。
Login Shell
: 输入密码登录系统后运行的顶层 shell/etc/profile
~/.bash_profile
或~/.profile
或~/.bash_login
Non-Login Shell
: 非登录时运行的 shell,例如通过bash
开启的子 shell。~/.bashrc
/etc/bashrc
或/etc/bash.bashrc
/etc/profile
文件
/etc/profile
文件是系统级的环境变量配置文件,将会应用给所有用户,以及 Login Shell
和 Non-Login Shell
(继承获得)。
注意
通常需要 root 权限才能修改此文件,一般情况也都不建议直接修改此文件。
如果需要修改系统环境变量,推荐在 /etc/profile.d
目录下创建 *.sh
文件(并添加执行权限),因为 /etc/profile
会自动加载这些文件。这样修改也拥有更高的可移植性。
3.2 修改环境变量
给启动的程序添加环境变量
env VAR=VALUE [command]
或VAR=VALUE [command]
添加局部环境变量(不可继承)
VAR=VALUE
添加局部环境变量(可继承)
export VAR=VALUE
将不可继承的环境变量变成可继承的环境变量:export VAR
将可继承的环境变量变成不可继承的环境变量:export -n VAR
删除环境变量:
unset VAR
3.3 读取环境变量
echo $VAR
或echo ${VAR}
: 打印指定环境变量的值printenv VAR
: 打印指定环境变量的值env
/printenv
: 显示当前所有环境变量
四、常用环境变量
PATH
PATH
变量用于指定 shell 查找可执行文件的路径(用 :
分隔不同的路径)
将路径添加在 PATH
后,可以直接通过文件名直接运行程序,而不需要指定路径。
在
PATH
尾部添加路径:export PATH=$PATH:/path/to/dir
在PATH
头部添加路径:export PATH=/path/to/dir:$PATH
HOME
HOME
变量用于指定当前用户的主目录。