Transcript 임베디드리눅스
Embedded Linux
운영체제
운영체제란?
자원 관리자 (Resource Manager)
응용에게 자원에 대한 서비스 제공 (Computing Environment)
자원의 종류
물리적인 자원 : 처리기, 메모리, 디스크, 터미널, 네트웍, ...
추상적인 자원 : 태스크, 세그먼트/페이지, 파일, 드라이버, 통신
프로토콜, 패킷, 보안, ...
Network package
ls, who, …
X window
system
2
vi, emacs,…
Kernel
Device Driver
Hardware
Compiler
RDBMS
운영체제 종류
RTOS(Real-Time OS)
VxWorks, pSOS, LEX, uITRON, EPOCH, Nucleus
UNIX
Linux
Windows System
Mac OS
3
임베디드 (실시간) OS의 주요 개념
태스크
수행중인 프로그램 (an instance of a running program)
스케줄링 단위 (scheduling entity)
제어 흐름과 주소 공간의 집합 (a control flow and address space)
멀티 태스킹
여러 개의 태스크를 동시에 실행시키는 것
일반 OS 에서의 태스크
각 태스크들은 대분분 무관한 프로그램임
임베디드 시스템에서의 태스크
4
하나의 큰 응용 프로그램을 논리적으로 나눈 것
기능상 매우 밀접한 관계
태스크 사이에 이루어지는 작업들이 많다.
응용 프로그램을 실행을 위해 여러 기능들이 동시 실행 요구
순차적이 아닌 동시 실행의 필요성이 있다.
임베디드 (실시간) OS의 주요 개념
스케쥴러(Scheduler)
OS의 핵심기능
다음 번에 어떤 태스크를 실행해야 하는 지를 결정하는 코드 부분
태스크 선택 정책 : 우선순위 기반의 스케쥴링
선점(Preemptive)
FIFO(First In First Out), Round-robin 등
어떤 태스크가 수행되고 있을 때 커널이 중간에 그 태스크의 수행을 중지 시
키고 다른 태스크의 기능을 수행시키는 기능
선점형 커널 / 비선점형 커널
다른 태스크로 실행이 넘어갈 때 문맥전환(context switching) 발생
Context switching
일단 현재 수행 중인 태스크 상황 하에서의 시스템 상태(문맥)를
TCB(Task Control Block)이라는 특정한 자료구조에 저장하고, 다음에
새로운 태스크의 문맥을 가져와 시스템 상태를 복원한 후에 실행하는
것
Context switching은 overhead이기 때문에 짧을 수록 효율적 임
5
thread의 개념을 통해 이를 보완하는 방법
임베디드 (실시간) OS의 주요 개념
Mutual exclusion
두개의 태스크가 동시에 하나의 공유자원에 접근하려고 할 때 한 태스크에
게 자원 사용에 대한 배타적 권리를 보장하는 것
Critical section : 공유자원을 access하는 일련의 코드부분
다른 태스크에 의해서 중단되어서는 안 되는 일련의 명령 혹은 코드 블록
상호배제 기법
6
인터럽트 발생을 방지
Critical section에 들어가기 전에 인터럽트를 disable시키고 (CLI) 빠져
나오면서 인터럽트를 다시 enable 시키는 방법 (STI)
단일 CPU의 경우 단순하게 사용 가능
semaphore 이용
semaphore를 얻지 못하면 공유자원을 얻을 수 없으며 일단 semaphore
를 얻으면 공유자원을 마음 놓고 쓸 수 있다.
다른 태스크를 위해서 공유자원을 다 쓰면 semaphore를 풀어야 한다.
Semaphore가 0 이면 waiting한다.
임베디드 (실시간) OS의 주요 개념
Semaphore
공유변수 사용
mutual exclusion을 만들어 공유자원을 제어
태스크 사이의 동기화에 사용 가능
사용 방법
공유자원에 해당하는 semaphore를 만든다.
공유자원을 사용하기 직전에 해당 semaphore 얻는다.
변수 값이 0이 아닌 경우 그 변수 값을 1 감소 시킨다.
0이면 양수가 될 때까지 기다린다. (SLEEP상태)
공유자원을 다 쓰면 그 값을 1 증가 시킨다.
종류
7
Binary semaphore : 공유자원의 변수가 0,1인 경우
Counting semaphore : 1이상의 값
임베디드 (실시간) OS의 주요 개념
Task communication
태스크간에 통신하는 방법
Global variable
exclusive access를 해야 하며, ISR이 포함된 인터럽트를 disable해
야 한다.
Task 사이에서는 인터럽트를 disable하는 방법 외에 semaphore를
사용할 수 있다.
message passing
Global variable을 쓰는 방법 / message passing 방법
Mailbox, queue, pipe – message의 크기에 따라 결정됨
Task synchronization
태스크 간의 동기화 기능
Semaphore/event flag/signal 등을 사용
8
임베디드 (실시간) OS의 주요 개념
Interrupt service
Asynchronous event를 CPU에 알리는 방법
Interrupt는 외부에서 들어오는 중요한 신호로서 시간에 민감한
경우가 있기 때문에 interrupt latency가 짧은 것이 좋음.
ISR자체도 짧은 것이 좋은데 그 이유는 ISR 자체가 길어지면
interrupt nesting이 되기 쉽기 때문.
ISR에서는 보통 그에 상응하는 태스크 수준의 service routine을
부르고(HISR) 끝나도록 구성.
HISR에서는 마치 태스크처럼 존재해서 수행이 된다.
9
리눅스 역사(history)
Linux 역사
핀란드 대학원생 Linus B. Torvalds
1991 version 0.01 발표
1994년에는 리눅스 커널 버전 1.0
1996년 2.0
1999년 2.2 버전의 발표로, 엔터프라이즈 환경에 진입할 수 있는 초
석 마련
최근 2.4 버전이 주로 사용되고 2.6 발표 상태
A. Tanenbaum 교수의 Minix 기반
(http://www.cs.vu.nl/~ast/minix.html)
Philosophy of COPYLEFT(open source)
GNU support
Various Distributions : Redhat, Ubuntu, Fedora, Debian,
Slackware, Alzza, …
10
Linux/GNU를 만들어가는 사람들
리누스 토발즈(Linus Torvalds)
- 최초의 리눅스 커널을 만듦
- 리눅스 소스코드를 GNU의 GPL에 따라 인터넷에 공개
리차드 스톨만(Richard Stollman)
-GNU 프로젝트의 리더로 FSF를 설립
-카피레프트(CopyLeft) 주장
래리 월(Larry Wall)
-펄의 제작자
-오픈 소스 프로그램과 여러 가지 게임 만듦
밥 영 (Bob Young)
-RedHat의 공동 창립자, 오픈소스 운동의 선구자
11
리눅스 운영체제 구조
process 1
process 2
process 3
process n
User Space
System Call Interface
Filesystem Manager
Process Manager
Memory Manager
Ext2fs proc xiafs
nfs msdos ntfs
Paging/Segmentation
Task Management
Scheduler
Signaling
IPC
Kernel Space
Buffer Cache
Device Manager
block
Network Manager
character
socket
IrDA
Console KBD SCSI
CD-ROM PCI ethernet
Ipv6
Bluetooth
Hardware Interface
dev1
dev2
dev3
dev4
devn
(Source : Linux Kernel Internals)
12
리눅스와 GNU
GNU (GNU’s not Unix)
80년대 초반 리차드 스톨만(Richard Stallman)에 의하여 시작
GPL (General Public License)
GPL에 의거한 모든 소프트웨어는 무료
변경 사항을 포함해서 재판매 하는 것은 허용하나 소스는 공개해야
함
프로그래머는 자신의 소프트웨어로 발생하는 어떤 위험이나 손해에
대한 법률적 책임이 없음
Linux에 gcc, emacs 등을 이식
BSD의 많은 유용한 유틸리티를 포함하게 하는 계기가 됨
리눅스는 GPL에 의거하여 배포
13
리눅스 커널 버전의 선택
커널 버전
역사 : http://www.kernel.org
버전 숫자 : X.Y.ZZ
최신 버전 : 3.0.4
X : 커널의 버전
Y : 릴리즈 번호, 홀수->개발 중, 짝수->안정된 버전
ZZ : Modifications, 사소한 변화를 의미
새로운 다양한 기능이 이미 추가되어 있음
크기가 매우 크다는 단점이 있음
커널 버전의 선택
임베디드 시스템의 크기를 고려
필요한 기능을 고려
확장성을 고려
14
왜 Linux를 사용하는가 ?
풍부하고 다양한 하드웨어를 효과적으로 지원
대부분의 하드웨어를 지원하는 추세임
인터넷에 맞는 강력한 네트워크 구축
윈도우와 통신 가능 (삼바)
놀라운 성능 및 안정성
Pentium으로도 충분히 빠르며 안전하게 수행
다양한 응용 프로그램
무료이기 때문
배포판 : RedHat 9.0, …
15
Embedded Linux
임베디드 리눅스 출현 배경
H/W의 발전
S/W의 많은 기능 요구
32/64bit 고성능 CPU
OS의 기능이 중요, 안정된 운영체제의 제공(멀티 태스킹의 제공)
강력하고 다양한 네트워크 환경의 제공
다양한 형태의 파일시스템과 실행파일 포맷 지원
확장성의 다양함과 용이함의 제공
Free Software
16
Embedded Linux (cont’d)
임베디드 리눅스 장점
기능성과 확장성이 우수 (리눅스 이용에 따른 장점)
PowerPC, ARM, MIPS 등 다양한 CPU Platform지원함
로열티가 없으므로 가격 경쟁력이 우수
사용자 층이 넓어 오류 수정이 빠르고 안정성이 우수
기존의 데스크 탑 개발 환경과 동일하여 개발이 용이함
임베디드 리눅스 단점
기존의 RTOS보다 많은 메모리를 요구함
범용 OS로 설계되어 Real-Time을 지원하지 못함
개발 환경이 Text 기반의 환경임으로 개발에 어려움이 있음
GUI 환경을 개발하기 어려움
제품화하기 위한 솔루션 구성이 어려움
많은 업체들과 개발자들이 독자적으로 개발하고 있어 표준화가
어려움
17
리눅스 사용을 위한 준비
Linux 배포판 설치
2.1 linux 설치 파일 참조
에디터
SHELL 이해
리눅스 명령어 이해
시스템 관리 명령어
네트웍 관리 명령어
파일 관리를 포함한 다양한 리눅스 명령어
에디터, 컴파일러 이해
18
에디터
vi
대표적인 텍스트 에디터
텍스트 모드로 동작
gedit
WordPad 정도의 기능을 가진 그래픽 에디터
파일 편집, 저장, 자르기, 복사, 붙이기, 찾기 등의 기능
kate
KDE Advanced Text Editor
Editing Text documents
19
Shell
20
개요
쉘이란 무엇인가?
명령어 해석기(command interpreter)
사용자와 os 사이에 창구 역할
쉘의 종류
Bourne shell
Bash (Bourne Again shell)
Korn shell
Korn shell
C shell
…
Bourne shell
core
C shell
core
21
쉘의 핵심 기능
쉘
내장명령어
스크립트
변수
지역
리다이렉션
환경
대표문자
파이프
명령열
조건부
서브쉘
무조건부
후면처리
명령어처리
쉘 선택
쉘 선택
시스템 관리자가 설정
/etc/passwd
쉘의 절대 경로명
Bourne /bin/sh , /bin/bash
Korn
/bin/ksh
C shell /bin/csh
23
쉘 선택
사용자가 쉘 선택
%chsh
Changing login shell for chang
Old shell : /bin/csh
New shell : /bin/ksh
%logout
login : chang
passwd:
$
24
쉘의 절차
read a startup file in the user's home directory
display a prompt and waits for a user command
execute the user's command
Control-D
Terminate
25
시작 파일(Startup file)
Bourne shell : /bin/sh
.profile
.login
Bourne again shell : /bin/bash
.bashrc
.login
C shell : /bin/csh
.cshrc
.login
26
실행 파일 vs. 내장 명령어
Shell 내장 명령어
% echo -n {arg}*
% cd directory
유틸리티 프로그램(utility program)
실행 허용 파일(a file with execute permission)
디렉토리에 저장되어 있음
쉘 변수 $PATH에 있는 순서대로 찾아서 실행
/bin, /usr/bin, /usr/local/bin, /usr/ucb, /etc, /usr/bin/X11
% ls
... /bin/ls
27
출력 리디렉션
출력을 파일에 저장
%command > fileName
%ls > sample.txt
출력을 파일에 첨부(append)
%command >> fileName
%cat >> sample.txt
28
입력 리디렉션
입력 리디렉션
파일을 표준입력으로 받아서 실행
%command < fileName
%elm chang < sample.txt
Here documents
%command << word
…
word
29
파이프(Pipe)
Command1의 표준 출력을 command2의 표준 입력으
로 만든다.
%command1 |command2
%ls | wc -w
terminal
pipe
keyboard
command1
command2
30
명령어 대치
backquote(`)로 둘러 쌓인 명령어는 그 표준출력으로
대치된다.
%echo the date today is `date`
31
Shell Script Programming
shell script
Shell 명령들을 포함하는 실행 가능 상태의 파일
Shell script 예제 프로그램
파일 확장자 바꾸기
shell script의 첫 줄에 사용 shell 명시
#!/bin/bash
#
rfe old_extension new_extension
# 예제: # 현재 디렉토리의 모든 *.gif 파일을 *.jpg로 바꾸기
#
rfe gif jpg
if [ $# -ne 2 ] then
echo "사용법: `basename $0` old_file_suffix new_file_suffix"
exit 1
fi
for filename in *.$1
# 첫 번째 인자로 끝나는 파일들을 찾아서
do
mv $filename ${filename%$1}$2
# 파일 이름에서 첫 번째 인자 부분을 떼어내고 두 번째 인자를 붙인다.
done
32
기본 명령어
33
명령 실행
Shell
UNIX의 명령어 해석기(command line interpreter)
Bourne shell, Korn shell, C shell
date [yymmddhhmm [.ss]]
display or set current date and time
온라인 매뉴얼
man [chapter] word
man -k keyword
•
$man -k mode
•
$man chmod
•
$man 2 chmod
34
특수 문자
특수 문자
$stty all
erase
intr quit stop
werase
rprnt
flush lnext
susp
eof
프로세스 종료
Control-C
standard way to interrupt the foreground job
출력 멈춤/계속
kill
Control-S/Control-Q
입력 끝
Control-D
35
파일 시스템
bin usr
dev
home
chang
36
파일 시스템
홈 디렉토리(home directory)
현재 작업 디렉토리(current working directory)
로그인하면 홈 디렉토리에서 작업 시작
시스템 관리자가 설정
Shell이 현재 작업 중인 디렉토리
로그인 하면 홈 디렉토리가 현재 작업 디렉토리
cwd 변경
디렉토리 이동
cd [directoryName]
37
경로명(pathname)
절대 경로명(Absolute path name)
루트 디렉토리로부터 파일이나 디렉토리의 경로 이름
/home/chang
상대 경로명(Relative path name)
파일이나 디렉토리의 경로이름을 cwd을 기준으로 기술
. : 현재 디렉토리
.. : 부모 드렉토리
38
파일 명령어
디렉토리 내용 리스트
ls -adglsFR {fileName}* {directoryName}*
-a : hidden files starting with .
-l : long listing including permission, owner,
modification time
-d : directory not files
-g : file's group
-s : size
-F : file type ( *, /)
-R : recursively
39
파일 명령어
•
ls
파일 명령어
파일 내용 리스트
cat [option] {fileName}*
more [option] {fileName}*
page [option] {fileName}*
head [option] {fileName}*
tail [option] {fileName}*
41
파일 명령어
파일 이름 변경
mv [option] oldFileName newFileName
mv [option] {fileName}* directoryName
mv [option] oldDirectoryName newDirectoryName
디렉토리 만들기
mkdir [option] newDirectoryName
새 디렉토리 생성
42
파일 명령어
파일 복사
cp -i {fileName}* directoryName
cp -r directoryName1 directoryName2
cp -i oldFileName newFileName
파일 혹은 디렉토리 제거
rmdir {directoryName}+
rm -fir {fileName}+
파일의 단어 수 세기
wc -lwc {fileName}*
43
파일 특성(file attribute)
파일 이름
파일 크기
파일 갱신 시간
파일을 구성하는 블록 수
최후 갱신 시간
파일 소유자/그룹
파일 소유자
각 프로세스는 소유자가 있다.
로그인 사용자 아이디(login user id)
프로세스가 생성한 파일의 소유자
그 프로세스의 소유자로 설정된다.
44
파일 특성(file attribute)
파일 타입
character
file type
regular file
d
directory file
b
buffered special file like a disk
drive
c
unbuffered special file like a
terminal
l
symbolic link
p
pipe
s
socket
45
파일 특성(file attribute)
허용 모드(permission mode)
owner
rwx
group
rwx
others
rwx
46
파일 변경
Changing a file's permissions
chmod -R permission
owner
rwx
111
7
group
rwx
111
7
{fileName}+
others
rwx
111
7
$chmod 750 .
$chmod 644 filename
47
파일 변경
Changing a file's owner
chown -R UserId {fileName}+
change the ownership of files
$chown chang filename
Changing groups
chgrp -R GrpId {fileName}+
change the group of files
48
파일 비교
diff : 파일간의 모든 차이점과 비슷한 점을 보여줌
diff [ -i -Dflag ] fileName1 fileName2
-i
; 대소문자의 구분을 무시한다(ignore)
-Dflag ; C preprocessor를 위한 출력을 생성
49
파일 탐색
find pathList expression
pathList
expression
find . -name "*.txt" -print
파일을 탐색할 경로의 리스트 (recursive search)
파일 이름이 pattern과 일치하면 참(*, [, ], ? 포함 가능)
permission의 8진수 표현이 oct와 일치하면 참
파일의 유형이 ch이면 참 (ch: b=block, c=char)
파일의 소유자가 userId이면 참
파일의 그룹이 groupId이면 참
접근(access)한 날 수가 count 이내이면 참
수정(modify)한 날 수가 count 이내이면 참
수정되고 화일의 속성이 바뀐 날수가 count이내이면 참
수행 중인 command의 종료값이 0이면 참. \;로 끝남
command의 argument가 {}이면, 현재 화일의 이름으로 치환
-print
현재 파일명을 프린트하고 참 값을 반환
-ls
현재 파일의 속성을 보여주고 참 값을 반환
-cpio device
현재의 파일을 cpio 형식(5120 byte records)으로 device에 쓰고 참 값 반환
!expression
expression의 논리 부정
\( expr1 [-a] expr2 \) 두 expression의 and
\( expr1 [-o] expr2 \) 두 expression의 or
-name pattern
-perm oct
-type ch
-user userId
-group groupId
-atime count
-mtime count
-ctime count
-exec command
50
파일 내용 탐색
파일 내용(문자열) 탐색 - grep
지정된 문자열이 발견되면 해당라인을 출력
“grep”옵션
"-v"(invert)는 지정한 문자열과 일치하는 라인을 제외한 모든 라인을 출력
"-n"(number)는 문자열이나 패턴과 일치하는 라인들의 번호를 표시
"-c"(count) 옵션은 검색 문자열과 일치하는 라인을 화면에 표시되지 못하게 함
"-l"(listfile) 옵션은 특정한 패턴을 찾기 위해 여러 개의 파일을 검색할 때
정규식 사용하기
“^”, “$”, “.”와 같은 메타 문자 사용
파이프라인 이용
51
파일 압축과 복원
gzip - 대표적인 압축 프로그램 (복원은 gunzip)
gzip (option) (file or directory)
옵션:
-d 압축을 푼다
-l 현재 압축된 파일의 내용을 보여준다
-r 현재 디렉토리부터 하위 디렉토리까지 전부를 압축한다.
-t 압축 파일의 완전성을 검사한다.
-v 압축 진행 상황을 보여준다.
-9 최대한 압축한다.
bzip2 - “bzcat” 명령어로 현재 압축된 파일 내용을 봄
옵션
-d 압축을 해제한다.
-z 파일을 압축한다.
-t 압축 파일의 완전성을 검사한다.
-v 압축 진행 상황을 보여준다
52
파일 압축과 복원 (Cont’d)
compress
압축이 완료되면 기존 파일이 없어지면서 확장자가 “.Z"으로 생성
된다.
압축된 파일의 내용을 보기 위해서는 zcat 명령어를 사용
복원을 위해서는uncompress를 사용
단독으로는 별로 쓰이지 않고 tar 명령어와 함께 주로 사용
53
파일 묶기 (tar)
여러 개의 파일에 대하여 허가권이나 소유권을 유지하면서 하나의 파
일로 묶는 아카이브(archive) 유틸리티
여러 개의 파일을 묶은 다음 압축하는 것이 일반적인 백업 및 프로그
램 배포 형태임
명령의 형식 :
tar options archive-file target-files
옵션 및 의미
-c 새로운 아카이브 파일을 작성한다.
-t 묶음파일의 내용을 보여준다.
-x 묶음 파일을 해제한다.
-r 묶음 파일에 새로운 파일을 추가한다.
--delete 묶음 파일에서 특정 파일을 삭제한다.
-u 묶음 파일보다 새로운 파일이면 update 한다.
-v 묶음과정을 보여준다.
-f 묵음 파일명을 지정한다.
-z 묶음실행과 동시에 gzip으로 동시에 압축한다.
54
파일 묶기(Cont’d)
source 디렉토리 전체를 묶기 : tar cvf source.tar source
묶은 파일을 압축하기 : gzip source.tar
압축을 해제하기 : gunzip source.tar.gz
묶은 파일에 담긴 파일 이름 보기 : tar tvf source.tar
묶은 파일에서 내용 풀기 : tar xvf source.tar
gzip과 함께 사용하기
tar cvf – files | gzip –9 > tarfile.tar.gz
묶을 결과를 표준 입출력을 사용하여 곧바로 압축할 수 있음
시간을 절약과 함께 중간 결과를 저장하기 위한 공간 불필요
gunzip –9c tarfile.tar.gz | tar xvf –
물론 압축을 해제한 후 곧바로 풀기 실행
tar(gtar) cvzf tarfile.tar.gz files…
55
소프트웨어 패키지(배포판)
바이너리 패키지
일반적으로 공유 라이브러리 사용
보안에 문제가 생길 수 있음
패키지 시스템 활용하여 설치 쉬움: RPM 등
소스 패키지
개선을 위한 개발에 이용가능
자신의 환경에 적합한 컴파일 가능 (컴파일러, OS…)
컴파일 환경을 설정해야 하는 등 설치 어려움
56
RPM
RPM 이란?
RPM 실행
RedHat Package Manager
레드햇사에서 만들어낸 패키지 관리 툴의 의미
www.rpm.org에서 GPL하에서 자유롭게 공개, 개발
설치 파일과 설치 정보를 같이 가지고 있슴
설치될 때 설치 정보를 시스템의 설치 데이타베이스에 갱신
의존성 추적으로 설치 요구조건 검증 및 제거시 사용 현황 파악
rpmfind.net에 거의 모든 rpm 파일이 존재함
RPM 기능
패키지 자동설치 및 제거
업그레이드 기능
패키지 검증
패키지 정보 검색
57
RPM 팩키지 파일명
팩키지 이름 - 버전 - 릴리즈 - 아키텍처.rpm
팩키지 이름(Package name)
버전(Version)
현재 팩키지의 버전을 나타냄.
릴리즈(Release)
팩키지 이름을 나타내는 것으로 우리가 보통 말하는 실행 프로그램 명
이것은 현재 패키지가 몇 번째로 만들어 졌는가를 나타내는 것으로 보
통 패치 버전을 나타냄. 숫자가 높을수록 최신 파일이고 그만큼 또 안
정하다는 것을 나타내어 줌.
사용되는 시스템의 아키텍처(Architecture)를 말함. 즉 어느 플랫폼에
서 작동하는 가를 나타내어 줌.
확장자
RPM으로 만들어진 팩키지라는 것을 나타내어 줌.
58
팩키지 설치/제거/업그레이드
RPM 팩키지를 설치할 때에는 -ivh 옵션을 같이 사용
RPM 팩키지를 제가할 때에는 -e 옵션을 사용
RPM 팩키지를 업그레이드하기 위해서는 -U옵션을 사용
RPM 패키지를 설치할 경우에는 -i 옵션을 사용
설치시 설치하는 과정을 보고 싶다면 -i 옵션과 함께 -v 옵션을 사용
RPM 설치 시에도 설치경과 막대그래프를 보기 위해서는 -h 옵션을 사용
일반적으로 -Uvh 옵션을 사용
맨 처음 설치 할 때도 -U 선택사항을 써서 설치할 수도 있는데 이때에는
구 버전의 팩키지가 있으면 제거한 후 설치하고, 구 버전의 패키지가 없
을 때에는 일반적인 설치를 하게 됨
시스템에 설치된 패키지를 모두 알고 싶으면 -qa 옵션 사용
현재 시스템에 bootp 관련 패키지의 설치 유무를 알고 싶을 때
59
예) rpm -qa | grep bootp
팩키지 정보 검색
팩키지 정보 관련 옵션
질문 옵션인 -q와 함께 사용하여 패키지 정보 추출 가능
rpm -qi gcc-2.95-4.3wow
-a 현재 설치된 모든 팩키지를 보여준다.
-f <파일> <파일>을 포함한 팩키지가 무엇인지 알아낸다.
-F -f와 같지만 파일이름이 표준 입력으로 들어온다는 것만 다르다.
-p <팩키지파일> 지정한 팩키지 파일에 대한 정보를 파악한다.
-P -p와 같지만 입력만 표준 입력으로부터 받는다
-I 팩키지 이름, 팩키지에 대한 짤막한 설명, 패키징 버전, 크기, 패키징 날짜,
설치된 날짜, 패키징한 업체 등의 정보
-l 팩키지가 가지고 있는 파일의 목록
-s 설치된 팩키지에 있는 모든 파일의 상태
-d 팩키지에서 문서(man page, readme 등)로 된 파일의 목록
-c 설정 파일로 표시된 파일의 목록(sendmail.cf, passwd, inittab)
60
소프트웨어 인스톨
예제: Apache 웹서버 설치
RPM(RedHat Package Manage)를 사용하는 경우
*.rpm 이라는 이름으로 배포된다.
#>rpm –Uvh apache_1.3.19.rpm
소스코드를 컴파일하여 수동으로 설치하는 경우
보통 *.tar.gz라는 이름으로 배포된다.
gzip xvf apache-1.3.19.tar.gz
tar xvf apache-1.3.19.tar
cd apache-1.3.19
make; make install
61
gzip압축을 푼다.
tar압축을 /apache-1.3.19
디렉토리에 푼다.
컴파일 및 설치
파일시스템 mount
마운트(mount): 블록장치를 파일시스템 트리(tree)의 하
부 디렉토리를 통해 접근하게 해 주는 명령
CD-ROM과 플로피 디스크 드라이브 마운트
mount /dev/cdrom /mnt/cdrom
mount /dev/fd0 /mnt/floppy
/
src
장치명
마운트할 위치
mnt home usr ...
cdrom floppy
마운트 해제 : umount /mnt/cdrom
/etc/fstab : 파일시스템 마운트 테이블
시스템 부팅과 함께 자동으로 마운트되어야 할 항목과 옵션
/dev/hda1
/dev/hdb1
/dev/fd0
...
62
/
/b
/mnt/floppy
ext2
ext2
auto
defaults
defaults
noauto,owner
11
11
00
파일시스템 관리
새로운 하드디스크 추가
IDE 디스크의 경우/dev/hda ~ /dev/hdd 중의 하나의 장치명에 할당
됨 (IDE 포트와 master/slave 설정에 따라서)
파티션을 나누는 명령 :
fdisk /dev/hdb
새로운 파일시스템 만들기
mkfs –t ext2 /dev/hdb
파일시스템 type
파티션
파일시스템 수리
fsck –t ext2 /dev/hdb
proc 파일시스템: 시스템 정보를 제공. /proc을 통해 접근 가능
63
파일 시스템 복구와 검사(fsck)
리눅스 파일 시스템은 매우 복잡함
파일 시스템은 데이터 블록, 사용하거나 사용하고 있지 않은 블록의
리스트, 디렉토리와 그 디렉토리 구조에 함께 붙어있는 inode 내의
모든 정보를 포함하고 있음
파일 시스템이 정상적인 종료나 특별한 경우에 손상을 입을 경우 위
의 구성 요소들이 일치하지 않을 경우가 있음
fsck(for file system consistency check) 명령은 파일 시스템을 조
사하여 손상된 파일을 출력해 주며 사용자에게 그것을 복구할 것인지
를 질의
fsck 수행은 시스템마다 약간의 차이가 있지만 대부분 다음과 같은 5
개 항목에 대하여 검사
Blocks and sizes, Pathname, Connectivity, Reference count, Free
List
64
파일 연결관계(Link) 만들기(ln)
매우 긴 파일이름이 있고, 사용자는 이 파일을 자주 참고
하거나, 그 파일을 다른 디렉토리에 연결하여 그 디렉토리
에서도 그 파일의 경로 이름을 모두 입력하지 않고 파일
이름만을 입력하여 파일을 사용할 필요가 있을 때 사용
최초에는 링크수가 1개이지만 , 연결관계를 생성하고 나
면 같은 크기의 파일이 새로 생성되어 링크수가 증가
ln
일반형식
ln [OPTION]... TARGET [LINK_NAME]
ln [OPTION]... TARGET... DIRECTORY
ln [OPTION]... --target-directory=DIRECTORY TARGET...
주요옵션
-f : 자신이 액세스 할 수 없는 사용권한을 가졌을 때도 링크가 가능하게 함
-s: 하드 링크 대신에 심볼릭 링크 생성
65
파일 연결관계(Link) 만들기(ln)
하드 링크 :
동일한 파일 시스템 내에서의 링크
여러 개의 레이블 생성이 가능하나, 물리적 파일은 동일함
하드 링크가 추가될 때마다 링크 계수 항목이 증가
소프트 링크(심볼릭 링크)
다른 파일 시스템들 간의 링크
링크 계수 항목이 증가하는 대신에 permission에 l--- 식으로 기록됨
ls -F 로 참조할 때 파일 이름 뒤에 @가 표시됨
$ ln -f -s original newLink
-f
슈퍼유저가 디렉토리에 하드 링크를 생성할 수 있게 함
-s 소프트 링크로서 파일 시스템을 확장 가능
$ ln -f -s { original }+ driectory
명시된 파일(original)들에 대한 링크를 directory에 생성
(예) $ ln hold.3 hold
$ ln hold.* tmpdir
$ ln -s /usr/include/stdio.h stdio.h
$ ls -l stdio.h
lrwxrwxrwx 1 mjkim 20 Jan 12 17:58 stdio.h -> /usr/include/stdio.h
66
디스크 사용관리(df,du)
리눅스에서는 사용 가능한 디스크 공간을 검사해 주는 유
틸리티인 "df"을 제공
사용자들은 수시로 이 유틸리티를 실행시켜 디스크 용량
을 확인해야 함
보통은 "cron"이라는 셸 스크립트를 실행시키는 것도 하
나의 방법이 될 수 있음
용량이 "95%"가 넘어가면 해당 파일시스템을 검사해야 한
다. 왜냐하면 메일이라든가, 임시파일 등이 계속 생기므로
어느 정도 여유공간이 항상 있어야 함
이외에도 "du" 명령어가 있는데 이는 현재의 디렉토리와
디렉토리 안의 파일들이 얼마나 많은 용량을 차지하고 있
는지를 킬로바이트(Kbyte) 또는 512 byte 단위로 보여줌
67
시스템 로그 관리
시스템 디버깅 또는 시스템의 사용을 추적하는데 유용
시스템 로그는 콘솔(console) 화면 또는
/var/log/message를 통해 모니터 가능
xterm화면에서 tail –f /var/log/message 를 실행하면 시스템
로그를 모니터할 수 있다.
시스템 로그를 볼 수 없는 경우
syslogd 프로그램이 실행 안된 경우.
/etc/rc.d/init.d/syslog start 명령을 통해 syslogd 프로그램을
실행시킨다.
68
관리자로 로그인하기
실습에서 다루는 대부분의 명령은 관리자(super user;
root) 권한을 필요로 한다.
관리자로 로그인하기
# su
Password: [root 패스워드]
# su Password: [root 패스워드]
관리자에서 로그아웃하기
# exit
69
디렉토리를 변경하지 않는다.
USER, PATH등 주요변수를 변경하지
않는다.
디렉토리를 root의 홈디렉토리
(/root)로 변경하고 USER,
PATH 등 주요변수도 변경한다.
사용자 관리
사용자 추가
useradd –d /home/ssyoo –s /bin/bash –c “SCM-EM helper.” ssyoo
홈 디렉토리
사용자 패스워드 지정(변경)
passwd ssyoo
쉘의 종류
사용자 제거
userdel ssyoo
70
사용자명
사용자 ID