环境变量入门:先把 PATH 讲清楚,再谈配置隔离
写给刚接触 Linux / 服务器的新手:环境变量不是玄学,它就是一组「名字 → 值」的配置表,程序启动时读它来决定自己怎么跑。
一、环境变量到底是什么
打开终端,输入 echo $HOME,会看到类似 /home/用户名 的输出。HOME 就是一个环境变量:名字是 HOME,值是你的家目录路径。
系统和程序启动时,会先读一遍这张表:
HOME:当前用户的家目录;USER:当前登录的用户名;LANG:语言与字符集,比如zh_CN.UTF-8;PATH:系统去哪些目录找可执行程序。
程序不用把配置写死在代码里,改环境变量就能换行为——这就是它存在的意义。
二、PATH:命令为什么能直接敲
你在终端敲 python3,系统其实并不知道 python3 在哪。它会按 PATH 里列出的目录,一个一个去找:
echo $PATH
# /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
冒号分隔的每一项都是一个目录。找到第一个同名可执行文件就运行,找不到就报 command not found。
两个常见坑:
- 自己装的程序敲了没反应:它装在
PATH之外的目录,比如~/tools/bin。办法是把目录加进PATH,而不是把文件到处复制。 - 同名程序有两个版本:
PATH里排在前面的目录优先。想确认到底跑的是哪一个,用which python3看完整路径。
三、临时设置与永久设置
只在当前终端生效,关掉就没:
export MY_APP_DEBUG=1
想让它每次登录都有,写进 shell 的启动文件(Bash 用 ~/.bashrc,Zsh 用 ~/.zshrc),末尾加一行:
export PATH="$HOME/tools/bin:$PATH"
改完记得 source ~/.bashrc 让当前终端立即生效,或者重开一个终端。
注意顺序:$HOME/tools/bin 写在 $PATH 前面,自己的工具优先;写在后面,系统自带的优先。新手建议放前面,出了问题也容易定位。
四、配置隔离:开发机与服务器用同一份代码
同一个程序,在开发机和服务器上跑,数据库地址、密钥、开关肯定不一样。把这些写进代码里,每换一台机器就得改代码——又脏又危险。
正确做法是代码只读环境变量:
import os
db_host = os.environ.get("DB_HOST", "127.0.0.1")
debug = os.environ.get("DEBUG", "0") == "1"
开发机上设一套值,服务器上设另一套值,代码一份不用动。密钥、令牌这类敏感信息也一样:只放环境变量,不写进代码、不提交到仓库。
五、排错三板斧
环境变量出问题时,别猜,按这三步查:
env | grep 名字:确认变量到底有没有、值对不对;echo $PATH:确认目录在不在、顺序对不对;- 刚改完启动文件没生效?先
source一下,再看是不是改错了文件(Bash 和 Zsh 的启动文件不是同一个)。
小结
环境变量就是程序启动时读的一张配置表:PATH 决定命令去哪找,export 决定值在哪生效,读变量而不是写死配置,决定了同一份代码能不能在多台机器上跑。先把这三件事弄清,后面学 Docker、学部署,处处都会再遇到它。
- 点赞
- 收藏
- 关注作者
评论(0)