程序在服务器上读不到配置,第一件事就是查环境变量。linux查看环境变量的命令就那么几条,各管一摊,分清用途排查很快。

四条常用命令

  • echo $PATH:加美元符号看单个变量,最快。
  • env:列出当前所有环境变量。
  • printenv HOME:后面跟变量名,只看一个。
  • export -p:输出会传给子进程的导出变量。

set输出最全,连shell自己的局部变量也列出来,但结果很长,一般配合grep过滤:env | grep JAVA,一步筛出和Java相关的。

看某个进程实际拿到的值

要确认某个正在跑的进程到底读到了什么,去proc目录看:

strings /proc/1234/environ

把1234换成实际pid,ps配合grep能查到。变量之间是空字节分隔的,用strings打出来正好一行一个,比肉眼从一坨乱码里挑省事得多。

临时设置和永久生效

export TEST=1只在当前终端会话有效,关了窗口就没了,适合临时验证。要长期生效就写配置文件:个人变量放用户主目录下的.bashrc或.zshrc,对所有用户生效的放/etc/profile,改完source一下文件立即生效,不用重新登录。改这类文件前先备份,写错一行可能影响正常登录。

服务进程不读shell配置

systemd托管的服务不加载.bashrc,它的变量写在unit文件的Environment行里,改完要systemctl daemon-reload再重启服务才生效。排查这类服务时直接翻unit文件,别在shell里白折腾半天。

排查顺序建议:先echo看单个变量,再env看全量,最后去/proc里看进程实际拿到的值,三层下来基本能定位变量是在哪一步丢的。