临时环境变量用export命令定义,仅当前终端有效;用户级永久配置写入~/.bashrc并source生效;系统级全局变量应配置在/etc/environment中,格式为var_name="value"且需重新登录才生效。

临时设置环境变量只在当前终端生效
直接用 export 命令定义的变量,关掉终端就没了,适合调试或单次运行。比如想临时加个工具路径:export PATH=$PATH:/opt/mytool/bin。注意两点:等号前后不能有空格;$PATH 必须带上,否则会覆盖原有路径,导致 ls、cd 等基础命令找不到。
用户级永久配置写进 ~/.bashrc 最常用
绝大多数人只需要让变量对「自己账号」长期有效,~/.bashrc 是首选。它在每次打开新终端时自动加载,覆盖了登录/非登录 shell 的差异。操作很简单:
- 用
nano ~/.bashrc或vim ~/.bashrc编辑文件 - 末尾追加一行:
export MY_VAR="value"或export PATH=$PATH:/my/app/bin - 执行
source ~/.bashrc立即生效(不用重启终端)
别往 ~/.bash_profile 里写——除非你明确知道它是 login shell 才读的,而图形界面下开的终端根本不会触发它。
系统级全局变量优先用 /etc/environment
要让所有用户(包括 root 和新创建的用户)都能访问某个变量,且不依赖 shell 类型(bash/zsh/fish 都认),就改 /etc/environment。它格式严格:VAR_NAME="value",不支持 $PATH 展开、不能写 export、也不能执行命令。例如:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" PATH="/usr/local/bin:/usr/bin:/bin:/opt/myapp/bin"
改完保存,下次登录才生效——source 没用,sudo systemctl restart systemd-logind 也不行,必须重新登录或新开用户会话。
PATH 被覆盖或失效的常见原因
PATH 出问题最典型的表现是命令突然“找不到”,比如 python3 可以用,但新装的 pip3 报错 command not found。往往因为:
- 在配置文件里写了
PATH=/new/path,漏了$PATH,等于把老路径全删了 - 多个配置文件(
~/.bashrc、/etc/profile.d/*.sh)都改了PATH,后加载的覆盖了前面的 - 用了
set而不是export,变量没传给子进程,脚本里就看不见 - zsh 用户误改了
~/.bashrc,但实际加载的是~/.zshrc
查当前生效的 PATH,直接运行 echo $PATH;查变量从哪来的,用 grep -n "PATH=" ~/.bashrc /etc/environment /etc/profile.d/*.sh 2>/dev/null。










