[우분투서버] 부팅순서와 각종 설정파일, 프로그램 자동 실행

안녕하신지요 고수님들…
초보 리눅서 입니다.

몇일 구글링하며 고민하다 이렇게 질문 올립니다.
우선 우분투서버의 부팅순서와 각종 설정 파일들을 읽어들이는 순서가 궁금합니다.
각 설정 파일이 존재하는 분명한 이유와 목적이 있을 텐데 그것에 대해서도…
/etc/rc.local과 각 rc0.d-rcs.d의 프로그램 링크들…
/etc/environment, /etc/profile…
각 유저 디렉토리 안의 .bashrc, .profile파일들은 유저 로그인 시에 메모리에 셋팅되는 내용들일테고…

저는 지금껏 sudo 명령이 실행되는 순간에는 root 사용자가 된다고 생각했는데 그게 아닌가 보네요.
/root/.profile에 다음 명령을 추가하고…
PATH=$PATH:/root/test
export PATH

$sudo printenv해서 PATH를 확인해보면 /root/test가 추가되어 있지 않습니다.
$su -로 루트로 바꿔서 #printenv 로 확인해보면 추가되어 있구요.

모든 사용자에게 공통 PATH를 설정해주려면 어느파일을 수정해야 하나요?
rc.local에다 추가해도 PATH=$PATH:/root/test, export PATH를 추가해도 적용되지 않는군요.
/etc/environment에 패스 추가해도 읽어들이질 않네요. ㅡㅡ;

시스템 기동과 동시에 특정 프로그램을 실행 시키려면 어떻게 하면 될까요?
어떤 유저로도 로그인 하지 않은 상태로 "login:" 이라고 만 뜬 상태에서 말이죠.
/etc/init.d/에 스크립트 생성한 후 rc.local이나 rc?.d에 링크 추가하는 방법으로?
update-rc.d로 등록하는 방법으로 하면 되나요?

다 설명하려면 꽤 긴 글이 될것 같네요.
자세한건 하나하나 찾아가면서 하겠습니다.
전체적인 개념 좀 잡아 주시면 젤로 좋겠습니다.

아는 것만 말씀드리면,

/etc/rc?.d/ 아래에 있는 링크들은 실제로는 /etc/init.d/ 아래에 있는 shell script들에 대한 symbolic link들입니다. S로 시작하는 것은 해당 runlevel에 "시작"하라는 의미이고, K로 시작하는 것은 "종료"하라는 의미입니다. S나 K 뒤의 숫자는 우선순위입니다. S16ssh와 S20couchdb가 있다면 ssh을 먼저 실행하라는 뜻입니다. /etc/init.d/README를 보면 이런 말이 나옵니다.

[quote:1lunxatx]
To disable a service in this runlevel, rename its script in this
directory so that the new name begins with a ‘K’ and a two-digit
number, and run ‘update-rc.d script defaults’ to reorder the scripts
according to dependencies. A warning about the current runlevels
being enabled not matching the LSB header in the init.d script will be
printed. To re-enable the service, rename the script back to its
original name beginning with ‘S’ and run update-rc.d again.
[/quote:1lunxatx]

/etc/rc.local은 rc?.d에 있는 내용을 다 처리하고 나면 그 다음에 실행됩니다.

/etc/environment는 모든(? "모든"인지는 자신이 쫌 없군요.) 프로그램이 실행될 때 설정되는 환경 변수들을 설정하기 위해서 쓰입니다.
(그러니 프로그램이 실행될 때 공통된 path를 넣으려면 여기에 넣으면 되겠네요.)

/etc/profile은 bash이 뜰 때마다 실행(?)됩니다. (모든 사용자)
bash이 설정파일을 읽는 순서는 다음과 같다네요. (man bash 해 보세요)

[quote:1lunxatx]
When bash is invoked as an interactive login shell, or as a non-inter‐
active shell with the --login option, it first reads and executes com‐
mands from the file /etc/profile, if that file exists. After reading
that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile,
in that order, and reads and executes commands from the first one that
exists and is readable. The --noprofile option may be used when the
shell is started to inhibit this behavior.
[/quote:1lunxatx]

sudo는 사용자의 uid만을 바꿉니다. 설정파일까지 root의 것을 가져오지 않습니다. sudo -i 같은 것을 해 보세요. (이거슨 FAQ! ㅎㅎ)

글고… rc.local과 path는… rc.local에 path를 넣어도 rc.local을 실행하는 process에만 해당될 뿐, 다른 process에는 영향을 안 미치겠죠. /etc/environment나 /etc/profile에 넣어보세요.

우선 답변 감사드립니다.

혹시 검색해서 들어오신 분들이 계실까 간단히 설명 남겨 놓습니다.

우선, 각종 환경 설정에 관한 가장 명확한 설명은 다음 링크를… 영문입니다. ㅡㅡ;

https://help.ubuntu.com/community/EnvironmentVariables

패스나 로케일 정보등 시스템 전체에 영향을 미치는 환경변수들은 /etc/environment에 저장하라고 설명되어 있습니다.
그러나 문제는…
/etc/environment에 원하는 패스(실제 존재하는 폴더)를 추가한 후, 일반 유저로 로그인 해서 printenv를 해보면 설정한 패스가 나옵니다만, sudo printenv로 확인 해 보면 해당 패스가 들어 있지 않습니다.
su -로 루트로 바꾼 후 확인해도 해당 패스가 들어있지 않더군요.
혹시 버그?
참고로, 8.04서버버전, 9.04서버버전, 9.04데탑버전에서 같은 현상인 걸 확인했습니다.
다른 우분투 버전에서는 어떤지 궁금하네요. ㅡㅡ;
여튼, .profile이나 .bashrc 혹은 /etc/profile, /etc/bash.bashrc등등에 기록해서 해결 할 수 있는 방법은 있으니 우선 패스.

시작시 프로그램 자동실행은 /etc/init.d밑에 XXX 스크립트 작성 후에 update-rc.d XXX defaults로 등록하는 방법으로 해결 했습니다.
특정 유저로 로그인 하지 않아도 잘 실행되어 좋더군요.

http://maya.jaram.org/blog/bth/entry/%E ... 8%EA%B8%B0

그럼 즐건하루 되시길…

안녕하세요.
아래 링크는 우분투 각종 설정 파일에 관한 설명입니다.

https://help.ubuntu.com/community/EnvironmentVariables

문서에서는 /etc/environment가 전역 변수를 저장하는 곳이라는데, 실제로 해보니 원하는 데로 돌아가질 않습니다.
왜 그런지 설명 해 주실 수 있을까요?
우분투 서버8.04, 서버 9.04, 데스크탑 9.04에서 테스트 해봤지만 모두 같은 결과였습니다.
테스트 순서는 다음과 같습니다.

1.디렉토리 생성
/test/environment
/test/etcprofile
/test/rootprofile
/test/lpgprofile

2./home/lpg안의 .profile에 패스 추가.
PATH=$PATH:/test/lpgprofile
export PATH

3./root안의.profile에 패스 추가.
PATH=$PATH:/test/rootprofile
export PATH

4./etc/environment에 PATH와 LPG_TEST 환경 변수 추가.
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/test/environment"
LPG_TEST="XXXXXXXXXXXXXXXXX"

5./etc/profile에 패스 추가.
PATH=$PATH:/test/etcprofile
export PATH

6.시스템 재부팅
Shutdown –r now

7.각 유저의 환경변수를printenv명령으로 확인
●일반유저( $printenv )

[quote:3mjez2zr]PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/test/environment:/test/etcprofile:/test/lpgprofile
LPG_TEST=XXXXXXXXXXXXXXXXX[/quote:3mjez2zr]

●SUDO ( $sudo printenv )

[quote:3mjez2zr]PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin[/quote:3mjez2zr]
●루트계정( su –, # printenv )

[quote:3mjez2zr]PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/test/etcprofile:/test/rootprofile
LPG_TEST=XXXXXXXXXXXXXXXXX[/quote:3mjez2zr]

일반계정에서는 정상 원하는대로 출력 되고 있습니다.
루트계정에서 패스를 보면 /etc/environment에서 추가한 패스는 나오지 않지만LPG_TEST값은 출력 되고 있습니다. 패스가 사라진 이유는??
SUDO에서는/etc/environment, /etc/profile에 설정한 내용이 전혀 안나오네요. 또한, /usr/X11R6/bin가 패스에 추가되어 있는데, 저 경로를 셋팅해주는 곳이 어디인지 아시는 분 있습니까? 그 파일을 보면 뭔가 단서가 나오지 않을까…

그럼 잘 부탁드립니다.

su - 는 루트환경을 지니고 로긴 하고 sudo 는 아닙니다. 개인 환경에서 루트권한만 주는 것입니다.
전체적으로 글을 읽으면서 느낀건데.

특이한 작업을 하십니다 … 특히 1번 같은경우 그걸 만들 이유가 있는건지요 ?

보통 서버에서 환경을 동일하게 주고 싶다면 /etc/skel/ 에 파일들은 손보아 유저생성시 기본과는 다른 환경을 줄수 있는데.
이도 하지 않습니다. 이유는 각자 알아서 환경을 만들어 쓰게 하는 거지요
요즘은 로케일도 유저가 알아서 사용하게 두는 추세입니다.

패스 추가는 여러곳에 넣을수도 있지만
그냥 자신이 사용하는 쉘 설정 요즘 다 바쉬니까 이 경우 ~/.bashrc 정도 에서 해주면 됩니다.
아 그러고 보니 각 사용 쉘에 따른 변화도 생각 해보십시요

먼가 굉장히 이상한 작업을 하는거 같아 적어 봅니다.
보통 서버관리자가 특별한 이유없이 전역설정을 건디려 놓으면 오히려 사용자들 헤멥니다. ;)

1번 작업이 뭔가 의미가 있는건 아닙니다. 실제 폴더가 존재하지 않으면 패스에 적용 안될까 하는 괜한 걱정에…

요 몇 주 사이에 갑작스레 리눅스에 관심이 생겨 공부중입니다. 서버 버전을 깔았지만 사용자는 저 혼자구요. 자바등을 설치한 후에 일일이 패스설정 하기 싫어서 한번에 해결해 보려고 오만 삽질을 해봤더랬죠. 덕분에 여러가지 공부가 되었답니다. 리눅스는 설정파일이 많아 어떻게든 돌려가며 쓸 수도 있겠지만, 그 파일이 존재하는 이유를 확실히 알고 맞게 사용하는 것도 중요하다는 생각에…

뭔가 찜찜하지만 더 해봐야 뾰족한 수가 없을 듯 해서 당분간 잊고 지낼려구요. 나중에 내공이 쌓이면 절로 터득할 날이 올지도 모르죠.
그럼 즐거운 하루 되세요.