可通过/proc/pid/environ读取运行中linux进程的环境变量:先用ps查pid,再cat /proc/pid/environ,最后用tr '\0' '\n'将null分隔符转为换行。

如果您需要检查某个正在运行的 Linux 进程所使用的环境变量,但该进程已启动且未保留原始 env 命令输出,则可通过系统 proc 文件系统直接读取其内存映射的环境数据。以下是获取该信息的具体操作方法:
一、通过 /proc/PID/environ 查看指定进程环境变量
Linux 内核为每个进程在 /proc 文件系统中维护一个 environ 文件,其中以 null 字节分隔存储了完整的环境变量键值对。该文件需以特殊方式解析才能正确显示。
1、使用 ps 命令查找目标进程 PID,例如:ps aux | grep nginx
2、执行 cat /proc/PID/environ 命令(将 PID 替换为实际进程号)
3、由于变量间以 \0 分隔,直接 cat 显示为连续字符串,需用 tr 命令转换:tr '\0' '\n' PID/environ
4、如需筛选特定变量,可追加 grep:tr '\0' '\n' PID/environ | grep PATH
二、使用 penv 工具快速查看进程环境
penv 是专用于读取进程 environ 的轻量命令行工具,自动处理 null 分隔符并支持格式化输出,避免手动解析错误。
1、确认系统是否已安装 penv:which penv
2、若未安装,在 Debian/Ubuntu 系统上执行 apt install psmisc
3、在 CentOS/RHEL 系统上执行 yum install psmisc 或 dnf install psmisc
4、运行 penv PID 即可清晰列出所有环境变量
三、使用 gdb 临时附加进程读取 env 地址空间
当 /proc/PID/environ 不可用(如进程以 noexec 方式启动或权限受限),可通过调试器访问进程内存中的 environ 指针位置,适用于高级诊断场景。
1、启动 gdb 并附加到目标进程:gdb -p PID
2、在 gdb 中执行命令:print (char**)environ
3、使用 x/s 逐个查看指针指向的字符串:x/s *(char**)ADDRESS
4、输入 detach 后 quit 退出 gdb,不中断进程运行
四、使用 cat /proc/PID/status 提取部分环境信息
/proc/PID/status 文件包含进程运行时元数据,其中 “EnvSize” 字段标明 environ 占用内存大小,可辅助判断环境变量总量是否异常膨胀。
1、执行 cat /proc/PID/status | grep EnvSize
2、对比同类进程的 EnvSize 值,若显著偏高,提示可能存在大量冗余变量注入
3、该方法不显示具体变量内容,仅作容量参考
五、通过 systemd 启动的服务查看默认环境配置
对于由 systemd 管理的服务进程,其环境变量通常由服务单元文件定义,而非继承自父 shell,需检查对应 .service 文件中的 Environment 和 EnvironmentFile 指令。
1、查询服务单元路径:systemctl show --property=FragmentPath SERVICE_NAME.service
2、使用 systemctl show 命令直接展开环境变量:systemctl show --property=Environment SERVICE_NAME.service
3、若存在 EnvironmentFile=,则需 cat 对应文件路径查看外部加载的变量定义










