首页 >> 知识问答 >

问linux 设置环境变量 永久临时配置详解

2026-11-08 22:41:44

答

核心结论是 Linux 设置环境变量分为临时生效和永久生效两大类,临时方式直接在终端使用 export 命令,只对当前这个 shell 会话有效,关闭终端就失效,永久方式需要写入对应的配置文件,区分全局所有用户生效和单用户生效,常用文件有 etc profile etc bashrc 用户家目录下 bash_profile bashrc,环境变量本质是 shell 运行时保存的键值参数,最典型就是 PATH 变量,作用是告诉系统执行命令的时候去哪些目录查找可执行程序,安装 JDK Maven Go 这类软件之后,基本都需要 linux 设置环境变量,让终端可以直接调用软件命令,不同配置文件加载顺序不一样,理解加载顺序是 linux 设置环境变量最关键的知识点,很多新手配置完不生效,基本都是选错配置文件或者没有重新加载配置导致。

Linux 的 shell 在启动的时候会按照固定顺序读取配置文件,登录 shell 和非登录 shell 读取的文件并不相同,登录 shell 会读取 profile 类文件,普通新开终端非登录 shell 优先读取 bashrc,这就是为什么同样是 linux 设置环境变量,写在 bash_profile 里面,新开普通终端却识别不到,shell 还会区分全局配置和用户私有配置,全局配置对服务器全部账号生效,适合服务器统一软件环境,用户私有配置只针对当前账号,适合个人开发环境,另外 export 命令是把普通变量导出成环境变量,普通 shell 变量不会传递给子进程,只有导出之后的环境变量,子进程才可以继承,这也是 linux 设置环境变量容易混淆的核心原理。

配置方式总览表格

配置方式生效范围生效周期适用场景
export 临时命令当前 shell 会话关闭终端失效临时测试软件环境
~/.bashrc当前单个用户新开终端永久生效个人开发环境变量
~/.bash_profile当前单个用户登录 shell 永久生效用户登录加载环境变量
/etc/profile全部用户登录 shell 永久生效服务器全局环境变量
/etc/bashrc全部用户非登录 shell 永久生效全局 bash 环境变量
/etc/profile.d/ 目录脚本全部用户登录 shell 永久生效推荐全局软件环境变量

详细操作步骤

临时 linux 设置环境变量

直接在终端输入 export JAVA_HOME=/usr/local/jdk1.8,然后 export PATH=JAVAH​OME/bin:PATH

执行 echo $JAVA_HOME 可以查看变量是否设置成功

这个方式只在当前终端有效,关闭窗口重新打开终端,变量就消失,适合临时调试测试

单用户永久 linux 设置环境变量

编辑家目录的 bashrc 文件,执行 vi ~/.bashrc

在文件末尾追加 export JAVA_HOME=/usr/local/jdk1.8 还有 PATH 相关配置

保存退出之后,执行 source ~/.bashrc 重新加载配置,不用重启终端

后续每次新开终端,这个 linux 设置环境变量都会自动加载

单用户登录配置文件 bash_profile

编辑 vi ~/.bash_profile,在里面写入环境变量配置

保存之后 source ~/.bash_profile,这个文件主要是登录系统的时候加载,很多发行版 bash_profile 内部会自动调用 bashrc,两个文件可以配合使用

全局所有用户 linux 设置环境变量

推荐使用 profile.d 目录,新建脚本文件,例如 vi /etc/profile.d/jdk.sh

在脚本里面写入 export JAVA_HOME 和 PATH 配置,给脚本加上执行权限 chmod +x /etc/profile.d/jdk.sh

这种方式优点是不用修改原始的 etc profile 主文件,后续升级系统不容易覆盖配置,是企业运维推荐做法

也可以直接编辑 /etc/profile,在末尾追加环境变量,保存之后 source /etc/profile,所有用户登录都会读取这个 linux 设置环境变量

查看与验证环境变量

执行 env 可以列出全部环境变量

执行 echo $ 变量名 单独查看某个变量值

执行 printenv 变量名 同样可以查询,比如 printenv PATH

进阶要点

PATH 变量追加的时候,写法 $PATH 放在后面代表原有路径保留,不要直接覆盖,一旦覆盖原有系统命令目录,会导致 ls cd 这类基础命令无法使用

子进程继承机制,export 之后的环境变量,脚本和子 shell 可以读取,没有 export 的普通变量不能被子进程继承

不同 shell 差异,如果使用 zsh,配置文件变成.zshrc,linux 设置环境变量文件和 bash 不一样,不要混用

登录 shell 和非登录 shell,如果配置之后只有 ssh 登录才生效,新开本地终端不生效,就是文件选择错误

【常见问题】

问题 1 linux 设置环境变量配置完为什么新开终端不生效

回答 1 linux 设置环境变量写完配置文件之后,如果没有执行 source 加载,或者选错了配置文件,登录 shell 和非登录 shell 读取文件不一样,就会出现 linux 设置环境变量不生效,需要确认是写在 bashrc 还是 bash_profile,执行 source 重新加载配置。

问题 2 linux 设置环境变量全局配置推荐修改 etc profile 还是 profile.d

回答 2 linux 设置环境变量推荐优先使用 /etc/profile.d 目录单独脚本,不用直接修改 /etc profile 主文件,这种 linux 设置环境变量方式方便维护,系统升级的时候不容易丢失配置,也是企业服务器常用方案。

问题 3 linux 设置环境变量 export 和普通赋值变量有什么区别

回答 3 linux 设置环境变量只做赋值不会被子进程继承,加上 export 之后才变成环境变量,子进程脚本可以读取这个变量,linux 设置环境变量核心就是需要 export 导出,否则只是当前 shell 局部变量。

问题 4 linux 设置环境变量 PATH 覆盖之后系统命令找不到怎么办

回答 4 linux 设置环境变量的时候如果错误写法把原有 PATH 直接覆盖,ls 等基础命令就会失效,临时可以使用绝对路径执行命令,然后重新编辑配置文件,保留原有 $PATH,修正 linux 设置环境变量的写法。

【免责申明】

本文内容仅作为 Linux 技术学习参考,linux 设置环境变量错误配置会造成软件启动异常,甚至覆盖 PATH 导致系统基础命令失效,生产环境执行 linux 设置环境变量前建议备份原配置文件,修改之后充分验证,不同 shell 不同发行版加载文件存在差异,操作产生的软件故障系统异常等后果由操作者自行承担。

 

相关阅读

最新文章