정보공간_1

[6기 강북 윤덕진]리눅스 쉘 스크립트 프로그래밍 #2 본문

IT 놀이터/Elite Member Tech & Talk

[6기 강북 윤덕진]리눅스 쉘 스크립트 프로그래밍 #2

알 수 없는 사용자 2014. 10. 31. 16:28

 안녕하십니까! 강북 멤버십 23-1기 윤덕진입니다.

 오늘은 지난 포스팅에 이어 리눅스 부팅과정과 로그인 쉘에 대해 포스팅하도록 하겠습니다. 내용이 방대하다보니. 중간중간 간추려진 부분이 많습니다. 저도 책을 보고 정리하는 것이기 때문에 자세히 알고자 하시는 분들은 책에서 확인하셔도 괜찮을 것 같습니다.

 

1. 쉘 초기화 파일

1.1 /etc/profile :시스템 전역 쉘 변수 초기화

유저가 쉘에 로그인하면 가장 먼저 /etc/profile 파일을 가져 옵니다.

 

이 파일에는PATH, USER, LOGNAME, MAIL, HOSTNAME, HISTSIZE, INPUTRC 등의 쉘 변수들이 선언되어 있습니다. 그리고 전역 리드라인 초기화 파일인 /etc/inputrc 파일을 가져오고,

 

 특별한 프로그램들의 전역 환경을 설정하는 파일을 포함하고 있는 /etc/profile.d 디렉터리를 가져오도록 구성되어있습니다.

 

 

1.2 ~/.bashrc : 유저 개인의 앨리아스 및 변수 설정 파일

 이 파일에서 유저 자신의 개인적인 명령어 앨리아스를 정의할 수 있으며, /etc/bashrc 파일에서 시스템 전역 변수를 읽은 다음, 특별한 프로그램을 위한 변수를 설정할 수 있습니다. 이 특별한 프로그램에는 앞에서 언급한 cross compiler나 각종 빌드, 디버그 툴들이 포함될 수 있습니다.

 

 

1.3 source 명령  : 쉘 환경 설정 파일 즉시 적용하기

bashrc 파일을 수정한 다음 설정 내용을 즉시 적용하기 위해서 source 명령어를 사용합니다.

 

 

2. 프로세스와 쉘

 -프로세스란....

유일한 PID 번호에 의해 식별될 수 있는 실행 프로그램입니다. 프로세스는 실행 프로그램의 데이터와 스택, 프로그램 포인터와 스택 포인터 그리고 프로그램을 실행하기 위해 필요한 모든 정보들로 구성되어 있습니다.

 여기서 쉘은 로그인 프로세스를 완료했을 때 시작하는 특별한 프로그램입니다. 고로 쉘은 프로세스인 것입니다. 쉘은 PID 그룹에 의해 식별되는 그룹 프로세스에 소속됩니다.

 

2.1 실행중인 프로세스

 ps라는 명령어를 통해서 현재 실행되고 있는 프로세스들의 목록을 보여주는데, 많은 옵션들을 가지고 있습니다.

ps aux 명령어를 통해 init 프로세스의 PID가 1인 것을 확인할 수 있습니다.

 

프로세스 목록을 트리형식으로 보기 위해서 pstree 명령을 사용할 수 잇습니다. 이것으로 부모프로세스와 자식 프로세스들 간의 관계를 쉽게 파악할 수 있습니다.

 

2.2 시스템 콜

 -시스템 콜이란..

 프롬프트 또는 쉘 스크립트로부터 명령을 실행 했을 때 쉘은 빌트인 내부 코드에서 또는 디스크 저장장치에서 명령을 찾고 실행된 명령을 정렬합니다. 이것을 시스템 콜이라고 합니다.

 시스템 콜은 커널 서비스를 요청하고 시스템의 하드웨어에 접근할 수 있는 유일한 프로세스이며 또다른 프로세스들을 생성하고 종료할 수 있습니다.

 

2.3 프로세스 생성과 시스템 콜

(1) fork 시스템 콜

 리눅스 시스템에서는 fork 시스템 콜에 의해 프로세스가 생성됩니다. fork 시스템 콜은 콜 프로세스의 복사본을 생성합니다. 새로운 프로세스는 부모 프로세스로부터 생성된 자식 프로세스가 되며, 자식 프로세스는 fork가 호출된 다음 실행을 시작하고, 이 두 프로세스는 cpu를 공유하게 됩니다.

 

(2) wait 시스템 콜

 부모 쉘은 자식 쉘이 파이프, 백그라운드 프로세싱 등을 수행하는 동안 잠시 대기 상태로 유지됩니다. wait 시스템 콜은 자식 프로세스 하나가 종료될 때까지 부모 프로세스를 대기상태로 유지하는 것입니다.

 

(3) exec 시스템 콜

 터미널에 명령을 수행한 다음, 쉘은 새로운 쉘 프로세스를 fork 합니다. 자식 쉘은 타이핑된 명령을 수행해야 합니다. 이것을 exec 시스템 콜이라고 부릅니다. 쉘은 새로운 프로그램을 위해 path를 검색하고, 만약 프로그램이 발견되면 명령의 이름과 함께 exec 시스템 콜을 호출하게 됩니다.

 

(4) exit 시스템 콜

 exit 시스템 콜을 실행하면 프로그램을 언제라도 중지 할 수 있습니다.

 

지금까지 쉘초기화 파일, 프로세스와 쉘의 관계에 대해서 포스팅해보았습니다. 다음 포스팅에는 변수와, 배시 쉘 에 대해서 포스팅하도록하겠습니다.

 

위 내용은 '김태용의 리눅스 쉘 스크립트 프로그래밍 입문' 에서 발췌하였습니다.