리눅스 쉘 스크립트 맛보기
in Development on Linux
2.1 리눅스의 부팅 과정과 로그인 쉘
- init
- init과 연결된 수많은 프로세스들이 자신만의 프로세스 ID(PID)를 가지고 생성되기 시작
- init의 PID는 1
- init 프로세스가 시스템을 초기화하고 터미널 라인을 오픈하기 위한 작업을 시작하고, 표준 입력과 표준 출력, 표준 에러를 설정
ps -ef
를 입력하면 PID와 같이 출력- 표준 입력 (0): 키보드로부터 입력받는 것
- 표준 출력 (1) / 표준 에러(2) : 모니터로 출력하는 것
- 파일 디스크립터 0 1 2 ( 식별자 )
- 사용 사례 : bash 스크립트를 작성할 경우 표준 에러를 표준 출력으로 돌리고, 에러인 경우 dev/null로 찍는 경우 등등
- standard error redirection
- https://unix.stackexchange.com/questions/111611/what-does-the-rc-stand-for-in-etc-rc-d
- 그 이후 로그인 프롬포트를 보여줌
- init 프로세스는
/etc/rc.d/init.d
에 런레벨별로 설정되어 있는 쉘 스크립트를 실행. 이 스크립트들은chkconfig
명령을 사용해 부팅 시 자동으로 실행할 것인지, 실행하지 않을 것인지 설정할 수 있음 - 부팅 시 수행할 런레벨은
/etc/inittab
에 설정되어 있음( 우분투는/etc/init/rc-sysinit.conf
!) - 런레벨은 0부터 6까지 존재하는데, 주로 텍스트 모드 런레벨인 3번(주로 서버)과 그래픽 모드 런레벨인 5번을 주로 사용(주로 데스크탑) 현재는 level 2를 사용 중
rc1.d
,rc2.d
,rc3.d
,rc4.d
,rc5.d
,rc6.d
에 설정 파일이 들어가있음 (runlevel configuration)- K로 시작하는 것은 kill, S로 시작하는 것은 Start를 의미하며 파일의 prefix를 수정하면 바로 반영
- 로그인 프롬포트
/bin/login
프로그램이/etc/passwd
파일에 있는 첫 번째 필드를 체크하기 위해 유저 아이디를 검증하고, 존재하면 패스워드 검증- 패스워드가 맞다면
/etc/passwd
파일의 마지막에 설정되어있는 SHELL 변수에는 로그인 쉘을, USER와 USERNAME 변수에는 로그인 이름을 할당 - 로그인이 끝나면
/etc/passwd
파일에서 유저 라인의 마지막 단계에 입력되어 있는 프로그램을 실행. 일반적으로 배시 쉘로 설정되어 있음
쉘 초기화 파일들
/etc/profile
- 시스템 전역 쉘 변수 초기화
- 유저가 쉘에 로그인하면 가장 먼저 이 곳의 파일을 읽음. 이 파일에는 PATH, USER, LOGNAME, MAIL, HOSTNAME, HISTSIZE, INPUTRC 등의 쉘 변수들이 선언되어 있음
- 전역 리드라인 초기화 파일인
/etc/inputrc
파일을 읽어들이도록 되어 있으며, 프로그램들의 전역 환경을 설정하는 파일을 포함하고 있는/etc/profile.d
디렉터리를 읽어들이도록 구성되어 있음
/etc/bashrc
- 쉘 함수와 Alias를 위한 시스템 전역 변수 정의
~/.bash_profile
- 유저 개인의 환경 설정 파일
- 시스템 전역이 아닌 유저 자신만의 PATH와 시작 프로그램을 추가적으로 설정
~/.bashrc
- 유저 개인의 Alias 및 변수 설정 파일
- 유저 자신의 개인적 명령어 앨리아스를 정의할 수 있으며,
/etc/bashrc
파일에서 시스템 전역 변수를 읽은 다음, 특별한 프로그램을 위한 변수를 설정할 수 있음
~/.bash_logout
- 로그아웃 설정 파일
- 로그아웃 절차를 포함하고 있음. ex) 로그아웃하면 터미널 윈도우가 사라짐
source
명령- 쉘 환경 설정 파일 즉시 적용하기.
.
명령도 같은 기능을 수행
- 쉘 환경 설정 파일 즉시 적용하기.