우분투 환경변수 어디에 넣으시나요?

최근에 우분투 공부하기 시작했고, 현재 vmware에 쓰면서 추후

윈도우 밀고 우분투를 쓰기 희망하는 1인입니다 ㅋㅋㅋ

이것저것 설치하고 공부하고 있는데
환경변수 같은건 어디에 저장하세요?
전 /etc/profile에 넣는데

블로그 여기저기 돌아다니다 보면 bashrc에 많이들 넣으시더라구요.

머 개인환경변수… 이런말있던데 ㅋㅋ
머 문제 생기는건 아니겠죠 ㅜㅜ?

profile이 bashrc를 부르나요? :roll: :roll: :roll:

profile은 로그온할때 실행되는것이고 bashrc는 로그온되기 이전에 실행되는것이라는데요[url:c2z30ji7]http://stackoverflow.com/questions/415403/whats-the-difference-between-bashrc-bash-profile-and-environment[/url:c2z30ji7] 저 같은 경우에는 환경변수를 /etc/rc.local파일에 넣어버립니다. 레드햇계열에는 이게 없고 우분투 계열에만 있는 것으로 알고 있는데 그냥 이게 저한테는 편해서 그렇습니다.

데스크탑용으로 쓰시는 분들은 둘을 별로 구별 할 필요없다고 보고 있습니다.

저는 예전부터 리눅스에 관심이 많아서(그외 자유소프트웨어, GPL등…) 리눅스를 점차점차 사용하기 시작했습니다.
처음엔 윈도우에서 vmware로 리눅스를 돌렸지만 점점 관심이 많아진 후, 리눅스와 윈도우를 파티션 나눠서 같이 설치한 뒤… 시간이 점점 지나서
현재는 리눅스(아예 하드디스크 전부 지우고 삭제 버튼 체크)가 본체고 버추얼박스로 윈도우xp를 돌립니다. ㅋㅋㅋㅋ, 까는도중 버그도 생겼고요.

원래 windows따윈 깔 생각이 없었지만 부모님이 너무~ xp를 찿고(7, 8.1도 아닌…), 액티브엑스가 너무 많고 wine에서 돌린다해도 버그가 많아서 할수없이 버추얼박스에서 xp깐 상태입니다.

ps. 글이 자유게시판에다 왠지 질문보단 설문조사같아서 이런글을 씀.

이상하게도 개별 환경변수 설정을 하는 곳을 찾질 못하겠네요.
메뉴얼대로 설정했더니, xtermianl에서만 적용되는 이상한 현상이 일어나서 각각의 실행하는 프로그램 마다 개별적으로 설정해두거나, 한곳에 공통된 설정을 설정해두고 불러오게 합니다.

환경변수는 프로세스의 수명과 같습니다.
어떤 프로세스가 실행될 때, 그 프로세스에서 사용할 변수를 미리 지정하는 것이 환경 변수죠.
그게 프로세스와 쓰레드의 차이 중 하나입니다.
프로세스 모델은 각 프로세스별로 환경변수 영역을 따로 갖고 있지만,
쓰레드모델은 하나의 프로세스에서 쓰레드로 분할되기에,
환경변수와 분할전 상태를 공유하게 됩니다.
하나의 프로세스에서 여러개의 쓰레드로 나눠져 메모리를 공유하는 것이 멀티쓰레드 모델이고,
자식 프로세스를 계속 만들어 메모리 공간도 따로 할당되는 것이 멀티프로세스 모델입니다.

일반적으로 쉘프로그램이 먼저 실행되고, 나머지 프로그램들이 쉘에 의해 불려지는 경향이 있습니다.
하위 프로세스에 부모프로세스의 환경변수를 전파하는 명령이 bash쉘에서는 export 입니다.
하위 프로세스의 환경변수영역도 부모프로세스와 공유되지 않고, 개별 할당되기에 전파가 필요한 것입니다.

하위 프로세스는 그 프로세스가 살아 있는 동안 해당 변수가 할당되고,
하위프로세스가 죽으면 하위프로세스의 환경변수도 역시 사라집니다.
하지만 부모프로세스의 환경변수는 그대로 존재하죠.

예를 들어 .gnomerc 파일은 그놈 데스크탑환경이 실행될 때, 실행됩니다.
여기에 환경변수를 정의해 두면, 그놈데스크탑이 실행되고 있는 동안, 그놈데스크탑에 의해 불려지는 프로그램들에 대해
유효하게 됩니다.

.cshrc 는 csh이 실행될 때 마다, .tcshrc는 tcsh이 실행될 때 마다 실행됩니다.
.profile은 본 쉘 호환 쉘(sh, bash, ksh, zsh, dash등)로 로그인시 실행되고,
.bashrc는 본쉘이 실행되는 데, 로그인이 아닐 경우나, 인터렉티브 모드일 때 실행됩니다.
그러니까, .profile에서 .bashrc를 로드하게 할 필요가 있을 수 있습니다.

/etc/profile, /etc/bash.bashrc은 각 계정 별이 아니라 시스템에 대해 적용되는 것입니다.
/etc/profile.d/*은 /etc/profile과 역할이 같지만, 파일별로 분리하여 번호순서에 따라 실행됩니다.

/etc/environment 라는 파일에 환경변수를 설정할 수 있습니다.
이러면 프로세스가 실행될 때 마다, 환경변수가 적용됩니다.

예를 들어, 시스템 전체적으로 적용되는 것이 아니라, 그래픽 환경에서만 환경변수가 적용되게 하고 싶다면,
$HOME/.xinitrc나 $HOME/.gnomerc, /etc/X11/Xsession.d/* 등에 설정하시면 됩니다.
이러한 경우에도, 하위프로세스에 환경변수를 물려주기 위해 export 명령이 필요하게 됩니다.

다시 정리한다면, 환경변수는 그 환경변수를 보유하는(메모리영역에 할당하는) 프로세스의 수명과 같습니다.
그렇기에 어떤 프로세스의 활동주기에 맞추는가에 따라 정의할 곳도 달라지게 되는 것입니다.
그것만 이해하신다면, 환경변수를 적절한 곳에서 정의하실 수 있으실 것입니다.

+_+!
그동안 어설프게 알았던 개념들이 한방에 해결되네요~

좋은 글 감사드립니다~

[quote="protochaos":2pwkhfc4]환경변수는 프로세스의 수명과 같습니다.
어떤 프로세스가 실행될 때, 그 프로세스에서 사용할 변수를 미리 지정하는 것이 환경 변수죠.
그게 프로세스와 쓰레드의 차이 중 하나입니다.
프로세스 모델은 각 프로세스별로 환경변수 영역을 따로 갖고 있지만,
쓰레드모델은 하나의 프로세스에서 쓰레드로 분할되기에,
환경변수와 분할전 상태를 공유하게 됩니다.
하나의 프로세스에서 여러개의 쓰레드로 나눠져 메모리를 공유하는 것이 멀티쓰레드 모델이고,
자식 프로세스를 계속 만들어 메모리 공간도 따로 할당되는 것이 멀티프로세스 모델입니다.

일반적으로 쉘프로그램이 먼저 실행되고, 나머지 프로그램들이 쉘에 의해 불려지는 경향이 있습니다.
하위 프로세스에 부모프로세스의 환경변수를 전파하는 명령이 bash쉘에서는 export 입니다.
하위 프로세스의 환경변수영역도 부모프로세스와 공유되지 않고, 개별 할당되기에 전파가 필요한 것입니다.

하위 프로세스는 그 프로세스가 살아 있는 동안 해당 변수가 할당되고,
하위프로세스가 죽으면 하위프로세스의 환경변수도 역시 사라집니다.
하지만 부모프로세스의 환경변수는 그대로 존재하죠.

예를 들어 .gnomerc 파일은 그놈 데스크탑환경이 실행될 때, 실행됩니다.
여기에 환경변수를 정의해 두면, 그놈데스크탑이 실행되고 있는 동안, 그놈데스크탑에 의해 불려지는 프로그램들에 대해
유효하게 됩니다.

.cshrc 는 csh이 실행될 때 마다, .tcshrc는 tcsh이 실행될 때 마다 실행됩니다.
.profile은 본 쉘 호환 쉘(sh, bash, ksh, zsh, dash등)로 로그인시 실행되고,
.bashrc는 본쉘이 실행되는 데, 로그인이 아닐 경우나, 인터렉티브 모드일 때 실행됩니다.
그러니까, .profile에서 .bashrc를 로드하게 할 필요가 있을 수 있습니다.

/etc/profile, /etc/bash.bashrc은 각 계정 별이 아니라 시스템에 대해 적용되는 것입니다.
/etc/profile.d/*은 /etc/profile과 역할이 같지만, 파일별로 분리하여 번호순서에 따라 실행됩니다.

/etc/environment 라는 파일에 환경변수를 설정할 수 있습니다.
이러면 프로세스가 실행될 때 마다, 환경변수가 적용됩니다.

예를 들어, 시스템 전체적으로 적용되는 것이 아니라, 그래픽 환경에서만 환경변수가 적용되게 하고 싶다면,
$HOME/.xinitrc나 $HOME/.gnomerc, /etc/X11/Xsession.d/* 등에 설정하시면 됩니다.
이러한 경우에도, 하위프로세스에 환경변수를 물려주기 위해 export 명령이 필요하게 됩니다.

다시 정리한다면, 환경변수는 그 환경변수를 보유하는(메모리영역에 할당하는) 프로세스의 수명과 같습니다.
그렇기에 어떤 프로세스의 활동주기에 맞추는가에 따라 정의할 곳도 달라지게 되는 것입니다.
그것만 이해하신다면, 환경변수를 적절한 곳에서 정의하실 수 있으실 것입니다.[/quote:2pwkhfc4]