Linux init
리눅스 시스템의 부팅 과정은 여러 단계를 거치며, 하드웨어의 전원을 켜고 시스템이 실행될 때부터 시작됩니다. 일반적으로, 전체적인 부팅 과정은 다음과 같습니다. 전원이 공급되면 POST 프로세스를 실행하여 하드웨어를 점검하고, GRUB 같은 부트 로더가 가동됩니다. 그리고 커널을 로드하고 초기화하고, init 프로세스(부팅 매니저)가 시작됩니다.
init
리눅스는 부팅 시 init라는 첫 번째 프로세스가 시작되고 init과 연결된 수많은 프로세스들이 실행되기 시작합니다. init은 시스템을 초기화하고 터미널 라인을 오픈하기 위한 작업들을 합니다. 이때 stdin, stdout, stderr를 캐릭터 디바이스 파일(키보드, 단말, 마우스)에 설정합니다.
init 프로세스는 /etc/rc.d/init.d 에 런레벨별로 설정되어 있는 쉘 스크립트를 실행합니다. 부팅 시 실행할 런레벨은 /etc/inittab 파일에 설정되어 있습니다.
초기화 파일들
init 프로세스가 실행되면, 여러 자식 프로세스가 실행되고 그 중 getty 프로세스는 사용자에게 터미널을 오픈하고 모니터에 로그인 프롬프트를 보여줍니다. 그리고 나서 /bin/login을 실행합니다. 이때 로그인에 성공하면, 환경 설정이 초기화되고 쉘 프로세스는 /etc/profile 파일을 찾아서 실행하게 됩니다. /etc/profile 파일에는 export 명령을 사용하여 각 변수들을 서브쉘로 전달하고 있고 /etc/profile.d 에 있는 .sh파일을 실행하고 있습니다.
그리고 나서, 유저 홈에 있는 .bash_profile을 일반적으로 읽게 됩니다. 파일의 코드를 보면 먼저 .bashrc 파일이 있으면 실행하게 하고, 환경 변수 PATH에 자신의 홈에 있는 bin 디렉터리도 추가해줍니다. .bashrc 파일에는 앨리어스들과 LANG 환경 변수들이 설정되어 있고, 마지막으로 /etc/bashrc가 있으면 /etc/bashrc 를 실행하게 합니다.
기본적으로 profile이 포함하는 파일에는 환경 변수를 입력하거나 설정 파일들을 실행시키고 bash가 포함된 파일들은 앨리어스 및 사용자 편의 변수들을 설정합니다. 일반적으로 /etc 에 있는 디렉터리를 사용하기 보단 사용자 홈 디렉터리에 있는 ~/.bashrc 또는 ~/.bash_profile 를 변경하여 사용합니다.