Linux에서 시스템 전체 환경 변수를 설정하는 가장 좋은 장소는 무엇입니까?


26

루트 사용자를 포함한 모든 사용자에JAVA_HOME 대해 시스템 전체 환경 변수를 설정하고 싶습니다 .

요구 사항 :

  • 일반 사용자가 접근 가능
  • 루트에 접근 가능
  • bash뿐만 아니라 항상로드 됨 (gnome-terminal은 기본적으로 bash를 시작하지 않습니다)
  • 우분투, 데비안 및 선택적으로 Red Hat 작업
  • 추가를 쉽게 스크립팅 할 수 있다면 좋습니다

대화식 쉘의 경우 우분투 스레드를 확인하십시오 .
quickshiftin

답변:


26

아무도 여기에 완전한 대답을 추가하지 않았으므로 적어도 우분투의 경우 가장 좋은 것으로 생각되지만 다른 * nix 플랫폼에 대한 대답을 조정할 수 있습니다.

# **create**: /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/default-java

이미 고려되었지만 배제한 다른 ​​옵션들 :

  • /etc/environment 작동하지만 다른 도구 나 사람들이 편집 할 수 있으므로 유지 관리가 어렵습니다.
  • /etc/profile - 같은 상기와

11

데비안 / 우분투에서는 / etc / environment가됩니다.

나는 Red Hat과 동등한 것을 모른다.


1
나는 / etc / environment가 더 이상 사용되지
Pat James

@PatJames 이에 대한 자세한 정보가 있습니까? 나는 기계를 재부팅 한 후에도 / etc / environment is root에 대해로드되지 않았습니다.
sorin

@SorinSbarnea 일부 정보는 다음과 같습니다. wiki.debian.org/Locale 은 / etc / environment가 더 이상 새로운 릴리스에서 사용되지 않음을 나타냅니다
Pat James

1
이 페이지에는 로케일 관련 변수 만해서는 안된다고 말합니다 /etc/environment. 참조 serverfault.com/a/584072/26218
흐름

11

왜 / etc / profile을 배제했는지 이해할 수 없습니다. 그것이 올바른 위치입니다.


9

/etc/environment더 이상 데비안에서 더 이상 사용되지 않거나 사용되지 않는다고 대답 한 사람 이 있으며 (버전 7에서와 같이) 거짓입니다.

파일은 실제로 PAM에서 읽습니다 . pam_env(8)특히 envfile플래그에 대한 기본값을 통해 입니다. 맨 페이지는 또한 파일 섹션에이 기본값을 표시합니다.

인용 된 위키 (특히 로케일)는 로케일 기반 환경 변수가 이제로되어 있음을 나타 /etc/profile냅니다. "(이전 버전의 데비안에서도 / etc / environment)"라는 문구는 모호하며 로케일과 관련이 있습니다.

간단한 grep through /etc/pam.dshows :

root@box:/etc/pam.d# grep pam_env.so *
atd:auth        required        pam_env.so
cron:session       required   pam_env.so
cron:session       required   pam_env.so envfile=/etc/default/locale
login:session       required   pam_env.so readenv=1
login:session       required   pam_env.so readenv=1 envfile=/etc/default/locale
sshd:auth       required     pam_env.so # [1]
sshd:auth       required     pam_env.so envfile=/etc/default/locale
su:session       required   pam_env.so readenv=1
su:session       required   pam_env.so readenv=1 envfile=/etc/default/locale

이러한 구성 줄은 부가 적이며 첫 번째 구성 요소가 envfile없기 때문에 기본값은 /etc/environment입니다.

물론이 모든 것은 crondPAM에 대해 컴파일 된 바이너리 ( 로그인 쉘 등) 에 의존합니다 .

마지막으로 PAM (예 : RedHat)을 사용하는 다른 시스템은 해당 맨 페이지에서 볼 수 있듯이 동일하게 작동합니다.


2

참고 사항 : 모듈 환경을 살펴보십시오 . 수십 또는 수백 명의 사용자에게 복잡한 버전의 자체 확장 가능하고 간결한 UNIX 환경을 제공해야 할 때마다이 기능을 사용합니다. 주로 대규모 다중 사용자 HPC 환경에서 사용됩니다. 하나의 특정 변수에 사용하는 것만으로도 과도하게 엔지니어링되지만 소프트웨어 패키지와 환경이 몇 개 이상 필요하면 멋진 일을합니다.


1

/etc/profile작동해야합니다. 나는 확실하게 지금 테스트를 넣어 export SOMETEST=1234/etc/profile다시 로깅이 후 echo $SOMETEST내게 준 1234예상대로. 또한gnome-terminal



0

이 경우 ~ 특정 파일을 사용할 수 없습니다. 그래서....

/etc/profile이 경우 적절한 장소가 될 것입니다. 현재 로그인 한 사용자는 새 로그인 세션을 가져와야하지만 큰 문제는 아닙니다.

@ wk01 : /etc/profile기본적으로 비 로그인 셸에서로드되지 않습니다. 당신은 .bashrc 아마 그것을로드 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.