前言
在Linux系统中,环境变量可以在多个地方配置,从全局到局部依次为:
系统级配置文件:
/etc/environment
: 这个文件通常用于设置系统的全局环境变量。这些变量对所有用户和所有进程都有效。
/etc/profile
: 这个文件用于设置系统范围的Shell变量和环境变量。但是它在所有用户登录时都会执行。
/etc/profile.d/
: 这是一个目录,其中可以存放各种脚本文件,用于设置特定应用或服务的环境变量。这些脚本会在用户登录时由
/etc/profile
执行。
用户级配置文件:
~/.bashrc
: 这个文件主要用于设置Bash Shell的本地变量和别名。它通常在每次启动一个新的Bash Shell时执行。
~/.bash_profile
或~/.profile
: 这些文件在用户登录时执行,用于设置用户级别的环境变量。通常
~/.bash_profile
会在~/.bashrc
之前执行。~/.pam_environment
: 这个文件用于设置用户的个人环境变量,类似于/etc/environment
,但只对当前用户有效。
会话级配置(当前Shell):
export
命令:可以在当前Shell会话中使用export
命令直接设置环境变量。这些变量只对当前Shell及其子进程有效。
source
命令:可以使用source
命令执行脚本或读取配置文件,以将变量设置到当前Shell会话中。
进程级配置:
通过程序的启动命令行参数传递环境变量。
例如,使用
env
命令或直接在命令前设置变量,如VAR=value command
。这些变量只对该命令的进程及其子进程有效。
总结:
- 全局配置:
/etc/environment
、/etc/profile
、/etc/profile.d/
- 用户配置:
~/.bashrc
、~/.bash_profile
、~/.profile
、~/.pam_environment
- 会话配置:使用
export
和source
命令 - 进程配置:通过命令行参数传递环境变量
系统级
/etc/environment
中不能写脚本,只能写键值的方式
我测试的这样配置 配置后在
init.d
中的脚本里依旧无法读取。AI的答复:
/etc/environment
文件是为交互式shell设计的,而init.d
脚本通常是为非交互式shell运行的。在
/etc/environment
中设置的环境变量只会在登录时被读取,而不是为所有的进程加载。
编辑
1 | vi /etc/environment |
内容
1 | JAVA_HOME="/usr/local/jdk/bisheng-jdk1.8.0_422" |
生效
1 | source /etc/environment |
服务中环境变量生效
/etc/profile
文件通常在用户登录时由用户会话(如 bash
会话)读取并执行。
init.d
脚本是在系统启动时由 init
进程(或 systemd
)执行的,它们运行在系统级别,而不是用户会话级别。
所以init.d
中的脚本读取不到 /etc/profile
文件中的环境变量。
我们可以使用. /etc/profile
进行手动加载。
示例
1 |
|