Linux(CentOS / Ubuntu / Debian)系统环境变量笔记

Linux(CentOS / Ubuntu / Debian)系统环境变量笔记

快速速查表

场景 推荐配置位置 备注
临时调试 直接 export 当前终端有效
当前用户永久 ~/.bashrc 最常用,所有交互终端加载
所有用户(模块化) /etc/profile.d/*.sh 易管理
所有进程最通用 /etc/environment 不依赖 shell,最早加载
systemd 服务 .service 的 Environment= 必须单独设置
cron 任务 脚本内 export 或 crontab 指定 PATH 常需手动补全
图形程序 /etc/environment 或 ~/.profile

一、什么是环境变量

环境变量(Environment Variables)是以 KEY=VALUE 形式存在的系统变量,用于向 Shell、程序和脚本传递运行环境信息。

常见用途

  • 指定命令搜索路径(PATH)
  • 配置语言编码(LANG、LC_ALL)
  • 控制软件行为(JAVA_HOME、PYTHONPATH 等)
  • 区分开发/测试/生产环境

典型示例

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
HOME=/home/username
SHELL=/bin/bash
USER=username
LANG=en_US.UTF-8
LD_LIBRARY_PATH=/usr/local/lib

二、查看、管理与临时设置

查看命令

  • envprintenv:列出所有环境变量
  • printenv VARecho $VAR:查看指定变量
  • export -p:显示所有已导出的环境变量
  • set:列出所有 shell 变量(含局部变量)

临时设置(当前 Shell 会话有效):

export TEST_VAR="value"
export PATH="$PATH:/new/path"    # 追加路径

删除变量

unset TEST_VAR

三、永久配置方式与加载顺序

3.1 系统级(所有用户生效)

  1. /etc/environment(强烈推荐最通用方式)
    最先由 PAM 加载,所有进程(包括 systemd、cron、图形程序)都能继承。
    格式:VAR=value(不能有 export、引号、复杂脚本)。

    JAVA_HOME=/opt/java
    MY_APP_ENV=production
  2. */etc/profile.d/.sh**(推荐模块化方式)
    所有发行版均支持,便于管理。

    # /etc/profile.d/myapp.sh
    export MY_APP_HOME=/opt/myapp
    export PATH="/opt/myapp/bin:$PATH"
  3. /etc/profile、/etc/bashrc(或 Ubuntu/Debian 的 /etc/bash.bashrc)

3.2 用户级(当前用户生效)

  • 推荐统一写入 ~/.bashrc(所有交互式终端都会加载)
  • CentOS 也可写 ~/.bash_profile(会自动 source ~/.bashrc)
  • Ubuntu/Debian 常用 ~/.profile

示例(~/.bashrc)

export JAVA_HOME=/opt/java
export PATH="$HOME/bin:$PATH"    # 用户路径建议后置
export PATH="/opt/mybin:$PATH"   # 系统/第三方路径建议前置

加载顺序简要(Bash 登录 shell):
/etc/environment → /etc/profile → /etc/profile.d/* → ~/.bash_profile(或 ~/.profile) → ~/.bashrc

CentOS / Ubuntu / Debian各发行版差异
项目 CentOS Ubuntu / Debian
默认 Shell bash bash
用户登录变量 ~/.bash_profile ~/.profile
全局变量 /etc/profile /etc/profile
推荐方式 /etc/profile.d /etc/profile.d

👉 结论:环境变量机制一致,配置文件加载顺序略有差异。

四、PATH 配置最佳实践

  • 错误export PATH="/opt/bin"(覆盖系统路径,导致命令找不到)
  • 正确
    • 系统级/第三方工具前置:export PATH="/opt/bin:$PATH"
    • 用户个人脚本后置:export PATH="$PATH:$HOME/bin"

五、特殊场景处理(常见痛点)

以下场景不会自动加载 ~/.bashrc 或 ~/.profile,需要单独配置:

  1. systemd 服务
    在 .service 文件中:

    [Service]
    Environment="ENV=prod"
    Environment="JAVA_HOME=/opt/java"
    EnvironmentFile=/etc/myapp/env.conf   # 可加载文件
  2. cron 定时任务
    cron 环境极简,PATH 很短。

    • 在 crontab 中指定:* * * * * PATH=/usr/local/bin:/usr/bin:/bin /path/script.sh
    • 或脚本开头手动 export:
    #!/bin/bash
    export PATH=/usr/local/bin:/usr/bin:/bin
    export JAVA_HOME=/opt/java
  3. 图形界面启动的程序
    优先使用 /etc/environment 或 ~/.profile 设置。

六、使修改生效与注意事项

  • source ~/.bashrc. ~/.profile(立即生效当前终端)
  • 重新登录(大多数情况生效)
  • 重启系统(/etc/environment 一定生效)

注意事项

  • 系统文件修改需 sudo
  • /etc/environment 不支持复杂逻辑
  • 变量名统一大写,语义清晰
  • 优先用户级配置,避免影响全局