环境变量就是给进程用的全局键值对。shell、编译工具、运行时都靠它找路径或配置。配不对,程序就罢工。
查看当前环境变量
echo $PATH
printenv
`printenv` 列出全部,`echo $变量名` 看单个。调试时先确认变量有没有加载。
临时设置(当前shell有效)
export MY_VAR="hello"
export PATH=$PATH:/usr/local/mybin
export 把变量传给子进程。不加 export,只在当前 shell 有效,子进程读不到。临时测试用这个,关掉终端就没了。
永久配置:按作用域选文件
用户级别:~/.bashrc(交互shell)、~/.bash_profile(登录shell)、~/.profile(通用)。系统级别:/etc/profile、/etc/environment、/etc/bash.bashrc。
推荐做法:用户自己的变量放 ~/.bashrc,系统级变量放 /etc/profile。别乱动 /etc/environment,它语法特殊,不支持变量展开。
编辑 ~/.bashrc:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
改完后立即生效:
source ~/.bashrc
或者重新登录终端。source 就是让当前shell重新读文件,不用开新窗口。
系统级环境变量
/etc/profile 对所有用户生效。修改后需要用户重新登录才加载,source 只对当前shell管用。
/etc/environment 是纯键值对格式,不支持 $PATH 这种引用,只能写死路径。比如:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Ubuntu 的 systemd 服务默认读这个文件,其他发行版不一定。
针对特定程序设置
启动命令前加变量赋值:
LANG=en_US.UTF-8 my_program
或者用 env 命令:
env MY_DEBUG=1 ./run.sh
这样不污染全局环境,适合测试或容器内启动。
常见坑
1. PATH 覆盖。不要把 `export PATH=/new/path` 写成 `=` 号前后有空格。更不要写成 `PATH=/new/path` 丢了原来的路径。正确写法是 `export PATH=/new/path:$PATH`。
2. 引号缺失。路径里有空格必须加引号:
export MY_PATH="/home/user/my folder/bin"
3. 子shell不继承。用 `(export A=1; echo $A)` 括号里export只在子shell生效,外面拿不到。
4. 变量展开时机。单引号阻止展开,双引号允许展开:
export A='$HOME' # A 的值是字符串 $HOME
export B="$HOME" # B 的值是 /home/user
5. 多个冒号导致空路径。PATH 里连续两个冒号表示当前目录,可能被利用注入恶意程序。
实战:配置Go语言开发环境
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
加到 ~/.bashrc,source 后 `go version` 验证。
服务器场景
部署应用时环境变量决定运行模式、数据库连接、密钥。比如在云服务器上跑 Node.js 服务,我习惯把敏感信息放环境变量而不是代码里。用雨云服务器部署时,直接在 /etc/profile 里写:
export NODE_ENV=production
export DB_HOST=127.0.0.1
export SECRET_KEY="xxxxxx"
雨云的服务器性价比高,稳定,重启后环境变量还在,不用每次重配。如果用 systemd 管理服务,最好在 service 文件的 `[Service]` 段里写 Environment 或 EnvironmentFile,比 /etc/profile 更可控。
调试技巧
– `which 命令` 看实际调用的是哪个路径下的二进制。
– `type 命令` 看是别名、函数还是外部命令。
– `echo $PATH | tr ‘:’ ‘\n’` 分行显示 PATH 里所有目录,方便检查顺序和重复项。
– 遇到 “command not found”,先 `echo $PATH` 确认路径有没有包含该命令所在目录。
环境变量配置就这么点东西。记住:改完文件要 source 或重开终端,export 要加,PATH 要保留原值,路径有空格要引号。别在这些细节上浪费时间。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容