Ubuntu - 루트 사용자는 $PATH로 확장된 $JAVA_HOME 변수를 볼 수 없습니다.

Ubuntu - 루트 사용자는 $PATH로 확장된 $JAVA_HOME 변수를 볼 수 없습니다.

$JAVA_HOME"/etc/environment"에 변수를 만들었습니다.

JAVA_HOME="/usr/lib/jvm/jdk"
PATH="...bla bla bla:$JAVA_HOME/bin"

또한 모든 사용자가 Java에 친숙해질 수 있도록 /etc/profile편집 했습니다 . source /etc/environment그리고 디렉터리 자체는 액세스를 위해 755로 설정됩니다.

인쇄물은 root다음과 같습니다 env.

LANG=C.UTF-8    
SUDO_GID=1000
USERNAME=root
JAVA_HOME=/usr/lib/jvm/jdk
SUDO_COMMAND=/bin/su
USER=root
PWD=/home/ssuser
HOME=/root
SUDO_USER=ssuser
SUDO_UID=1000
MAIL=/var/mail/root
TERM=xterm
SHELL=/bin/bash
SHLVL=2
LOGNAME=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$JAVA_HOME/bin

ssuser그러나 -ing 없이 동일한 작업을 수행하면 sudo환경 변수가 $JAVA_HOME실제 경로로 확장됩니다.

SSH_CONNECTION=193.128.134.115 18497 10.1.4.4 22
LESSCLOSE=/usr/bin/lesspipe %s %s
LANG=C.UTF-8
JAVA_HOME=/usr/lib/jvm/jdk
XDG_SESSION_ID=2
USER=ssuser
PWD=/home/ssuser
HOME=/home/ssuser
SSH_CLIENT=193.128.134.115 18497 22
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
SSH_TTY=/dev/pts/0
MAIL=/var/mail/ssuser
TERM=xterm
SHELL=/bin/bash
SHLVL=1
LOGNAME=ssuser
XDG_RUNTIME_DIR=/run/user/1000
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/jdk/bin
LESSOPEN=| /usr/bin/lesspipe %s

/etc/sudoers이는 env_var 재설정/보존 설정의 설정과 관련이 없습니다. 이미 다른 컴퓨터에서 시도해 봤는데 잘 작동했거든요.

왜 이런 일이 일어나는지 조금 혼란 스럽습니다. 또한 제가 발견한 매우 이상한 점은 단일 세션 동안 sudo 사용자에게 비밀번호를 묻는 메시지가 표시되지 않는다는 것입니다. 확인해 보니 /etc/sudoers비밀번호를 묻도록 올바르게 설정되어 있습니다 root.

세션을 닫았다가 다시 열어 보았습니다. 루트가 아닌 일반 사용자로 처리할 수 있습니다. 또한 다시 시작해도 아무런 변화가 없습니다.

답변1

제가 아는 한, 쉘 스크립트가 아니기 /etc/environment때문에 소스 코드를 넣을 필요는 없습니다 ./etc/profile

쌍만 포함해야 합니다 key=value(포함되지 않음 "). Plus는 여기와 같은 변수를 대체 /etc/environment하지 않습니다 $JAVA_HOME.

/etc/environment시작 시 로드되므로 재부팅해야 하며 모든 사용자가 사용할 수 있습니다.

이것인용하다다음과 같은 경우에는 변수 확장이 작동하지 않는다는 설명이 구체적으로 나와 있습니다 /etc/environment.

참고: 변수 확장은 /etc/environment에 영향을 주지 않습니다.

관련 정보