을 사용하려고합니다 /etc/environment
.
내 변수가 지워졌습니다 PATH
. 그 이후에는 명령이 인식되지 않았습니다.
쉘에서 동일한 명령을 실행하면 문제가 없는데 왜 이런 일이 발생합니까? !
내 콘텐츠 /etc/environment
:
ORACLE_HOME=/usr/lib/oracle/12.1/client64
PATH=$ORACLE_HOME/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib
답변1
/etc/environment
구성 파일입니다pam_env
, 쉘에서 읽은 파일이 아닙니다. 구문은 다소 유사하지만 다릅니다. 특히, 기존 변수를 참조할 수 없습니다. $ORACLE_HOME/bin
및 를 포함하도록 검색 경로를 설정했습니다 $PATH
. 즉, 이름에 달러 기호가 있는 디렉터리입니다.
모든 사용자에 대해 변수를 설정하려면 를 편집하면 됩니다. /etc/security/pam_env.conf
이 구문은 더 다양하고 풍부한 구문을 가지고 있지만 여전히 셸에서 수행할 수 있는 것만큼 풍부하지는 않습니다.
ORACLE_HOME DEFAULT=/usr/lib/oracle/12.1/client64
PATH OVERRIDE=/usr/local/bin:/usr/bin:/bin:${ORACLE_HOME}/bin
LD_LIBRARY_PATH DEFAULT=$ORACLE_HOME/lib
다른 변수는 참조할 수 있지만 변수의 이전 값은 참조할 수 없습니다.
보다 유연한 접근 방식을 원한다면 변수 정의를 추가하세요 /etc/profile
. 여기에서 모든 쉘 구성을 사용할 수 있습니다. 단점은 cron 등을 통하지 않고 로그인 세션에서만 읽을 수 있다는 것입니다. . /etc/profile;
그러나 cron 작업 시작 시 추가하면 쉽게 이점을 얻을 수 있습니다.
export ORACLE_HOME=/usr/lib/oracle/12.1/client64
PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
답변2
할당은 다음 /etc/environment
과 같아야합니다출구. 그렇지 않으면 해당 값이 사용되지 않습니다. "."을 사용하여 파일을 가져오는 경우 다음 구문을 사용합니다.
export ORACLE_HOME=/usr/lib/oracle/12.1/client64
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
그러나 명시된 바와 같이 /etc/environment
소스를 얻으려는 의도는 없습니다(예:모든 사용자에 대해 환경 변수 값을 지속적으로 설정합니다.).
~에 따르면6.6. pam_env - 환경 변수 설정/해제(Linux-PAM 시스템 관리자 가이드):
PAM
pam_env
모듈을 사용하면 환경 변수를 설정(설정 해제)할 수 있습니다. 이전에 설정된 환경 변수와 PAM_ITEM 사용을 지원합니다PAM_RHOST
.
/etc/security/pam_env.conf
기본적으로 다른 파일이 지정되지 않은 경우 변수 설정(취소) 규칙은 구성 파일에서 가져옵니다.이 모듈은 간단한 방법을 사용하여 파일을 구문 분석할 수도 있습니다.키=값다른 회선에서 쌍을 이룹니다(
/etc/environment
기본값). envfile 플래그를 사용하여 구문 분석할 기본 파일을 변경하고readenv
플래그를 각각 1 또는 0으로 설정하여 이를 켜거나 끌 수 있습니다.PAM 환경 변수 설정은 다른 모듈에 부작용을 일으킬 수 있으므로 이 모듈은 스택의 마지막 모듈이어야 합니다.
즉, PAM(사용자 인증)은 파일을 읽고 사용자가 설정한 값을 이해하지 못하는 경우 변수를 다음으로 설정합니다.아무것도 없다.
반대로 수정하면 /etc/profile
더 나은 결과를 얻을 수 있습니다. 하지만 파일 상단의 설명을 읽어보세요.
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
/etc/profile.d/custom.sh
설정을 사용하여 파일을 생성하면 더 나은 결과를 얻을 수 있습니다.
그러나 이 설정에 문제가 발생할 수 있습니다 LD_LIBRARY_PATH
. 대신, 디렉토리를 구성에 /etc/ld.so.conf.d
파일로 추가해야 합니다(예: /etc/ld.so.conf.d/oracle
포함 경로).
/usr/lib/oracle/12.1/client64/lib
추가 자료: