내 리눅스 시스템에서 모든 사람을 위해 환경 변수를 설정하는 방법은 무엇입니까?


132

모든 사용자에게 보편적 인 특정 설정을 사용할 수 있습니까?


2
수출입니까? 그것을 추가하면 글로벌입니까?
TIMEX

터미널에서 새 세션을 열면 사라질 것입니다
Haryono Sariputra

답변:


104

/etc/profile다른 리눅스 시스템 과 마찬가지로 , 일부 Linux 시스템은 이제 디렉토리를 사용합니다 /etc/profile.d/. 에있는 모든 .sh파일은에서 제공합니다 /etc/profile. 그냥 편집하는 것보다 이러한 파일에 사용자 정의 환경을 유지하는 것이 약간 더 깔끔합니다 /etc/profile.


4
일부 사용자가 zsh와 같은 다른 쉘을 사용하면 어떻게됩니까?
Matthieu Napoli

70
이것은 전 세계가 아닙니다 ... 그것은 껍질로 제한됩니다 .. 너무 나쁘다 그것은 가장 받아 들여지는 대답입니다
mmm

1
zsh는 /etc/profile.d/에 .sh 파일을 제공합니다. / etc / zshrc에서 볼 수 있습니다. @Matthieu Napoli
Bily

4
루트 사용자에게는 스크립트가 사용되지 않습니다.
Val


38

남자 8 pam_env

남자 5 pam_env.conf

모든 로그인 서비스가 PAM을 사용 하고 모든 로그인 서비스가 session required pam_env.so해당 /etc/pam.d/*구성 파일에있는 경우 모든 로그인 세션에는 pam_env의 구성 파일에 지정된 일부 환경 변수가 설정됩니다 .

대부분의 최신 Linux 배포판에는 기본적으로 모든 것이 있습니다. 원하는 전역 환경 변수를에 추가하십시오 /etc/security/pam_env.conf.

이것은 사용자의 쉘에 관계없이 작동하며 그래픽 로그인에서도 작동합니다 (xdm / kdm / gdm / entrance /…가 이와 같이 설정된 경우).


1
+1 또한 즉시 pam_env.conf에 변수를 추가 한 후 재부팅해야합니다. $ echo $ variablename이 표시되지 않습니다

9
다시 부팅 할 필요가 없으며 다시 로그인해야합니다. (나에게 중요한 재부팅 서버는 없음)
Lyndon White

이것은 나의 배포판, 민트 17.2에 적용되지 않는 것 같습니다. 사전 설치된 파일은 완전히 주석 처리되어 있으며, 비슷한 것을 추가 echo foo>/home/me/bar하고 재부팅 한 후 다시 로그인하면 해당 파일이 생성되지 않습니다. (아마도 이것을 테스트하는 더 우아한 방법이있을 수 있지만, 여기에 주석을 달기 전에 확신을 갖고 싶었습니다.)
Michael Scheper

16

놀랍게도 Unix와 Linux는 실제로 전역 환경 변수를 설정할 수있는 곳이 없습니다. 가장 좋은 방법은 특정 셸이 사이트 별 초기화를 갖도록 정렬하는 것입니다.

에 넣으면 /etc/profile대부분의 posix 호환 쉘 사용자가 처리합니다. 이것은 중요하지 않은 목적으로 "충분히 충분"할 것입니다.

그러나 csh또는 tcsh셸을 가진 사람 은 그것을 볼 수 없으며 csh전역 초기화 파일이 있다고 생각하지 않습니다 .


8
/etc/environment실제로 루트 사용자로도 환경 변수를 설정하는 것 같습니다. 나는 그것이 /etc/environment아마존 리눅스와 우분투에 있다는 것을 알고있다 . csh, tcsh 또는 zsh에서 작동하는지 확인하지 못했습니다.
Jordan Stewart

그것은 진정한 글로벌, 당신이 사용하는 쉘 특정하지 않습니다
Xerus

9

bash 맨 페이지에서 몇 가지 흥미로운 발췌 내용 :

bash가 대화식 로그인 쉘 또는 --login옵션이 있는 비 대화식 쉘로 호출되면 /etc/profile파일이 존재하는 경우 먼저 파일에서 명령을 읽고 실행 합니다. 해당 파일을 읽은 후, 그것은을 찾습니다 ~/.bash_profile, ~/.bash_login그리고 ~/.profile, 순서대로, 그리고 읽고 존재하고 읽을 수있는 첫 번째에서 실행하는 명령을. --noprofile쉘이 동작을 억제하기 시작할 때 옵션을 사용할 수있다.
...
로그인 쉘이 아닌 대화식 쉘이 시작될 때 bash는 파일이 존재하는 경우 /etc/bash.bashrc~/.bashrc에서 명령을 읽고 실행 합니다. 이 --norc옵션 을 사용하여 금지 할 수 있습니다 . 그만큼--rcfile파일 옵션을 읽고 대신 파일에서 명령을 실행하는 떠들썩한 파티를 강제 /etc/bash.bashrc하고 ~/.bashrc.

그래서 한 번 봐 가지고 /etc/profile또는 /etc/bash.bashrc이러한 파일은 전역 설정에 적합한 장소입니다. 환경 변수를 설정하려면 다음과 같은 것을 넣으십시오.

export MY_VAR=xxx

클래식 유닉스 시스템에서 Bourne 쉘과 Korn 쉘은 모두 / etc / profile을 읽습니다. 아마도 시스템 환경 설정에 가장 널리 사용되는 위치 일 것입니다. C 쉘의 일부 버전은 사용자 별 위치뿐만 아니라 /etc/csh.cshrc 및 /etc/csh.login을 찾습니다. 다른 시스템 환경 설정 파일을 사용하지 마십시오.
Jonathan Leffler

놀랍지 만, 내가 로그인하지 않은 쉘 사용자를 위해 env를 설정하는 한 찾고 있습니다.
David Mann

죄송합니다. 잠시 동안 화살표가 표시되지 않을 때 실수로 다운 보증 한 것 같습니다 ... 다운 보트를 제거 할 수 있도록이 줄을 수정 하시겠습니까 (예 : 두 번째 줄부터 마지막 ​​줄에 오타 "environEment")?
Benjamin W.

4

PAM 사용은 탁월합니다.

# modify the display PAM
$ cat /etc/security/pam_env.conf 
# BEFORE: $ export DISPLAY=:0.0 && python /var/tmp/myproject/click.py &
# AFTER : $ python $abc/click.py &
DISPLAY  DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
abc   DEFAULT=/var/tmp/myproject

2

Linux 커널에서 실행되는 모든 프로세스는 상위에서 상속 된 고유 한 고유 환경을받습니다. 이 경우 상위는 쉘 자체 (하위 쉘 생성) 또는 '로그인'프로그램 (일반 시스템)입니다.

각 프로세스의 환경이 보호되므로 실행중인 모든 프로세스에 환경 변수를 '주입'할 수있는 방법이 없으므로 기본 쉘 .rc / 프로파일을 수정하더라도 각 프로세스가 종료되고 다시로드 될 때까지 적용되지 않습니다. 시작 설정.

/ etc /에서 특정 쉘의 기본 시작 변수를 수정하십시오. 사용자는 개별 설정에서 사용자를 변경할 수 있고 자주 변경할 수 있습니다.

유닉스는 한도 내에서 사용자에게 순종하도록 설계되었습니다.

NB : Bash는 시스템 의 유일한 쉘 이 아닙니다 . / bin / sh 심볼릭 링크가 실제로 가리키는 것에주의를 기울이십시오. 많은 시스템에서 이것은 실제로 대시 일 수 있습니다 (기본적으로 특별한 호출없이) POSIXLY 정확합니다. 따라서 기본값을 모두 수정해야합니다 . 그렇지 않으면 / bin / sh로 시작하는 스크립트가 전역 기본값을 상속하지 않습니다. 마찬가지로, bash 만하는 구문을 피하십시오. 편집 할 때 이해avoiding bashisms .

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