1. Shell & 프로세스 관리
발표일 2012.03.29
발표자 김경석
이메일 special1809@nate.com
2. shell
컴퓨터의 기본 연산 구조
CPU
RAM Kernel Shell application
(프로세스) (명령어해석)
HDD
(프로그램)
1
3. shell
Shell 의 정의
shell은 실행파일인 프로그램과 kernel사이에서 매개체 역할을
하는 프로그램을 말함.
사용자가 시스템에 로그인 > 시스템에 의해 자동으로 shell이
부여됨(설정변경가능)
유닉스 상에서 여러가지 쉘이 제공됨.
2
4. shell
Shell 의 종류
-Bourne shell : 최초의 쉘. 여러기능의 부재로 많이 사용되지 않음.
현재는 sh.
-bash : Bourne-Again SHell로 리눅스에서 가장 많이 사용. POSIX와 호환,
GNU프로젝트에 의해 개발 배포, 명령행 편집기능 제공이 특징.
-ksh : 콘쉘. 유닉스에서 가장 일반적으로 사용. 명령행 편집기능 제공.
C계열 쉘.
이외에도 ash, csh, zsh 등 다양한 쉘이 리눅스상에서 사용가능.
3
5. shell
명령행 편집기능
crtl+c 실행중단, crtl+u 전체행삭제, 명령어입력에서 Tab키를
누를시 자동으로 채워주는 것, 백스페이스키를 누르면 문자가
지워는것 등을 말함.
-터미널 상의 오류로 이러한 기능들이 작동하지 않는 경우 stty
명령어를 사용하여 고칠수 있다.
stty function key
Ex> stty kill ^U
여기서 function에는 원하는 기능, key에는 원하는 기능이 들어감.
^는 Ctrl을 의미.
- stty –a 명령어로 현재 모든 터미널 설정내용을 확인가능
4
6. shell
data data data
Linux Device
Shell terminal
Kernel driver
-디바이스 드라이버
shell에서 사용자 명령을 보기전에 사용자가 입력한 데이터가 우선적으로 통
과됨. 또한 터미널을 제어하며 쉘에서 입력된 문자를 해석하기 전에 문자가
수행할 수 있는 것을 판별한다.
-디바이스 드라이버의 동작모드
cooked mode
사용자 입력 문자가 디바이스드라이버에 의해 해석되는 방식. 일반적으
로 사용되는 방식으로 두 가지 키를 동시에 사용하는 작업을 가능하게
해줌
raw mode
사용자 입력 문자가 쉘이나 실행프로그램에 직접 전달되는 방식.
Virtual Terminal 어플리케이션 같은 통신프로그램 작성시 매우 효율적.
5
7. shell
Borne shell 환경변수
변수 설명
HOME=/home/login HOME은 사용자가 시작하는 위치인 홈 디렉터리를
설정한다. 왼쪽에서 login 부분을 ID로 대치하게 되면
HOME은 /home/로그인 ID로 정의된다.
LOGNAME=login LOGNAME은 자동으로 로그인 ID와 동일하게 설정
된다.
PATH=path Path 옵션은 쉘이 명령에 대해 찾는 디렉터리 목록을
표현한다. PATH=/usr:/bin:/usr/local/bin같이 설정가
능.
PS1=prompt Ps1은 프롬프트의 모습을 정의하는 1차 쉘 프롬프트
이다. 프롬프트의 기본은 $(달러기호)이다.
PS1=“linux #”는 명령어 프롬프트로 linux #를 표시.
6
8. shell
Borne shell 환경변수
변수 설명
PWD=directory PWD는 자동으로 설정됨. 사용자의 현재 위치를 나
타내준다. 명령줄에 echo $PWD 입력하고 linux가
/home이라고 표시하면 현재 /home directory에 위치
해있는 것이다.
SHELL=shell SHELL은 사용자 쉘로 프로그램의 위치를 식별한다.
예를 들어 .profile이나 .login 파일에서 SHELL을
SHELL=/bin/csh로 설정하여 csh를 로그인 쉘로 만들
수 있다.
TERM=termtype 이 변수는 터미널 데이터베이스에 의해 지정되는 대
로 터미널 유형의 이름을 설정한다. .profile 또
는 .login 파일에서 TERM=vt100과 같이 TERM을 설
정할 수 있다.
7
9. shell
Borne shell 특수 환경변수
변수 설명
HOME 홈 디렉터리의 완전 경로명. HOME 변수는 홈디렉터
리를 지정한다. 로그인시에 홈디렉터리에 위치하게
되며, /cd 명령어만으로 홈디렉터리로 되돌아갈수 있
다.
PATH 쉘이 명령을 탐색하는 디렉터리를 나열해준다. 쉘은
이 순서대로 디렉터리를 탐색한다.
MAIL 우편함의 전체 경로명. 사용자의 전자우편을 보유하
는 파일의 이름이 들어있다. 메일이 시스템에 올 때
MAIL변수에 지정된 파일에 배치된다.
PS1 1차 프롬프트로서 표시되는 문자열을 보유한다. 프롬
프트는 쉘이 명령을 수신할 준비가 될 때마다 표시하
는 문자열이다.
8
10. shell
Borne shell 특수 환경변수
변수 설명
TERM 터미널의 유형을 식별하는데 사용. 전체화면을 사용
하는 프로그램에서 필요하다.
TZ 시간대를 식별하는 문자열을 보유. Date프로그램 등
에서 필요하다.
LOGNAME 시스템이 사용자와 연관시키는 이름이나 문자열인
로그인 이름을 보유한다. 파일 소유자나 실행중인 프
로세스나 프로그램의 개시자, 메일 또는 메시지의 작
성자로서 사용자를 식별할 때 사용된다.
9
11. shell
Alias 명령
명령어의 간소화를 위한 명령어. 명령어가 길거나 옵션을 지정하기 싫을 때
해당명령어에 일정단어를 지정해주어 사용한다.
Alias 별명=„명령어‟
-$ alias rm=„rm –i‟
위와 같이 명령어를 입력하면 파일을 지울 때 확인 메세지를 띄우는
–i 옵션을 사용하지 않을 수 있다.
alias명령어만 입력시 현재 설정된 항목을 확인할 수 있다.
10
12. 프로세스 관리
프로세스의 개념
프로그램, 즉 디스크에 잠들어있는 정보가 활동할 때의 상태를 프로세스라
고 한다.
프로세스의 생성
프로세스 exec 호 다른 프로세스
출
프로세스 fork 호출 복사본 exec 호 자식 프로세스
프로세스 출
11
13. 프로세스 관리
pstree
최초의 프로세스
혹은 부모 프로세스
서브프로세스 혹은
자식 프로세스
자식프로세스는 부
모 프로세스의 환경
을 물려받지만 자식
프로세스가 환경을
변경할 때 부모프로
세스로 전달되지는
않는다.
12
14. 프로세스 관리
-process 상태보기
Ps 명령어는 현존 실행 프로세스의 상태보고서를 만들어준다.
USER(BSD) : 프로세스 소유자의 USERNAME
UID(sys V) : 프로세스 소유자의 USERNAME
PID : 프로세스 식별번호
%CPU : CPU 사용 비율의 추정치(BSD)
%MEN : 메모리 사용 비율의 추정치(BSD)
SZ : K단위 혹은 페이지 단위의 가상메모리 사용량
…
PPID : 부모 프로세스의 PID
PRI : 실제 실행 우선 순위
NI : nice
WCHAN : 프로세스를 기다리고 있는 이벤트
13
15. 프로세스 관리
Signal (kill)
Signal은 프로세스간의 통신수단으로, 프로세스가 다른 프로세스에게 메시지
를 보내기 위한 수단이다. Kill은 signal을 보내는 명령이라고 할 수 있다.
이름 번호 의미
HUP 1 Hangup(실행종료. 로그아웃하거나 모뎀 접속을 끊을 때 보내진다.
INT 2 Interrupt(실행종료. CTRL-c를 쳤을 때 보내진다)
QUIT 3 Quit(실행종료. CTRL- 를 쳤을 때 보내진다.)
KILL 9 Kill (무조건 종료)
SEGV 11 Segmentation Violation(허가되지 않은 메모리영역에 접근하였다.)
TERM 15 Terminate(가능한 정상종료)
STOP 19 (무조건적으로 즉각적 정지)
TSTP 20 Stop(실행을 정지 후 다시 실행을 계속하기 위하여 대기, CTRL-z)
CONT 18 Continue(STOP이나 TSTP에 의해 정지된 프로세스가 다시 실행을 계속한다.
Kill 명령의 사용법 - kill <pid>
kill <signal> <pid>
14
16. 프로세스 관리
multitasking
동시에 하나이상의 프로그램을 수행시킬 수있는 다중처리.
Linux에서는 프로그램을 foreground와 background로 구별.
- foreground : 화면에 보여주면서 실행되는 상태(입력을 받아들임)
- background : 화면에 보여주지 않으면서 실행되는 상태
(입력을 받아들이지 못함)
- suspend : 메모리에 올라가 있지만 정지된 상태
Background 실행 시에는 foreground 실행 뒤에 &을 붙여서 실행하면 된
다. 하지만 입력을 필요로 하는 프로그램일 시 suspend 된다.
15
17. 프로세스 관리
multitasking
동시에 하나이상의 프로그램을 수행시킬 수 있는 다중처리방식.
Linux에서는 프로그램을 foreground와 background로 구별.
- foreground : 화면에 보여주면서 실행되는 상태(입력을 받아들임)
- background : 화면에 보여주지 않으면서 실행되는 상태
(입력을 받아들이지 못함)
- suspend : 메모리에 올라가 있지만 정지된 상태
background 실행 시에는 foreground 실행 뒤에 &을 붙여서 실행하면 된
다. 하지만 입력을 필요로 하는 프로그램일 시 suspend 된다.
foreground프로그램에 CTRL-z 를 입력 시 suspend 되며 다시 되돌리려
면 “fg %<작업번호>”를 사용한다. 마찬가지로 suspend 된 것을
background 로 하려면 “bg %<작업번호>”를 사용한다.
16
18. 프로세스 관리
daemon
백그라운드에서 실행되면서 server의 역할을 하거나 기능을 돕는 프로세스를
말한다. 이러한 프로세스들은 실행 방식으로 구분된다
-daemon의 방식
Standalone
보통 부팅시에 실행되는 프로세스로 메모리에 계속 상주해있다.
서비스요구가 빈번하거나 항상 요구될 때 유용하며 대부분의
daemon이 이 방식으로 실행된다.
INET
client로부터 요청이 있을 때 process가 되어 서비스를 해준다. 이
러한 방식의 daemon들을 standalone방식으로 실행되는 super
daemon이 관리하며 이 경우에 INET방식의 daemon들에 대해서
특정 ip에게만 허락하는등 다른 처리단계를 지정할 수 있다. 보안
상에 이점이 있다.
17
19. 프로세스 관리
프로세스 Utility
Pstree -프로세스간의 상관관계를 트리형식으로 출력한다.
Pstree [-옵션] [프로세스ID(PID) l 사용자]
옵션 의미
-a 명령어에 인수를 넣어 실행했다면 명령어 인수까지 함께 보여준다.
-c 독립적인 하위트리는 보여주지 않는다. 같은 위치에 같은 프로세스가 있
을 때 각각으로 보여준다.
-h 현재프로세스와 부모프로세스를 두드러지게 출력한다.
-I 특별한 긴 줄이 있어도 그대로 보여준다.
-n PID순서대로 정렬해서 같은 부모프로세스를 가진 자식 프로세스들을 모
아서 출력한다.
-p PID도 출력한다
-u UID도 출력한다.
-G 프로세스간의 관계를 보기 좋게 출력하지만 터미널에서 이상할 수 있다.
-V 버전 정보를 보여주고 마친다.
18
20. 프로세스 관리
프로세스 상태 알기
Ps [-옵션]
위의 명령어로 관리자는 현재 돌아가고 있는 프로세스를 살펴보고 죽은 프로세
스들을 kill을 통해 삭제한다.
Ex)
$ps –a : 모든 프로세스를 출력. $ps –f : 프로세스의 상속관계 출력
19
21. 프로세스 관리
top
CPU 프로세스 상황을 보여준다. Top 시스템의 프로세스 수, 어떤 사용자와 데몬
이 있는 지와 CPU의 상태를 실시간으로 보여준다. 실행도중 프로세스를 제어할
수 있다.
서식 - # top
kill
일부 프로그램이 먹통일 때 프로그램 종료를 위해 사용된다. 윈도우의 프로그램
관리자-작업종료 기능과 비슷하지만 한번에 프로그램을 종료할 수 있다.
서식 – kill [-옵션] pid
kill [-옵션] 시그널
- 일반 사용자는 자신의 이름으로 실행된 프로그램만 중지시킬 수 있으며, 한번
에 간단히 프로그램을 없앨 수 있기 때문에 조심해서 실행해야 함.
20
22. 프로세스 관리
nice
동시에 실행되는 여러 프로세스들간에 우선순위를 부여해주는 명령어.
서식 – nice [-n 조정수치][--adjustment=조정수치][변수]
기본적으로 옵션사용을 하지 안으면 현재 우선순위를 출력, 조정 시에는 수치가
작을 수록 높은 우선순위를 받게 된다.
cron & crontab
정기적으로 명령 또는 프로세스를 지정할 때 사용된다. crontab 파일에 실행 시
간과 날짜가 들어가며, 시간은 분,시,일,월,요일 등 다양한 항목으로 들어간다.
Cron은 시스템이 부트될때 한번 구동되며, 개별사용자에게는 권한이 없다.
-minute hour day month weekday command 의 형식에 맞는 입력파일 이 필
요하며 항목에 숫자대신 *가 들어갈 경우 항상일치로 인식된다. 명령어 출력은
사용자에게 전송된다.
21