환경 변수를 영구적으로 설정하는 방법

환경 변수를 영구적으로 설정하는 방법

내 변수는

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
ORACLE_HOME=/usr/lib/oracle/11.2/client64

이러한 변수를 어떻게 영구적으로 저장할 수 있습니까?

답변1

.profile이 파일 이나 로그인 셸 구성 파일(홈 디렉터리에 있음) 에 이를 추가할 수 있습니다 .

환경 변수를 "영구적으로" 변경하려면 최소한 다음 사항을 고려해야 합니다.

  1. 로그인/비로그인 쉘
  2. 대화형/비대화형 쉘

세게 때리다

  1. 로그인 쉘인 Bash는 /etc/profile, ~/.bash_profile, ~/.bash_login, 순서대로 로드됩니다.~/.profile
  2. Bash는 비로그인 대화형 셸로 로드됩니다.~/.bashrc
  3. 비로그인 비대화형 쉘인 Bash는 환경 변수에 지정된 구성을 로드합니다.$BASH_ENV
$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

다루기 힘든

$EDITOR ~/.zprofile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

물고기

set -Ux LD_LIBRARY_PATH /usr/lib/oracle/11.2/client64/lib
set -Ux ORACLE_HOME /usr/lib/oracle/11.2/client64

변화 많은

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib     
     ORACLE_HOME=/usr/lib/oracle/11.2/client64
     export LD_LIBRARY_PATH ORACLE_HOME

csh 또는 tcsh

$EDITOR ~/.login
#add lines at the bottom of the file:  
     setenv LD_LIBRARY_PATH /usr/lib/oracle/11.2/client64/lib
     setenv ORACLE_HOME /usr/lib/oracle/11.2/client64

모든 사용자에게 영구적으로 적용하려면 해당 파일을 편집하면 됩니다 /etc/(예: /etc/profileBourne과 같은 쉘의 경우, /etc/csh.login(t)csh 및 zsh /etc/zsh/zprofile의 경우 /etc/zsh/zshrc).

/etc/environment또 다른 옵션은 Linux 시스템의 PAM 모듈에서 읽고 pam_env간단한 할당만 지원하고 셸 스타일 확장은 지원하지 않는 를 사용하는 것입니다 . (바라보다데비안 가이드이 점에 대해서. )

이러한 파일에는 이미 일부 할당이 포함되어 있을 수 있으므로 파일에 표시되는 구문을 따르세요.

변경 사항을 적용하려면 셸을 다시 시작하고 사용자로 다시 로그인하세요.

시스템 전체 환경 변수를 추가해야 하는 경우 이제 /etc/profile.d변수를 초기화하는 sh 스크립트가 포함된 폴더가 있습니다.
내보낸 모든 변수가 포함된 sh 스크립트를 여기에 배치할 수 있습니다.
그러나 이는 데비안에서 env에 변수를 추가하는 표준 방법으로 사용되어서는 안 됩니다.

답변2

/etc/environment모든 사용자/셸에서 if 작업을 수행하려면 배포 에 따라 또는 를 사용할 수 있습니다 /etc/profile. /etc/profile.d패키징 시스템에서 수행한 업데이트와 충돌할 가능성이 적으므로 새 파일이 있는 경우 새로 만드는 것이 더 나을 수 있습니다.

에서 변수는 일반적 으로 다음과 같이 /etc/environment설정하는 데 사용됩니다 .name=value

ORACLE_HOME=/usr/lib/oracle/11.2/client64

에서는 다음과 같은 스크립트를 /etc/profile사용해야 합니다 .export

export ORACLE_HOME=/usr/lib/oracle/11.2/client64

아래의 파일에 대해서도 마찬가지입니다 /etc/profile.d. 파일이 작동하려면 충족해야 하는 이름 지정 제한이 있을 수도 있습니다. Debian에서는 파일에 확장자가 있어야 합니다 .sh(단, 소스이므로 뱅 라인이나 실행 권한이 필요하지 않음). 배포 문서를 확인하거나 /etc/profile스크립트를 보고 이러한 파일을 로드하는 방법을 알아보세요.

또한 LD_LIBRARY_PATH영구 설정이 될 수도 있지만문제가 있는, 보안 위험을 포함합니다. 대안으로, LD_LIBRARY_PATH실행하기 전에 필요한 모든 프로그램의 명령줄 시작 부분에 추가하는 방법을 찾는 것이 좋습니다 . 예를 들어:

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib myprog

한 가지 방법은 래퍼 스크립트를 사용하여 프로그램을 실행하는 것입니다. 프로그램과 동일한 이름을 지정하고 /usr/local/bin나타나는 위치에 놓을 수 있습니다.앞으로프로그램의 위치는 입니다 . 다음은 샘플 스크립트입니다( 스크립트를 PATH잊지 마세요 ).chmod +x

#!/bin/sh
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib /real/location/of/myprog "$@"

답변3

사용 중인 UNIX 유형을 지정하지 않았습니다. FreeBSD(및 Net 및 Open BSD)에서는 에서 자세한 내용을 사용할 수 있습니다 /etc/login.conf.매뉴얼 페이지하지만 다음과 같은 것을 추가할 수 있습니다.

:setenv=ORACLE_HOME=/usr/lib/oracle/11.2/client64:

기본 클래스로 쉘 여부에 상관없이 모든 사용자에게 설정됩니다.

PAM을 사용하는 경우 유사한 작업을 수행할 수 있는 PAM 모듈도 있습니다. 예를 들어pam_env에서 읽습니다 /etc/environment.

답변4

"이 변수를 영구적으로 저장하는 방법은 무엇입니까?"

모든 대답은 "재부팅 후"라는 의미에서 영구적이라는 의미로 가정하는 것 같습니다.
저는 프로덕션 애플리케이션이 동일한 프로세스에서 ENV 세트로 실행될 수 있도록 bash 세션에 대해 ENV를 보존하는 방법을 우연히 발견했습니다.

같은 생각을 가진 사람들이 참고할 수 있도록 이 답변을 여기에 남겨 두겠습니다.
해결책은 다음과 같은 스크립트에 넣는 것입니다.

설정-envs.sh:

#!/bin/sh
export ENV1="some value"
export ENV1="some value"

chmod +x set-envs.sh한 번 실행 가능하게 만들고
애플리케이션 source(또는 약어 .) 이전에 실행합니다.

. ./set-envs.sh
./run-the-app.sh  # or such

관련 정보