Linux 环境变量详解与实用技巧

一、Linux 环境变量的分类

环境变量根据其生效的范围与持续时间,可分为以下两类:

  1. 永久性变量:通过修改配置文件实现,系统重启后依然生效。
  2. 临时性变量:使用 export 命令临时设置,变量在当前 shell 会话中有效,关闭 shell 后失效。

二、设置环境变量的方法

提示
修改配置文件后,如果希望立即生效,需运行 source <路径>/<配置文件> 命令,否则修改将在下次登录时生效。

1. 对所有用户生效(永久)

若希望某个环境变量对所有用户永久生效,可以将其添加到 /etc/profile 文件中。

1
sudo vim /etc/profile

2. 对单个用户生效(永久)

如果只希望变量对特定用户生效,可以将其添加到该用户的 .bash_profile 文件中。

1
vim /home/<用户名>/.bash_profile

3. 对当前用户生效(永久)

对于当前用户,可以将环境变量添加到 .bashrc 文件中。这些变量同样是永久有效的,但仅对当前用户生效。

1
vim ~/.bashrc

4. 仅对当前 shell 生效(临时)

临时变量通过 export 命令定义,作用范围仅限于当前 shell 会话或其子 shell。关闭 shell 后,临时变量将失效。

1
export 变量名=变量值

例如,临时设置 JAVA_HOME

1
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79

该变量在当前会话有效,若打开新的 shell 会话,则需重新定义。

三、环境变量的配置格式

1. 使用 export 声明环境变量

可以使用 export 命令直接定义或导出环境变量。如果需要设置多个变量,变量名之间用空格分隔。

单个环境变量的定义示例:

1
2
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79
export PATH=$JAVA_HOME/bin:$PATH

多个环境变量的定义示例:

1
2
3
4
5
JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79
CLASSPATH=.:${JAVA_HOME}/lib/tools.jar:${JAVA_HOME}/lib/dt.jar
PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME CLASSPATH PATH

2. 配置格式解析

  • . (点): 代表当前目录。例如,在 CLASSPATH 中使用 . 表示程序将在当前目录中查找类文件。
  • : (冒号): 用于分隔多个路径。例如,在 PATH 中,冒号分隔不同的路径值。
  • ${变量名}: 这种形式用于引用环境变量的值,例如 ${JAVA_HOME}

通过将新定义的路径追加到已有的 PATH 变量,可以避免覆盖原有的系统路径:

1
export PATH=$JAVA_HOME/bin:$PATH

这样,新的路径会被添加到 PATH 变量中,原来的系统路径仍然有效。

四、常见问题与误区

1. 为什么使用 :$PATH

在设置 PATH 时,我们会将新路径附加到已有的 PATH 值之后(通过 :$PATH)。这样做的目的是保留系统原有的可执行文件搜索路径,而不是完全覆盖它。例如:

1
export PATH=/custom/path:$PATH

这会确保自定义路径在系统的搜索路径中优先级更高,但系统的默认路径仍然保留。

2. 为什么 CLASSPATH 可以不包含自身,而 PATH 需要包含?

CLASSPATH 通常在初始状态下为空,因此不需要将其自身追加进去。而 PATH 默认情况下已经包含了系统执行命令的目录(如 /usr/bin 等),因此每次修改时都需要保留原有的 PATH 值,以确保基础命令可用。

3. 为什么不建议将当前目录 . 添加到 PATH 中?

将当前目录 . 添加到 PATH 中可能带来安全隐患,原因如下:

  • 目录不固定:每次 cd 命令切换目录后,当前目录会变化,可能导致不同的指令在不同目录下产生不一致的行为。
  • 安全问题:某些公共目录(如 /tmp)可以被任意用户写入,恶意用户可能会放置同名恶意程序(如 ls),并诱导用户运行。因此,避免将 . 加入 PATH 是良好的安全实践。

五、查询环境变量的常用命令

1. env

使用 env 命令可以显示当前系统的环境变量。

1
env

2. set

set 命令不仅显示环境变量,还会列出用户自定义的变量。

1
set

3. echo

可以使用 echo 命令来查询特定环境变量的值。例如,查看当前 PATH 变量的值:

1
echo $PATH

六、常用环境变量解析

一些常见且重要的环境变量包括:

  • PATH: 决定了 shell 到哪些目录中寻找可执行程序。
  • HOME: 当前用户的主目录路径。
  • HISTSIZE: 保存 shell 历史命令的条数。
  • LOGNAME: 当前用户的登录名。
  • HOSTNAME: 系统的主机名。
  • SHELL: 用户正在使用的 shell 类型。
  • LANG: 语言环境变量,用于支持多语言系统。
  • MAIL: 用户邮件存放路径。
  • PS1: 命令提示符的格式设置,root 用户通常显示 #,普通用户显示 $

七、修复误配置的环境变量

如果由于误操作导致环境变量(如 PATH)配置错误,系统命令无法执行,可以通过以下方法重置 PATH

1
export PATH=/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

这样即可恢复系统的默认路径,确保基本命令可以正常运行。


Linux 环境变量详解与实用技巧
https://blog.pangcy.cn/2021/09/03/服务器运维/Linux/Linux 环境变量详解与实用技巧/
作者
子洋
发布于
2021年9月3日
许可协议