当前位置: 首页 > news >正文

Linux 环境变量详解:PATH、export、source 到底是什么?

Linux 环境变量详解:PATH、export、source 到底是什么?

1. 前言

Linux 中很多开发环境问题,本质都是环境变量问题。

常见现象:

  • 命令安装了却提示command not found
  • 配置了 Java,但java找不到;
  • 修改.bashrc后没有立即生效;
  • 脚本里设置变量,退出脚本后变量没了;
  • export和普通变量分不清;
  • source不知道什么时候用。

本文重点讲清楚:

PATHexportsource.bashrc .profile

2. Shell 变量

定义变量:

name=linux

注意:等号两边不能有空格。

错误写法:

name=linux

读取变量:

echo$nameecho${name}

推荐在拼接字符串时使用${}

echo"${name}_server"

3. 环境变量是什么

普通变量只在当前 Shell 中有效。
环境变量可以传递给子进程。

查看环境变量:

envprintenv

查看某个变量:

echo$PATHprintenvHOME

常见环境变量:

变量作用
PATH命令搜索路径
HOME当前用户家目录
USER当前用户名
SHELL当前默认 Shell
PWD当前目录
LANG语言环境
JAVA_HOMEJava 安装路径
LD_LIBRARY_PATH动态库搜索路径

4. export 的作用

普通变量不会自动传给子进程。

myvar=hellobashecho$myvar

可能没有输出。

使用export

exportmyvar=hellobashecho$myvar

子 Shell 中可以看到。

一句话总结:

export 把普通 Shell 变量变成环境变量,让子进程可以继承。

常见写法:

exportJAVA_HOME=/usr/lib/jvm/java-17exportPATH=$JAVA_HOME/bin:$PATH

5. PATH 是什么

PATH决定 Shell 到哪些目录中查找命令。

查看:

echo$PATH

示例:

/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin

多个目录用:分隔。

当输入:

ls

Shell 会依次查找:

/usr/local/bin/ls /usr/bin/ls /bin/ls

找到后执行。

查看命令实际位置:

whichls

6. command not found 的原因

执行命令:

mycmd

提示:

command not found

常见原因:

  1. 命令没有安装;
  2. 命令安装了,但不在 PATH 中;
  3. 文件没有执行权限;
  4. 命令名称写错。

例如脚本在:

/home/user/scripts/hello.sh

可以用完整路径执行:

/home/user/scripts/hello.sh

或者把目录加入 PATH:

exportPATH=/home/user/scripts:$PATH

7. 为什么要写 $PATH

如果写:

exportPATH=/opt/myapp/bin

会覆盖原来的 PATH。
可能导致lscatvim等命令找不到。

正确写法:

exportPATH=/opt/myapp/bin:$PATH

或者:

exportPATH=$PATH:/opt/myapp/bin

区别:

写法含义
新路径放前面优先使用新目录中的命令
新路径放后面系统原命令优先

8. source 是什么

source用来在当前 Shell 中执行脚本。

语法:

sourcefilename

等价写法:

.filename

常见用法:

source~/.bashrc

作用是让.bashrc中的配置立即生效。

如果用:

bash~/.bashrc

是在子 Shell 中执行,里面设置的变量不会影响当前 Shell。

一句话总结:

bash script.sh:在子 Shell 执行 source script.sh:在当前 Shell 执行

9. 常见配置文件

文件作用
/etc/profile所有用户登录 Shell 读取
/etc/profile.d/*.sh系统级环境变量脚本
~/.profile当前用户登录 Shell 读取
~/.bash_profile当前用户 Bash 登录时读取
~/.bashrc当前用户交互式 Bash 读取

普通用户最常改:

~/.bashrc

修改后执行:

source~/.bashrc

全局配置可以放:

/etc/profile.d/custom.sh

10. 临时环境变量

只想让某个命令使用变量:

VAR=valuecommand

示例:

NODE_ENV=productionnodeapp.jsLANG=Csortfile.txt

这只对当前命令有效,不会污染当前 Shell。


11. unset 删除变量

exportTEST=helloecho$TESTunsetTESTecho$TEST

删除后输出为空。


12. 脚本中使用环境变量

判断变量是否为空:

if[-z"$JAVA_HOME"];thenecho"JAVA_HOME is not set"exit1fi

设置默认值:

PORT=${PORT:-8080}echo$PORT

意思是:如果PORT没设置,就使用8080


13. systemd 和环境变量

手动运行正常,systemd 运行失败,经常是环境变量不同导致的。

systemd 不一定加载用户的.bashrc

可以在 service 文件中写:

[Service] Environment=JAVA_HOME=/usr/lib/jvm/java-17 Environment=APP_ENV=production ExecStart=/usr/bin/java -jar /opt/app/app.jar

或者使用:

EnvironmentFile=/etc/myapp/myapp.env

14. 常见问题

14.1 PATH 修改后不生效

执行:

source~/.bashrc

或者重新打开终端。

14.2 sudo 后变量丢失

sudo 默认可能清理环境变量。

可以临时使用:

sudo-Ecommand

但生产环境要谨慎。

14.3 脚本里 cd 后当前终端没变化

如果用:

bashscript.sh

脚本在子 Shell 中执行,不影响当前终端。

如果用:

sourcescript.sh

脚本在当前 Shell 执行,会影响当前终端。


15. 小结

环境变量可以这样记:

变量:当前 Shell 内部使用 export:导出给子进程 PATH:命令搜索路径 source:在当前 Shell 执行脚本

常用命令:

echo$PATHenvprintenvexportVAR=valueunsetVARsource~/.bashrcwhichcommand

理解环境变量后,Java、Python、Node、交叉编译工具链等开发环境配置问题会好排查很多。

http://www.rkmt.cn/news/1393577.html

相关文章:

  • 小样本时间序列分类:多模态编码与元特征融合框架解析
  • 实现自己的IOC容器——Winter (一)Bean加载
  • 爆款标题生成率提升4.8倍!广告公司总监压箱底的ChatGPT创意写作AB测试报告(2024Q2最新)
  • 百度网盘下载加速终极指南:使用Python工具实现满速下载的完整教程
  • 系统辨识选最小二乘还是最大似然?一个传感器噪声的例子讲明白
  • 从“飞起来”到“管得好”:2026工程进度低空管理系统供应商推荐 - 品牌2025
  • ChatGPT账号被临时限制?官方未公开的4级风控触发阈值(含IP信誉分、会话熵值、UA指纹校验逻辑)
  • 鸿蒙数学108篇 第四篇:存在与虚无数理逻辑:数学存在的底层公理
  • Scrum成功案例分析
  • 虚拟网络映射优化:基于时间概率模型的动态资源调度
  • 降精度计算在射电天文成像中的应用:FPGA硬件加速实践
  • Linux 文件权限详解:chmod、chown、umask 到底怎么用?
  • 嵌入式SIR可调谐腔体滤波器设计:实现52.4%宽调谐与恒定带宽
  • SSH Kex_exchange_identification错误根因与实战修复指南
  • 2026年5月欧米茄“非官方售后”陷阱深度起底报告 - 资讯纵览
  • HarmonyOS ArkTS DeviceUtil 设备标识符完整指南:DeviceId、ODID、OAID、AAID
  • 解决Claude Code token不足与封号风险Taotoken提供稳定替代方案
  • 【SSD】闪存2 闪存芯片架构
  • 如何快速上手Kohya_SS:专业AI绘画模型训练完全指南
  • 3个步骤让Windows系统运行如飞:Win11Debloat系统优化指南
  • 如何快速清理Windows 11:Win11Debloat系统优化完全指南
  • 【ACM出版、过往最快4.5个月检索】第二届人机交互与机器学习国际学术会议(HCIML 2026) - 每天学术做一点
  • 旺哥黄金回收(连锁品牌)|2026年5月绵阳黄金回收价格行情+连锁品牌优势+避坑指南+真实案例(涪城/游仙/高新/经开/科创园/安州通用) - 润富黄金珠宝行
  • LFDP算法解析:局部特征判别投影的原理、实现与调优
  • AI开发工具实战:二、Superpowers 工作流——让你的 AI 编码助手开挂
  • 手机相机拍的图片提取WGS84经纬度,调研图片EXIF信息
  • 3分钟掌握Win11优化:一键清理让电脑重获新生
  • Java算法练习day3
  • CAD子系统,是自研还是外包?
  • 2026年5月冷制皂代工厂对比:基于重资产合规矩阵与品牌资产化的深度权威研报 - 资讯焦点