banner
约 1,200 字
4 分钟

Linux 环境变量教程:PATH 配置一次搞懂

摘要

"command not found" 十有八九是 PATH 问题。本教程依据 GNU Bash 官方手册整理,介绍环境变量的概念、export 导出、PATH 搜索顺序、~/.bashrc 与 /etc/profile 等配置文件的区别,并以 Go 环境配置为实战案例,附 which/type -a 排查方法。

Linux 环境变量教程:PATH 配置一次搞懂

"命令明明装好了,为什么提示 command not found?"——十有八九是 PATH 没配对。环境变量是 Linux/macOS Shell 的基础知识,也是配置开发环境(Java、Go、Node、Python 虚拟环境)的必修课。本教程依据 GNU Bash 官方手册整理。

一、什么是环境变量

环境变量是 Shell 和程序都能读到的一组键值对。查看它们:

bash
env                 # 打印所有环境变量
echo $HOME          # 家目录
echo $SHELL         # 当前 Shell
echo $PATH          # 命令搜索路径

PATH 是重中之重:当你输入 python 时,Shell 会按 PATH 里的目录从前往后依次找名为 python 的可执行文件,找到第一个就执行。所以"命令找不到"或"执行的版本不对",根源都在 PATH 的顺序上。

二、临时设置与导出

bash
MY_VAR="hello"        # 仅当前 Shell 的普通变量,子进程读不到
export MY_VAR="hello" # 导出为环境变量,子进程也能读到

往 PATH 追加一个目录(注意冒号分隔):

bash
export PATH="$PATH:/opt/mytools/bin"    # 追加到末尾
export PATH="/opt/mytools/bin:$PATH"    # 放到最前面(优先级最高)

这些设置只在当前终端会话有效,关掉窗口就没了。要永久生效,需要写进配置文件。

三、配置文件:写进哪里

Bash 启动时按类型读取不同文件:

文件

生效范围

说明

~/.bashrc

当前用户的交互式 Shell

个人环境变量首选

~/.profile / ~/.bash_profile

登录 Shell

常用于 PATH 初始化

/etc/profile/etc/environment

所有用户

系统级设置,需 root

日常给某个工具加 PATH,写 ~/.bashrc 就够了:

bash
echo 'export PATH="$PATH:$HOME/.local/bin"' >> ~/.bashrc
source ~/.bashrc     # 立即生效(或重开终端)

macOS 用 zsh 的用户对应文件是 ~/.zshrc

四、实战:配置一个开发工具

以把 Go 安装在自定义目录为例:

bash
# 写入 ~/.bashrc
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

source ~/.bashrc 后执行 go version 验证。判断一个命令到底执行的是哪个文件,用:

bash
which python      # 显示 PATH 中找到的可执行文件路径
type -a python    # 列出所有匹配(能看到多个版本冲突)

五、单次生效与持久化的区别

  • VAR=值 命令:只对这一条命令生效,如 NODE_ENV=production node app.js

  • export + 终端:当前会话有效

  • 写入 ~/.bashrc:该用户所有新终端有效

  • 写入 /etc/environment:所有用户、系统服务有效

六、总结

需求

做法

查看所有变量

env

让子进程读到变量

export VAR=值

追加 PATH

export PATH="$PATH:/新目录"

永久生效

~/.bashrcsource

查命令实际路径

which 命令 / type -a 命令

理解了 PATH 的搜索机制,"command not found" 和"版本不对"这类问题就都能自己排查了。

END