下面给你一套系统性的 CentOS 环境(env)调试思路,从「最常见 → 进阶 → 内核/系统级」逐步排查,基本能覆盖 90% 的 env 问题。
常见类型包括:
PATH、JAVA_HOME、LD_LIBRARY_PATH 等)sudo 后环境变量丢失command not found你可以对照下面章节快速定位。
env
printenv
查看单个变量:
echo $PATH
echo $JAVA_HOME
declare -p PATH
如果是 export 的变量:
export -p
echo $0
ps -p $$
常见:
/bin/bash/bin/sh/sbin/nologin| 场景 | 加载文件 |
|---|---|
| 登录 shell | /etc/profile → ~/.bash_profile |
| 非登录 shell | ~/.bashrc |
| sudo | 默认重置环境 |
bash -l -c 'echo $PATH'
bash -c 'echo $PATH'
通用做法(推荐):
# 在 ~/.bashrc
export PATH=/opt/app/bin:$PATH
并在 ~/.bash_profile 中:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
/etc/profile
└── /etc/profile.d/*.sh
~/.bash_profile
└── ~/.bashrc
└── /etc/bashrc
~/.bashrc
└── /etc/bashrc
⚠️ systemd 不会加载 bashrc!
echo $PATH
sudo echo $PATH # 不一样
sudo 默认使用 安全路径
sudo -E command
sudo visudo
添加:
Defaults env_keep += "PATH JAVA_HOME"
或(不推荐但简单):
Defaults !secure_path
export JAVA_HOME=/usr/java
systemctl start app
[Service]
Environment="JAVA_HOME=/usr/java"
Environment="PATH=/usr/java/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
[Service]
EnvironmentFile=/etc/app/env
# /etc/app/env
JAVA_HOME=/usr/java
然后:
systemctl daemon-reexec
systemctl restart app
locale: Cannot set LC_CTYPE
locale
locale -a
sudo yum install -y langpacks-en
sudo localectl set-locale LANG=en_US.UTF-8
bash -x
bash --login -x
cat /proc/<pid>/environ | tr '\0' '\n'
ENV PATH=/opt/app/bin:$PATH
docker run -e JAVA_HOME=/usr/java image
echo $SHELL
echo $0
env | grep PATH
bash -l -c 'echo $PATH'
sudo env
systemctl show-environment
你可以直接贴出:
cat /etc/centos-release)我可以直接帮你定位是哪一行配置导致的问题。