모든 사람을위한 글로벌 환경 변수 설정


17

에 변수를 설정하면에있는 /etc/environment동안에 만 관리자에게 적용되는 것 같습니다 sudo su.

변수를 모든 사람에게 적용하려면 어떻게해야합니까? 특히 그들이 터미널에있을 때? 설정 /etc/enviroment이 bash에 적용되지 않습니까?

답변:


13

/etc/environment업데이트는 다음 세션에서 작동, 자동으로 다시로드 아니에요.

이는 다른 사용자를 위해 이미 시작된 세션에 대해서는 변경할 수 없음을 의미합니다.

안에있는 것을 "재로드" /etc/environment하려면 다음 명령이 필요합니다.

source /etc/environment

그러나 다시는 자신의 현재 세션에서만 작동하며 다른 사용자는 새 세션을 시작하거나 자신의 세션에서 위의 명령을 실행할 때까지 영향을받지 않습니다.


4

TL; DR

글로벌 ( /etc/environment, /etc/profile) 또는 사용자 별 ( ~/.profile, ~/.bashrc) 여부에 관계없이 이러한 구성 파일 은 다음 로그인 / 세션에서만 처리됩니다.

글로벌 파일은 모든 사용자 (그냥 루트)에 적용 ...하지만 당신은 환경에 반영 변경 사항을 확인하려면 로그인 세션을 다시 시작해야합니다. 이것은 su관찰 한대로 호출 하거나 로그 아웃 / 로그인 또는 재부팅하여 발생할 수 있습니다 . 당신은 할 수 su루트가 아닌 사용자에게 당신은 또한 환경 변화를 볼 것입니다.

전역 환경을 선택하기 위해 다시 부팅하거나 다시 로그인 해야하는 이유는 환경이 상위 프로세스에서 상속되고 다른 모든 프로세스의 루트 프로세스가 로그인 쉘이기 때문에 로그인 쉘이 없기 때문입니다. 환경 ... 그런 다음 로그인 셸 내에서 프로세스가 시작되지 않습니다. 물론 개별 프로세스를 시작할 때 환경을 설정 / 업데이트 할 수 있지만 로그인 쉘에 대한 환경을 설정하고 변경 사항을 보려면 모든 하위 프로세스를 다시 시작해야합니다.

지구 환경

다른 언급 한 사람, 당신은에 대한 변경을위한 재부팅 또는 로그 아웃 / 로그인이 필요합니다 /etc/profile, /etc/profile.d/*.sh그리고 /etc/environment뽑힐 수 있습니다.

이러한 파일은 전역 환경을 지정하지만 로그인시 한 번만 실행되므로 기존 로그인 / 세션에 해당 파일의 변경 사항이 반영되지 않기 때문입니다. 재부트는 모든 사람의 로그인을 "재설정"하여 새 환경을 선택하도록합니다.

자체 로그인 세션 source /etc/profile에서 재부팅이나 로그 아웃 / 로그인없이 변경 사항을 적용 할 수 있지만, 이는 자신의 세션과 세션 내에서 실행중인 새 프로세스에만 영향을 미칩니다.

에서 어떤 변수 보간이없는 것 또한 /etc/environment(이 스크립트 아니다) 당신이 좋아하는 물건을 할 수 PATH="$PATH:/my/custom/path"있다.

참고 또한 그 /etc/profile/etc/profile.d/*.sh(당신이 데몬 프로세스에 대한 당신의 로그인 쉘 외부 실행 환경 변수를 설정하려는 경우 예) 만 로그인 세션에 대한 실행 환경이 구성되도록 시스템이 아닌 로그인 계정을 사용할 수 없을 것입니다.

bashrc 전체의 로그인 쉘하지만 bash는 쉘과 하위 프로세스에 대한 환경을 설정하는 데 유용하지 않습니다 ... 그래서 위해 당신은 아마 당신의 환경 설정을 넣을 진정한 "글로벌"또는 "사용자 글로벌" /etc/profile또는 /etc/profile.d/my-custom-env.sh~/.profile. 다른 셸 (예 : zsh)에는 자체 구성 파일이 있으므로 bashrc의 비 bash 특정 환경 구성은 셸을 전환 할 때 (또는 다른 셸을 사용하는 시스템의 다른 사용자가있는 경우) 혼란을 유발합니다.

새 프로그램을 설치하는 것이 일반적인 문제이며 제대로 실행 되려면 환경을 지정해야합니다. 글로벌 환경이 하나의 해답이지만 서버 및 자동 프로비저닝 / 구성 사용 사례에 적합하지 않은 재부팅이 필요한 경우가 종종 있습니다. 이것이 실제로 시스템의 모든 사용자와 프로그램에 필요한 변수인지 아니면 특정 사용자 나 프로그램에 제공해야하는 변수인지 스스로에게 자문해야합니다.

특정 사용자

~/.profile ~/.bashrc대화식, 로그인 쉘, bash 전용 등에 원하는지 여부에 따라 사용자의 홈 디렉토리에 프로파일 또는 bashrc에 환경을 포함시키는 것을보십시오 (예 :) .

또한 사용자 로그인 세션 내의 모든 프로세스에서 환경 변경 사항을 사용할 수 있으려면 재부팅 또는 로그 아웃 / 로그인이 필요합니다. 사용자는 source ~/.profile... 단말기 내에서 수행되며 해당 터미널 세션 및 하위 프로세스 내의 환경 만 업데이트 할 수 있습니다. 반드시 사용자의 전체 로그인 환경에 대한 것은 아닙니다.

특정 프로그램에는 몇 가지 옵션이 있습니다.

하나는 명령을 실행할 때 환경을 제공하는 것입니다.

VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE" /path/to/program --opt1 --op2

당신은 또한 아래 단위 / 서비스 파일의 환경을 지정 할 수 있습니다 systemd 사용하는 경우 [Service]Environment=VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE

이 옵션은 프로그램을 실행할 때마다 환경을 지정해야하기 때문에 복잡하게 느껴질 수 있습니다. 그러나 해당 프로그램에서만 환경이 필요한 경우 ...이 방법이 가장 좋은 방법이므로 익숙해 져야하고 모든 것을 버리지 않아야합니다. bashrc 또는 프로파일 파일로.

systemd 또는 init을 사용하여 환경을 설정하고 프로그램을 실행하지 않는 경우 물론 환경 실행을 포함하여 전체 명령을 저장하는 편의를 위해 bash 스크립트로 프로그램 실행을 래핑 할 수도 있습니다.

참고 문헌 :

/ubuntu//a/247769/824160 을 읽는 것이 좋습니다.


3

아래에 사용자 정의 쉘 스크립트를 작성하십시오.

/etc/profile.d/

생성 된 스크립트 안에 전역 환경 변수를 추가하고 머신을 재부팅하면 모든 사람이 사용할 수 있습니다.


패키지가 업데이트 될 때 해당 파일이 변경 될 수 있으므로 / etc / environment 파일을 편집하는 것보다이 방법이 더 안정적인 방법이라고 생각합니다.
23:20에

2

/etc/environment나를 위해 일한 변수를 추가 하십시오.

그러나/etc/environment 변경 사항을 적용하려면 변경 후 재부팅해야했습니다 . 터미널 창을 닫고 다시 여는 것만으로는 충분하지 않았습니다.


3
언제든지 source /etc/environment다시로드 할 수 있습니다 .
판 트로

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