当前位置:首页>Linux>Linux环境变量总结

Linux环境变量总结

  • 2026-10-12 01:18:31
Linux环境变量总结

总结下Linux环境变量的用法,避免用的时候懵懵的。

一、环境变量核心定义

环境变量是 Linux 系统全局的键值对配置,用于告诉系统可执行程序、动态库的查找路径,以及软件运行所需的核心参数,是 Linux 运行软件、执行命令的基础。

二、环境变量「添加 + 生效」(临时 / 永久,用户级 / 系统级)

1、临时添加+生效

语法(终端直接执行,立即生效)

# 1. 新增/覆盖变量(子shell可继承,最常用)export 变量名=变量值# 2. 追加变量值(PATH路径专属,必加$变量名:)export 变量名=$变量名:新增值# 3. 简写(仅当前shell生效,子shell不继承,不推荐)变量名=变量值

实操

# 临时追加Python路径export PATH=$PATH:/usr/local/python3/bin# 临时定义自定义变量export TEST=linux_env

✅ 生效规则 & 场景

生效:执行命令后当前终端立刻生效,无需额外操作;

失效:关闭终端 / 断开 SSH 后永久消失;
场景:临时测试、单次运行软件、调试脚本,不想污染系统配置。

2、永久添加 & 生效

永久配置的本质:将export 变量=值写入系统指定配置文件,配置后仅需对当前会话手动生效,后续新开终端 / 重启系统会自动生效。

分类 1:用户级

👉核心配置文件(优先级排序):~/.bashrc > ~/.bash_profile > ~/.profile

👉 操作身份:普通用户(无需 root,家目录文件拥有完整权限)

👉 完整操作流程

# 步骤1:编辑配置文件(推荐vim,新手可用nano)vim ~/.bashrc# 步骤2:文件末尾追加配置(示例:Java环境)export JAVA_HOME=/usr/local/jdk1.8export PATH=$PATH:$JAVA_HOME/bin# 步骤3:保存退出(vim输入:wq)# 步骤4:当前会话手动生效(二选一)source ~/.bashrc. ~/.bashrc

分类 1:系统级

👉核心配置文件(优先级排序):/etc/environment > /etc/profile > /etc/bashrc

👉 操作身份:必须 root/sudo(系统级文件仅管理员有写入权限)

👉 完整操作流程

# 步骤1:编辑系统配置文件(加sudo获取权限)sudo vim /etc/profile# 步骤2:文件末尾追加配置(示例:全局Python)export PATH=$PATH:/usr/local/python3/bin# 步骤3:保存退出# 步骤4:当前会话手动生效source /etc/profile

永久配置核心生效规则

  1. 配置文件修改后,新终端 / 重启系统 → 自动生效;
  2. 配置文件修改后,当前终端 → 必须执行 source 配置文件才生效;
  3. /etc/environment特殊:纯变量=值格式,不能写 export,修改后需
reboot或su - 用户名生效,无法 source。

三、环境变量「查看」(单变量 / 所有变量 ,用户级 / 系统级)

1. 查看单个环境变量

echo $变量名# 示例:查看PATH、JAVA_HOMEecho $PATHecho $JAVA_HOME

2. 查看当前会话所有环境变量(系统 + 用户 + 临时)

# 方式1(推荐,仅显示环境变量,输出整洁)env# 方式2(与env等效,兼容性更强)printenv# 方式3(筛选指定关键词,实用)env | grep PATHenv | grep JAVA

3. 查看所有变量(环境变量 + 本地 shell 变量)

set

4. 区分「系统级」「用户级」变量

Linux 无直接分离命令,通过配置文件溯源判断:

  • 写入/etc/开头文件 → 系统级变量;
  • 写入~/.开头文件 → 用户级变量;
  • 终端临时 export → 不属于系统 / 用户级,仅当前会话有效。

四、环境变量「删除」(临时 / 永久,用户级 / 系统级)

删除分临时失效(仅当前会话)和永久删除(彻底移除,重启不恢复),核心原则:用户级变量在用户文件删,系统级在系统文件删。

1. 临时删除(当前会话失效,无文件修改)

# 语法:unset 变量名unset JAVA_HOMEunset TEST# 验证:删除后echo无输出即成功echo $JAVA_HOME

2. 永久删除(彻底移除,分 2 类)

✔️ 永久删除「用户级」变量(普通用户身份)

# 步骤1:编辑用户配置文件(变量99%在~/.bashrc)vim ~/.bashrc# 步骤2:找到对应export行,直接删除# 步骤3:当前会话生效(删除后立刻生效)source ~/.bashrc

✔️ 永久删除「系统级」变量(root/sudo 身份)

# 步骤1:编辑系统配置文件(变量通常在/etc/profile)sudo vim /etc/profile# 步骤2:删除对应export行,保存退出# 步骤3:当前会话生效source /etc/profile

五、ld.so.conf是什么?和环境变量的区别

1. ld.so.conf的核心作用(和 PATH完全不同)

Linux 存在两类核心路径配置,各司其职,缺一不可:

配置项
作用对象
核心功能
生效命令
PATH
环境变量
可执行程序(java/ls/python)
执行命令时,系统去哪里找可执行文件
source 配置文件
ld.so.conf
动态链接库(.so 文件)
程序运行时,系统去哪里找依赖的.so 库
sudo ldconfig

💡 类比:Linux 的.so文件 = Windows 的.dll文件,都是程序运行的依赖文件。

2. 修改ld.so.conf的场景 & 操作

✔️ 修改场景

安装C/C++ 编译型软件(Nginx/MySQL/CUDA)后,系统提示error while loading shared libraries: xxx.so,原因是软件的.so库路径不在系统默认搜索目录(/lib//usr/lib)。

✔️ 规范操作(推荐不直接改主文件,更安全)

# 步骤1:在/etc/ld.so.conf.d/新建专属.conf文件(root身份)sudo vim /etc/ld.so.conf.d/mysql.conf# 步骤2:写入软件的动态库路径/usr/local/mysql/lib# 步骤3:强制生效(必须执行,核心)sudo ldconfig# 验证:查看库是否被加载ldconfig -p | grep mysql

六、为什么安装软件后,必配环境变量 / 修改 ld.so.conf?

安装软件后配置是Linux 的硬性要求,核心原因有 3 个:

✅ 1. 软件安装路径「非系统默认路径」

Linux系统仅会在/bin//usr/bin等默认路径查找可执行程序,而手动安装的软件(Java/Maven/MySQL)通常在/usr/local/软件名//opt/软件名,不追加 PATH 则系统找不到命令(敲java提示command not found)。

✅ 2. 软件运行依赖「专属环境变量」

很多软件的底层脚本会读取自定义环境变量定位安装目录,缺一不可:

  • Java:必须配置JAVA_HOME,否则javac/java命令无法正常运行;
  • Maven:必须配置MAVEN_HOME,否则无法识别仓库 / 配置文件路径。

✅ 3. 编译型软件依赖「动态链接库」

C/C++开发的软件(Nginx/MySQL)运行时依赖.so库,不配置 ld.so.conf 则程序启动失败。

七、Linux 环境变量 ↔ Windows 环境变量

操作维度
Linux
Windows
核心共性
临时添加
终端export 变量=值
CMD 中set 变量=%变量%;值
仅当前会话生效,关闭即消失
用户级永久配置
写入~/.bashrc,source生效
「此电脑→高级→用户变量」面板配置
仅当前用户生效,无管理员权限
系统级永久配置
写入/etc/profile,sudo+source
「此电脑→高级→系统变量」面板配置
所有用户生效,需管理员 /root
可执行程序路径
PATH
环境变量
Path
系统 / 用户变量
系统执行命令的搜索目录列表
动态库路径
ld.so.conf
 + ldconfig
LIB
/LD_LIBRARY_PATH变量
程序运行的依赖库搜索目录
查看变量
echo $变量名
/env
echo %变量名%
/set
单变量查值,全局命令查所有
删除变量
临时unset/ 永久删配置行
临时set 变量=/ 面板删除
分临时取消、永久删除两层
生效规则
永久配置后,当前会话需 source
永久配置后,需新开 CMD / 重启电脑
新会话自动生效,旧会话需手动

💡 额外核心类比:

Linux source 配置文件 = Windows 新开 CMD 窗口;

Linux /etc/profile = Windows 系统变量;

Linux ~/.bashrc = Windows 用户变量;

Linux .so库 = Windows .dll库。

八、所有配置文件「优先级」+「修改场景」+「操作身份」

✅ 1. 环境变量配置文件「加载 & 优先级」(后加载覆盖前加载,从低到高)

/etc/environment→/etc/profile→ /etc/bashrc → ~/.bash_profile → ~/.bashrc → 终端临时export

✅ 核心规则:

① 系统级文件先加载,用户级文件后加载,用户级可覆盖系统级;
② 终端临时export优先级最高,覆盖所有配置文件的同名变量;
③zsh终端专属:默认加载~/.zshrc,不加载bash文件,需手动加source ~/.bashrc复用配置。

✅ 2. 所有配置文件「修改场景 + 操作身份」

配置文件
优先级
作用范围
修改场景
操作身份
权限说明
/etc/environment
最高
全局所有用户
配置系统核心变量(PATH/LANG),开机最早加载
root/sudo
仅 root 可写,系统核心文件
/etc/profile
高
全局所有用户
所有用户共用的软件路径、全局变量
root/sudo
仅 root 可写,系统级核心配置
/etc/bashrc
中高
全局所有用户
全局 bash 终端的别名、通用配置
root/sudo
仅 root 可写
~/.bash_profile
中
仅当前用户
SSH 登录式 shell 专属配置
普通用户
家目录文件,用户完全可控
~/.bashrc
中低
仅当前用户
个人软件路径、自定义变量、别名(✅推荐)
普通用户
家目录文件,用户完全可控
/etc/ld.so.conf/*.conf
-
全局所有用户
配置动态链接库路径,解决.so 库缺失问题
root/sudo
仅 root 可写,系统库配置
终端临时 export
最高
仅当前会话
临时测试、单次运行软件
任意身份
无文件修改,无权限限制

九、高频生产场景实操

✅ 场景 1:个人安装 Java,用户级永久配置

echo'export JAVA_HOME=/usr/local/jdk1.8'>> ~/.bashrcecho'export PATH=$PATH:$JAVA_HOME/bin'>> ~/.bashrcsource ~/.bashrcjava-version

✅ 场景 2:服务器安装 Python,系统级全局配置

sudo echo'export PATH=$PATH:/usr/local/python3/bin'>> /etc/profilesource /etc/profilepython3 -V

✅ 场景 3:安装 Nginx,解决.so 库缺失问题

sudo echo'/usr/local/nginx/lib'>> /etc/ld.so.conf.d/nginx.conf sudo ldconfigldconfig -p | grep nginx

✅ 场景 4:永久删除用户级 MAVEN_HOME 变量

sed-i'/MAVEN_HOME/d' ~/.bashrcsource ~/.bashrc

十、核心口诀总结

✅ 环境变量操作口诀

临时用:终端export,关窗就失效;个人永久:写~/.bashrc,source一下就生效;系统永久:写/etc/profile,sudo+source不能少;查变量:echo $名,env看全部;删变量:临时unset,永久删配置行。

✅ 优先级/身份/场景口诀

优先级:系统级先加载,用户级后覆盖,临时export最高级;改文件:全局用root改/etc,个人用自己改~/.bashrc;身份:系统级=root,用户级=普通用户,临时操作无限制;装软件:配PATH找程序,改ld.so.conf找.so库。

✅ 补充知识点口诀

变量继承:加export子shell有,不加没有;特殊符号:空格引号包,双引解析变量,单引原样;排错技巧:先查配置行,再验路径,最后看加载顺序;不同shell:bash用bashrc,zsh用zshrc,复用加source。

最新文章

随机文章